summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk28
-rw-r--r--CleanSpec.mk3
-rw-r--r--api/current.txt1022
-rw-r--r--cmds/settings/src/com/android/commands/settings/SettingsCmd.java34
-rw-r--r--core/java/android/animation/ObjectAnimator.java95
-rw-r--r--core/java/android/annotation/SystemApi.java (renamed from core/java/android/annotation/PrivateApi.java)21
-rw-r--r--core/java/android/app/ActionBar.java2
-rw-r--r--core/java/android/app/Activity.java31
-rw-r--r--core/java/android/app/ActivityTransitionCoordinator.java14
-rw-r--r--core/java/android/app/ActivityTransitionState.java38
-rw-r--r--core/java/android/app/ContextImpl.java16
-rw-r--r--core/java/android/app/EnterTransitionCoordinator.java71
-rw-r--r--core/java/android/app/JobSchedulerImpl.java72
-rw-r--r--core/java/android/app/Notification.java76
-rw-r--r--core/java/android/app/SearchManager.java106
-rw-r--r--core/java/android/app/TaskManagerImpl.java62
-rw-r--r--core/java/android/app/VoiceInteractor.java2
-rw-r--r--core/java/android/app/admin/DeviceAdminReceiver.java38
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java29
-rw-r--r--core/java/android/app/job/IJobCallback.aidl (renamed from core/java/android/app/task/ITaskCallback.aidl)31
-rw-r--r--core/java/android/app/job/IJobScheduler.aidl (renamed from core/java/android/app/task/ITaskManager.aidl)14
-rw-r--r--core/java/android/app/job/IJobService.aidl (renamed from core/java/android/app/task/ITaskService.aidl)19
-rw-r--r--core/java/android/app/job/JobInfo.aidl (renamed from core/java/android/app/task/Task.aidl)5
-rw-r--r--core/java/android/app/job/JobInfo.java (renamed from core/java/android/app/task/Task.java)161
-rw-r--r--core/java/android/app/job/JobParameters.aidl (renamed from core/java/android/app/task/TaskParams.aidl)4
-rw-r--r--core/java/android/app/job/JobParameters.java (renamed from core/java/android/app/task/TaskParams.java)44
-rw-r--r--core/java/android/app/job/JobScheduler.java72
-rw-r--r--core/java/android/app/job/JobService.java (renamed from core/java/android/app/task/TaskService.java)161
-rw-r--r--core/java/android/app/maintenance/package.html5
-rw-r--r--core/java/android/app/task/TaskManager.java72
-rw-r--r--core/java/android/content/Context.java33
-rw-r--r--core/java/android/content/Intent.java70
-rw-r--r--core/java/android/content/SyncRequest.java31
-rw-r--r--core/java/android/content/pm/ActivityInfo.java11
-rw-r--r--core/java/android/content/pm/ContainerEncryptionParams.java4
-rw-r--r--core/java/android/content/pm/ManifestDigest.java4
-rw-r--r--core/java/android/content/pm/PackageManager.java84
-rw-r--r--core/java/android/content/pm/PackageParser.java3
-rw-r--r--core/java/android/hardware/Sensor.java1
-rw-r--r--core/java/android/hardware/camera2/CameraCaptureSession.java20
-rw-r--r--core/java/android/hardware/camera2/CameraCharacteristics.java109
-rw-r--r--core/java/android/hardware/camera2/CameraDevice.java639
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java16
-rw-r--r--core/java/android/hardware/camera2/CameraMetadata.java538
-rw-r--r--core/java/android/hardware/camera2/CaptureRequest.java236
-rw-r--r--core/java/android/hardware/camera2/CaptureResult.java298
-rw-r--r--core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java61
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java18
-rw-r--r--core/java/android/hardware/camera2/package.html72
-rw-r--r--core/java/android/hardware/camera2/params/StreamConfiguration.java7
-rw-r--r--core/java/android/hardware/camera2/params/StreamConfigurationMap.java26
-rw-r--r--core/java/android/hardware/camera2/params/TonemapCurve.java15
-rw-r--r--core/java/android/hardware/camera2/utils/TaskDrainer.java2
-rw-r--r--core/java/android/hardware/hdmi/HdmiCec.java5
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecClient.java119
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecManager.java68
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecMessage.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiControlManager.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiHotplugEvent.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiPlaybackClient.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiTvClient.java5
-rw-r--r--core/java/android/hardware/hdmi/IHdmiCecService.aidl40
-rw-r--r--core/java/android/net/ConnectivityManager.java69
-rw-r--r--core/java/android/net/DhcpResults.java8
-rw-r--r--core/java/android/net/DnsPinger.java2
-rw-r--r--core/java/android/net/LinkProperties.java86
-rw-r--r--core/java/android/net/Network.java55
-rw-r--r--core/java/android/net/NetworkUtils.java2
-rw-r--r--core/java/android/net/ProxyDataTracker.java4
-rw-r--r--core/java/android/os/BatteryManager.java90
-rw-r--r--core/java/android/os/BatteryProperty.java61
-rw-r--r--core/java/android/os/IPowerManager.aidl1
-rw-r--r--core/java/android/os/PowerManager.java30
-rw-r--r--core/java/android/os/UserManager.java37
-rw-r--r--core/java/android/provider/DocumentsContract.java120
-rw-r--r--core/java/android/provider/DocumentsProvider.java81
-rw-r--r--core/java/android/provider/Settings.java16
-rw-r--r--core/java/android/service/fingerprint/FingerprintManager.java1
-rw-r--r--core/java/android/service/fingerprint/FingerprintManagerReceiver.java1
-rw-r--r--core/java/android/service/notification/NotificationListenerService.java226
-rw-r--r--core/java/android/service/trust/TrustAgentService.java4
-rw-r--r--core/java/android/transition/SidePropagation.java40
-rw-r--r--core/java/android/transition/Slide.java43
-rw-r--r--core/java/android/transition/Transition.java6
-rw-r--r--core/java/android/transition/TransitionInflater.java3
-rw-r--r--core/java/android/util/Range.java30
-rw-r--r--core/java/android/util/Rational.java457
-rw-r--r--core/java/android/view/IWindowManager.aidl5
-rw-r--r--core/java/android/view/IWindowSessionCallback.aidl27
-rw-r--r--core/java/android/view/ThreadedRenderer.java3
-rw-r--r--core/java/android/view/View.java25
-rw-r--r--core/java/android/view/ViewAnimationUtils.java44
-rw-r--r--core/java/android/view/WindowManagerGlobal.java9
-rw-r--r--core/java/android/view/accessibility/AccessibilityInteractionClient.java16
-rw-r--r--core/java/android/widget/RadialTimePickerView.java24
-rw-r--r--core/java/android/widget/TextView.java3
-rw-r--r--core/java/android/widget/TimePickerDelegate.java8
-rw-r--r--core/java/com/android/internal/util/NotificationColorUtil.java2
-rw-r--r--core/java/com/android/internal/widget/LockPatternView.java12
-rw-r--r--core/jni/android/graphics/Canvas.cpp5
-rw-r--r--core/jni/android/graphics/MinikinSkia.cpp19
-rw-r--r--core/jni/android/graphics/MinikinSkia.h5
-rw-r--r--core/jni/android/graphics/MinikinUtils.h25
-rw-r--r--core/jni/android/graphics/Paint.cpp59
-rw-r--r--core/jni/android/graphics/TypefaceImpl.cpp2
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp5
-rw-r--r--core/jni/android_view_MotionEvent.cpp45
-rw-r--r--core/res/AndroidManifest.xml224
-rw-r--r--core/res/res/anim/activity_close_enter.xml5
-rw-r--r--core/res/res/anim/activity_close_exit.xml16
-rw-r--r--core/res/res/anim/activity_open_enter.xml15
-rw-r--r--core/res/res/anim/activity_open_exit.xml6
-rw-r--r--core/res/res/anim/button_state_list_anim_material.xml (renamed from core/res/res/anim/button_state_list_anim_quantum.xml)0
-rw-r--r--core/res/res/anim/popup_enter_material.xml (renamed from core/res/res/anim/popup_enter_quantum.xml)0
-rw-r--r--core/res/res/anim/popup_exit_material.xml (renamed from core/res/res/anim/popup_exit_quantum.xml)0
-rw-r--r--core/res/res/anim/task_close_enter.xml24
-rw-r--r--core/res/res/anim/task_close_exit.xml18
-rw-r--r--core/res/res/anim/task_open_enter.xml16
-rw-r--r--core/res/res/anim/task_open_exit.xml20
-rw-r--r--core/res/res/anim/wallpaper_open_enter.xml2
-rw-r--r--core/res/res/anim/wallpaper_open_exit.xml28
-rw-r--r--core/res/res/animator/fragment_open_enter.xml4
-rw-r--r--core/res/res/color/background_cache_hint_selector_material_dark.xml (renamed from core/res/res/color/background_cache_hint_selector_quantum_dark.xml)2
-rw-r--r--core/res/res/color/background_cache_hint_selector_material_light.xml (renamed from core/res/res/color/background_cache_hint_selector_quantum_light.xml)2
-rw-r--r--core/res/res/color/btn_default_material_dark.xml (renamed from core/res/res/color/btn_default_quantum_dark.xml)4
-rw-r--r--core/res/res/color/btn_default_material_light.xml (renamed from core/res/res/color/btn_default_quantum_light.xml)4
-rw-r--r--core/res/res/color/primary_text_disable_only_material_dark.xml (renamed from core/res/res/color/primary_text_disable_only_quantum_dark.xml)4
-rw-r--r--core/res/res/color/primary_text_disable_only_material_light.xml (renamed from core/res/res/color/primary_text_disable_only_quantum_light.xml)4
-rw-r--r--core/res/res/color/primary_text_material_dark.xml (renamed from core/res/res/color/primary_text_quantum_light.xml)4
-rw-r--r--core/res/res/color/primary_text_material_light.xml (renamed from core/res/res/color/primary_text_quantum_dark.xml)4
-rw-r--r--core/res/res/color/search_url_text_material_dark.xml (renamed from core/res/res/color/search_url_text_quantum_dark.xml)0
-rw-r--r--core/res/res/color/search_url_text_material_light.xml (renamed from core/res/res/color/search_url_text_quantum_light.xml)0
-rw-r--r--core/res/res/drawable-hdpi/ab_share_pack_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png)bin124 -> 124 bytes
-rw-r--r--core/res/res/drawable-hdpi/ab_solid_shadow_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png)bin192 -> 192 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_cab_done_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png)bin92 -> 92 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_000.png)bin900 -> 900 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_001.png)bin835 -> 835 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_002.png)bin699 -> 699 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_003.png)bin669 -> 669 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_004.png)bin613 -> 613 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_005.png)bin610 -> 610 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_006.png)bin597 -> 597 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_007.png)bin763 -> 763 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_008.png)bin758 -> 758 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_009.png)bin693 -> 693 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_010.png)bin664 -> 664 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_011.png)bin614 -> 614 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_012.png)bin579 -> 579 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_013.png)bin581 -> 581 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_014.png)bin602 -> 602 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_off_mtrl_015.png (renamed from core/res/res/drawable-hdpi/btn_check_to_off_qntm_015.png)bin602 -> 602 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_000.png)bin602 -> 602 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_001.png)bin673 -> 673 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_002.png)bin696 -> 696 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_003.png)bin588 -> 588 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_004.png)bin544 -> 544 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_005.png)bin548 -> 548 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_006.png)bin648 -> 648 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_007.png)bin647 -> 647 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_008.png)bin763 -> 763 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_009.png)bin827 -> 827 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_010.png)bin810 -> 810 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_011.png)bin906 -> 906 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_012.png)bin872 -> 872 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_013.png)bin882 -> 882 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_014.png)bin903 -> 903 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_to_on_mtrl_015.png (renamed from core/res/res/drawable-hdpi/btn_check_to_on_qntm_015.png)bin900 -> 900 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/btn_code_lock_default_qntm_alpha.png)bin948 -> 948 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/btn_code_lock_touched_qntm_alpha.png)bin952 -> 952 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/btn_qntm_alpha.9.png)bin189 -> 189 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_000.png)bin1086 -> 1086 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_001.png)bin966 -> 966 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_002.png)bin974 -> 974 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_003.png)bin945 -> 945 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_004.png)bin924 -> 924 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_005.png)bin854 -> 854 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_006.png)bin754 -> 754 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_007.png)bin863 -> 863 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_008.png)bin908 -> 908 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_009.png)bin944 -> 944 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_010.png)bin976 -> 976 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_011.png)bin948 -> 948 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_012.png)bin976 -> 976 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_013.png)bin956 -> 956 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_014.png)bin941 -> 941 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_015.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_off_qntm_015.png)bin951 -> 951 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_000.png)bin951 -> 951 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_001.png)bin914 -> 914 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_002.png)bin830 -> 830 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_003.png)bin779 -> 779 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_004.png)bin954 -> 954 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_005.png)bin874 -> 874 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_006.png)bin886 -> 886 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_007.png)bin988 -> 988 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_008.png)bin979 -> 979 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_009.png)bin975 -> 975 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_010.png)bin1024 -> 1024 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_011.png)bin1046 -> 1046 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_012.png)bin1079 -> 1079 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_013.png)bin1075 -> 1075 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_014.png)bin1100 -> 1100 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_015.png (renamed from core/res/res/drawable-hdpi/btn_radio_to_on_qntm_015.png)bin1086 -> 1086 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_rating_star_off_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png)bin1142 -> 1142 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_rating_star_on_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png)bin738 -> 738 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/btn_star_qntm_alpha.png)bin496 -> 496 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_000.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_001.png)bin714 -> 714 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_002.png)bin788 -> 788 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_003.png)bin819 -> 819 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_004.png)bin836 -> 836 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_005.png)bin852 -> 852 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_006.png)bin952 -> 952 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_007.png)bin952 -> 952 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_008.png)bin912 -> 912 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_009.png)bin918 -> 918 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_010.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_011.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_012.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_013.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_off_qntm_014.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_000.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_000.png)bin870 -> 870 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_001.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_001.png)bin918 -> 918 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_002.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_002.png)bin893 -> 893 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_003.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_003.png)bin773 -> 773 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_004.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_004.png)bin739 -> 739 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_005.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_005.png)bin697 -> 697 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_006.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_006.png)bin713 -> 713 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_007.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_007.png)bin714 -> 714 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_008.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_008.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_009.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_009.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_010.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_010.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_011.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_011.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_012.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_012.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_013.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_013.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_014.png (renamed from core/res/res/drawable-hdpi/btn_switch_to_on_qntm_014.png)bin740 -> 740 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_toggle_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/btn_toggle_indicator_qntm_alpha.9.png)bin188 -> 188 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_toggle_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/btn_toggle_qntm_alpha.9.png)bin225 -> 225 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_close_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png)bin326 -> 326 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_open_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png)bin330 -> 330 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_thumb_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png)bin167 -> 167 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png)bin84 -> 84 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_ab_back_mtrl_am_alpha.png (renamed from core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png)bin210 -> 210 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_afw_icon.pngbin0 -> 1298 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_cab_done_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png)bin336 -> 336 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_clear_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png)bin294 -> 294 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_commit_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png)bin192 -> 192 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_corp_badge.pngbin2211 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_dialog_alert_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png)bin506 -> 506 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_find_next_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png)bin409 -> 409 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_find_previous_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png)bin403 -> 403 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_go_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png)bin120 -> 120 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png)bin409 -> 409 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_off_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png)bin445 -> 445 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png)bin426 -> 426 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png)bin446 -> 446 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png)bin448 -> 448 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_media_route_on_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png)bin494 -> 494 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_copy_mtrl_am_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png)bin186 -> 186 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_cut_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png)bin577 -> 577 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_find_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png)bin598 -> 598 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_moreoverflow_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png)bin220 -> 220 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_paste_mtrl_am_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png)bin268 -> 268 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_search_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png)bin634 -> 634 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_selectall_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png)bin301 -> 301 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_share_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png)bin549 -> 549 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png)bin522 -> 522 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_voice_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png)bin428 -> 428 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png)bin424 -> 424 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_qntm_alpha.png)bin728 -> 728 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/indicator_code_lock_point_area_qntm_alpha.png)bin4095 -> 4095 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png)bin78 -> 78 bytes
-rw-r--r--core/res/res/drawable-hdpi/list_section_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png)bin108 -> 108 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_accessibility_features.pngbin685 -> 468 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_accounts.pngbin890 -> 714 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_affects_battery.pngbin634 -> 497 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_app_info.pngbin1491 -> 887 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_audio_settings.pngbin1446 -> 837 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_bluetooth.pngbin893 -> 934 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_bookmarks.pngbin720 -> 520 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_calendar.pngbin756 -> 537 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_camera.pngbin2217 -> 1214 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_device_alarms.pngbin2422 -> 1248 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_display.pngbin735 -> 496 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_location.pngbin825 -> 1199 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_messages.pngbin717 -> 500 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_microphone.pngbin1330 -> 756 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_network.pngbin597 -> 643 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_personal_info.pngbin1079 -> 623 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_phone_calls.pngbin1316 -> 834 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_screenlock.pngbin1272 -> 736 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_shortrange_network.pngbin597 -> 517 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_social_info.pngbin1044 -> 661 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_status_bar.pngbin443 -> 496 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_storage.pngbin1117 -> 759 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_sync_settings.pngbin1584 -> 907 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_system_clock.pngbin2529 -> 1088 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_system_tools.pngbin1711 -> 995 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_user_dictionary.pngbin765 -> 531 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_user_dictionary_write.pngbin766 -> 754 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_voicemail.pngbin1275 -> 942 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_wallpaper.pngbin1002 -> 636 bytes
-rw-r--r--core/res/res/drawable-hdpi/popup_background_mtrl_mult.9.png (renamed from core/res/res/drawable-hdpi/popup_background_qntm_mult.9.png)bin1331 -> 1331 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/progress_qntm_alpha.9.png)bin106 -> 106 bytes
-rw-r--r--core/res/res/drawable-hdpi/progress_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png)bin545 -> 545 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrollbar_handle_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png)bin114 -> 114 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_000.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_000.png)bin615 -> 615 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_001.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_001.png)bin578 -> 578 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_002.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_002.png)bin562 -> 562 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_003.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_003.png)bin519 -> 519 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_004.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_004.png)bin527 -> 527 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_005.png (renamed from core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_005.png)bin496 -> 496 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_off_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png)bin232 -> 232 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png)bin755 -> 755 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_on_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png)bin184 -> 184 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png)bin468 -> 468 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_000.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_000.png)bin498 -> 498 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_001.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_001.png)bin522 -> 522 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_002.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_002.png)bin587 -> 587 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_003.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_003.png)bin615 -> 615 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_004.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_004.png)bin613 -> 613 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_005.png (renamed from core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_005.png)bin629 -> 629 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png)bin109 -> 109 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png)bin105 -> 105 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_mtrl_am_alpha.9.png (renamed from core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png)bin282 -> 282 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png)bin153 -> 153 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/tab_indicator_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png)bin108 -> 108 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_left_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png)bin478 -> 478 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_middle_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png)bin413 -> 413 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_right_mtrl_alpha.png (renamed from core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png)bin486 -> 486 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png)bin190 -> 190 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png)bin194 -> 194 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png)bin95 -> 95 bytes
-rw-r--r--core/res/res/drawable-hdpi/textfield_search_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png)bin96 -> 96 bytes
-rw-r--r--core/res/res/drawable-hdpi/work_icon.pngbin1153 -> 4442 bytes
-rw-r--r--core/res/res/drawable-ldpi/ab_solid_shadow_mtrl.9.png (renamed from core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png)bin133 -> 133 bytes
-rw-r--r--core/res/res/drawable-ldpi/ab_transparent_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png)bin106 -> 106 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_check_off_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png)bin125 -> 125 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_check_on_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png)bin215 -> 215 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/btn_qntm_alpha.9.png)bin143 -> 143 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_radio_off_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png)bin218 -> 218 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_radio_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png)bin316 -> 316 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_radio_on_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png)bin170 -> 170 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_radio_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png)bin242 -> 242 bytes
-rw-r--r--core/res/res/drawable-ldpi/btn_star_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/btn_star_qntm_alpha.png)bin286 -> 286 bytes
-rw-r--r--core/res/res/drawable-ldpi/expander_close_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png)bin166 -> 166 bytes
-rw-r--r--core/res/res/drawable-ldpi/expander_open_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png)bin173 -> 173 bytes
-rw-r--r--core/res/res/drawable-ldpi/fastscroll_thumb_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png)bin123 -> 123 bytes
-rw-r--r--core/res/res/drawable-ldpi/fastscroll_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png)bin82 -> 82 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_ab_back_mtrl_am_alpha.png (renamed from core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png)bin159 -> 159 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_cab_done_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png)bin205 -> 205 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_dialog_alert_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png)bin281 -> 281 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_find_next_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png)bin222 -> 222 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_find_previous_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png)bin219 -> 219 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_copy_mtrl_am_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png)bin170 -> 170 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_cut_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png)bin319 -> 319 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_find_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png)bin370 -> 370 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_moreoverflow_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png)bin145 -> 145 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_paste_mtrl_am_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png)bin194 -> 194 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_search_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png)bin345 -> 345 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_selectall_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png)bin208 -> 208 bytes
-rw-r--r--core/res/res/drawable-ldpi/ic_menu_share_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png)bin317 -> 317 bytes
-rw-r--r--core/res/res/drawable-ldpi/list_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png)bin78 -> 78 bytes
-rw-r--r--core/res/res/drawable-ldpi/list_section_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png)bin100 -> 100 bytes
-rw-r--r--core/res/res/drawable-ldpi/progress_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/progress_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-ldpi/progress_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png)bin300 -> 300 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrollbar_handle_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png)bin108 -> 108 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrubber_control_off_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png)bin176 -> 176 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrubber_control_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png)bin315 -> 315 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrubber_control_on_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png)bin152 -> 152 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrubber_control_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png)bin242 -> 242 bytes
-rw-r--r--core/res/res/drawable-ldpi/scrubber_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-ldpi/spinner_mtrl_am_alpha.9.png (renamed from core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png)bin196 -> 196 bytes
-rw-r--r--core/res/res/drawable-ldpi/switch_off_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png)bin287 -> 287 bytes
-rw-r--r--core/res/res/drawable-ldpi/switch_on_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png)bin163 -> 163 bytes
-rw-r--r--core/res/res/drawable-ldpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-ldpi/text_cursor_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png)bin81 -> 81 bytes
-rw-r--r--core/res/res/drawable-ldpi/textfield_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png)bin138 -> 138 bytes
-rw-r--r--core/res/res/drawable-ldpi/textfield_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png)bin141 -> 141 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_share_pack_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png)bin117 -> 117 bytes
-rw-r--r--core/res/res/drawable-mdpi/ab_solid_shadow_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png)bin152 -> 152 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_cab_done_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png)bin85 -> 85 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_000.png)bin724 -> 724 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_001.png)bin695 -> 695 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_002.png)bin611 -> 611 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_003.png)bin572 -> 572 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_004.png)bin571 -> 571 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_005.png)bin530 -> 530 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_006.png)bin568 -> 568 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_007.png)bin598 -> 598 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_008.png)bin619 -> 619 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_009.png)bin572 -> 572 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_010.png)bin604 -> 604 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_011.png)bin539 -> 539 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_012.png)bin573 -> 573 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_013.png)bin566 -> 566 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_014.png)bin606 -> 606 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_off_mtrl_015.png (renamed from core/res/res/drawable-mdpi/btn_check_to_off_qntm_015.png)bin595 -> 595 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_000.png)bin595 -> 595 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_001.png)bin568 -> 568 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_002.png)bin581 -> 581 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_003.png)bin495 -> 495 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_004.png)bin536 -> 536 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_005.png)bin518 -> 518 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_006.png)bin567 -> 567 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_007.png)bin578 -> 578 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_008.png)bin615 -> 615 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_009.png)bin693 -> 693 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_010.png)bin677 -> 677 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_011.png)bin674 -> 674 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_012.png)bin685 -> 685 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_013.png)bin708 -> 708 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_014.png)bin708 -> 708 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_to_on_mtrl_015.png (renamed from core/res/res/drawable-mdpi/btn_check_to_on_qntm_015.png)bin724 -> 724 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_code_lock_default_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_code_lock_default_qntm_alpha.png)bin745 -> 745 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_code_lock_touched_qntm_alpha.png)bin768 -> 768 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/btn_qntm_alpha.9.png)bin154 -> 154 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png)bin234 -> 234 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png)bin326 -> 326 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_000.png)bin758 -> 758 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_001.png)bin720 -> 720 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_002.png)bin696 -> 696 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_003.png)bin712 -> 712 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_004.png)bin711 -> 711 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_005.png)bin644 -> 644 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_006.png)bin625 -> 625 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_007.png)bin621 -> 621 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_008.png)bin690 -> 690 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_009.png)bin698 -> 698 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_010.png)bin699 -> 699 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_011.png)bin726 -> 726 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_012.png)bin692 -> 692 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_013.png)bin701 -> 701 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_014.png)bin701 -> 701 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_015.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_off_qntm_015.png)bin714 -> 714 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_000.png)bin714 -> 714 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_001.png)bin684 -> 684 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_002.png)bin671 -> 671 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_003.png)bin629 -> 629 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_004.png)bin712 -> 712 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_005.png)bin675 -> 675 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_006.png)bin712 -> 712 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_007.png)bin692 -> 692 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_008.png)bin715 -> 715 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_009.png)bin720 -> 720 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_010.png)bin755 -> 755 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_011.png)bin754 -> 754 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_012.png)bin754 -> 754 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_013.png)bin759 -> 759 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_014.png)bin752 -> 752 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_015.png (renamed from core/res/res/drawable-mdpi/btn_radio_to_on_qntm_015.png)bin758 -> 758 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_off_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png)bin908 -> 908 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png)bin647 -> 647 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/btn_star_qntm_alpha.png)bin433 -> 433 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_000.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_001.png)bin533 -> 533 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_002.png)bin605 -> 605 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_003.png)bin600 -> 600 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_004.png)bin601 -> 601 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_005.png)bin600 -> 600 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_006.png)bin698 -> 698 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_007.png)bin698 -> 698 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_008.png)bin651 -> 651 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_009.png)bin616 -> 616 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_010.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_011.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_012.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_013.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_off_qntm_014.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_000.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_000.png)bin612 -> 612 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_001.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_001.png)bin616 -> 616 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_002.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_002.png)bin621 -> 621 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_003.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_003.png)bin603 -> 603 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_004.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_004.png)bin538 -> 538 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_005.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_005.png)bin569 -> 569 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_006.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_006.png)bin573 -> 573 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_007.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_007.png)bin533 -> 533 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_008.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_008.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_009.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_009.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_010.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_010.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_011.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_011.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_012.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_012.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_013.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_013.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_014.png (renamed from core/res/res/drawable-mdpi/btn_switch_to_on_qntm_014.png)bin546 -> 546 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_toggle_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/btn_toggle_indicator_qntm_alpha.9.png)bin164 -> 164 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_toggle_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/btn_toggle_qntm_alpha.9.png)bin197 -> 197 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_close_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png)bin241 -> 241 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_open_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png)bin243 -> 243 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_thumb_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png)bin129 -> 129 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png)bin87 -> 87 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_ab_back_mtrl_am_alpha.png (renamed from core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png)bin205 -> 205 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_afw_icon.pngbin0 -> 906 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_cab_done_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png)bin329 -> 329 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_clear_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png)bin216 -> 216 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_commit_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png)bin200 -> 200 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_dialog_alert_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png)bin405 -> 405 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_find_next_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png)bin318 -> 318 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_find_previous_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png)bin316 -> 316 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_go_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png)bin110 -> 110 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png)bin349 -> 349 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png)bin388 -> 388 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png)bin363 -> 363 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png)bin376 -> 376 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png)bin381 -> 381 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png)bin415 -> 415 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_copy_mtrl_am_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png)bin161 -> 161 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_cut_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png)bin433 -> 433 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_find_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png)bin545 -> 545 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_moreoverflow_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png)bin171 -> 171 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_paste_mtrl_am_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png)bin208 -> 208 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_search_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png)bin518 -> 518 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_selectall_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png)bin339 -> 339 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_share_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png)bin463 -> 463 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png)bin403 -> 403 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_voice_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png)bin374 -> 374 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png)bin366 -> 366 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_qntm_alpha.png)bin591 -> 591 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/indicator_code_lock_point_area_qntm_alpha.png)bin2352 -> 2352 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png)bin78 -> 78 bytes
-rw-r--r--core/res/res/drawable-mdpi/list_section_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png)bin100 -> 100 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_accessibility_features.pngbin603 -> 386 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_accounts.pngbin676 -> 528 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_affects_battery.pngbin562 -> 471 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_app_info.pngbin1071 -> 609 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_audio_settings.pngbin1015 -> 605 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_bluetooth.pngbin670 -> 596 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_bookmarks.pngbin600 -> 426 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_calendar.pngbin657 -> 408 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_camera.pngbin1571 -> 839 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_device_alarms.pngbin1669 -> 839 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_display.pngbin621 -> 391 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_location.pngbin673 -> 764 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_messages.pngbin605 -> 419 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_microphone.pngbin957 -> 555 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_network.pngbin554 -> 542 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_personal_info.pngbin803 -> 517 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_phone_calls.pngbin985 -> 621 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_screenlock.pngbin979 -> 542 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_shortrange_network.pngbin554 -> 406 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_social_info.pngbin1012 -> 496 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_status_bar.pngbin384 -> 418 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_storage.pngbin917 -> 528 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_sync_settings.pngbin1125 -> 686 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_system_clock.pngbin1765 -> 800 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_system_tools.pngbin1229 -> 729 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_user_dictionary.pngbin627 -> 414 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_user_dictionary_write.pngbin595 -> 530 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_voicemail.pngbin1230 -> 558 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_wallpaper.pngbin760 -> 496 bytes
-rw-r--r--core/res/res/drawable-mdpi/popup_background_mtrl_mult.9.png (renamed from core/res/res/drawable-mdpi/popup_background_qntm_mult.9.png)bin961 -> 961 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/progress_qntm_alpha.9.png)bin104 -> 104 bytes
-rw-r--r--core/res/res/drawable-mdpi/progress_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png)bin363 -> 363 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrollbar_handle_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png)bin120 -> 120 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_000.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_000.png)bin498 -> 498 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_001.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_001.png)bin474 -> 474 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_002.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_002.png)bin454 -> 454 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_003.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_003.png)bin447 -> 447 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_004.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_004.png)bin428 -> 428 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_005.png (renamed from core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_005.png)bin437 -> 437 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_off_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png)bin181 -> 181 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png)bin456 -> 456 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_on_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png)bin154 -> 154 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png)bin326 -> 326 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_000.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_000.png)bin437 -> 437 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_001.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_001.png)bin451 -> 451 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_002.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_002.png)bin478 -> 478 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_003.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_003.png)bin502 -> 502 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_004.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_004.png)bin487 -> 487 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_005.png (renamed from core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_005.png)bin498 -> 498 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png)bin106 -> 106 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png)bin100 -> 100 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_mtrl_am_alpha.9.png (renamed from core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png)bin251 -> 251 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png)bin148 -> 148 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/tab_indicator_qntm_alpha.9.png)bin94 -> 94 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png)bin106 -> 106 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_left_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png)bin346 -> 346 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_middle_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png)bin323 -> 323 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_right_mtrl_alpha.png (renamed from core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png)bin347 -> 347 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png)bin160 -> 160 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png)bin158 -> 158 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png)bin91 -> 91 bytes
-rw-r--r--core/res/res/drawable-mdpi/textfield_search_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png)bin91 -> 91 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_share_pack_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png)bin139 -> 139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ab_solid_shadow_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png)bin246 -> 246 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_cab_done_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png)bin93 -> 93 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_000.png)bin910 -> 910 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_001.png)bin928 -> 928 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_002.png)bin826 -> 826 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_003.png)bin762 -> 762 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_004.png)bin755 -> 755 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_005.png)bin682 -> 682 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_006.png)bin687 -> 687 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_007.png)bin854 -> 854 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_008.png)bin777 -> 777 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_009.png)bin751 -> 751 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_010.png)bin767 -> 767 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_011.png)bin757 -> 757 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_012.png)bin734 -> 734 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_013.png)bin709 -> 709 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_014.png)bin708 -> 708 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_015.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_off_qntm_015.png)bin719 -> 719 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_000.png)bin719 -> 719 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_001.png)bin783 -> 783 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_002.png)bin824 -> 824 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_003.png)bin661 -> 661 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_004.png)bin622 -> 622 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_005.png)bin613 -> 613 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_006.png)bin739 -> 739 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_007.png)bin744 -> 744 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_008.png)bin889 -> 889 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_009.png)bin906 -> 906 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_010.png)bin942 -> 942 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_011.png)bin894 -> 894 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_012.png)bin949 -> 949 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_013.png)bin944 -> 944 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_014.png)bin942 -> 942 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_015.png (renamed from core/res/res/drawable-xhdpi/btn_check_to_on_qntm_015.png)bin910 -> 910 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_default_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_code_lock_default_qntm_alpha.png)bin1285 -> 1285 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_code_lock_touched_qntm_alpha.png)bin1189 -> 1189 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png)bin234 -> 234 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png)bin443 -> 443 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png)bin734 -> 734 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_000.png)bin1421 -> 1421 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_001.png)bin1351 -> 1351 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_002.png)bin1263 -> 1263 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_003.png)bin1271 -> 1271 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_004.png)bin1213 -> 1213 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_005.png)bin1105 -> 1105 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_006.png)bin952 -> 952 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_007.png)bin1030 -> 1030 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_008.png)bin1125 -> 1125 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_009.png)bin1200 -> 1200 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_010.png)bin1127 -> 1127 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_011.png)bin1175 -> 1175 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_012.png)bin1226 -> 1226 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_013.png)bin1188 -> 1188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_014.png)bin1214 -> 1214 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_015.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_015.png)bin1197 -> 1197 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_000.png)bin1197 -> 1197 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_001.png)bin1139 -> 1139 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_002.png)bin1011 -> 1011 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_003.png)bin975 -> 975 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_004.png)bin1253 -> 1253 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_005.png)bin1238 -> 1238 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_006.png)bin1267 -> 1267 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_007.png)bin1323 -> 1323 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_008.png)bin1350 -> 1350 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_009.png)bin1294 -> 1294 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_010.png)bin1330 -> 1330 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_011.png)bin1358 -> 1358 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_012.png)bin1410 -> 1410 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_013.png)bin1401 -> 1401 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_014.png)bin1399 -> 1399 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_015.png (renamed from core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_015.png)bin1421 -> 1421 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_off_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png)bin1802 -> 1802 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_rating_star_on_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png)bin1168 -> 1168 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png)bin757 -> 757 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_000.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_001.png)bin865 -> 865 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_002.png)bin1010 -> 1010 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_003.png)bin1073 -> 1073 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_004.png)bin1082 -> 1082 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_005.png)bin1084 -> 1084 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_006.png)bin1310 -> 1310 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_007.png)bin1310 -> 1310 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_008.png)bin1143 -> 1143 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_009.png)bin1188 -> 1188 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_010.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_011.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_012.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_013.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_014.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_000.png)bin1161 -> 1161 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_001.png)bin1187 -> 1187 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_002.png)bin1129 -> 1129 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_003.png)bin988 -> 988 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_004.png)bin842 -> 842 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_005.png)bin843 -> 843 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_006.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_006.png)bin875 -> 875 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_007.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_007.png)bin867 -> 867 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_008.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_008.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_009.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_009.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_010.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_010.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_011.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_011.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_012.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_012.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_013.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_013.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_014.png (renamed from core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_014.png)bin902 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_toggle_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/btn_toggle_indicator_qntm_alpha.9.png)bin200 -> 200 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_toggle_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/btn_toggle_qntm_alpha.9.png)bin248 -> 248 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_close_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png)bin459 -> 459 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_open_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png)bin467 -> 467 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_thumb_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png)bin220 -> 220 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png)bin89 -> 89 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_ab_back_mtrl_am_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png)bin288 -> 288 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_afw_icon.pngbin0 -> 1488 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_cab_done_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png)bin545 -> 545 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_clear_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png)bin436 -> 436 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_commit_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png)bin281 -> 281 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_corp_badge.pngbin2989 -> 0 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_dialog_alert_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png)bin805 -> 805 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_find_next_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png)bin578 -> 578 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_find_previous_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png)bin568 -> 568 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_go_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png)bin155 -> 155 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png)bin559 -> 559 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png)bin658 -> 658 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png)bin584 -> 584 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png)bin610 -> 610 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png)bin637 -> 637 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png)bin723 -> 723 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_copy_mtrl_am_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png)bin213 -> 213 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_cut_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png)bin845 -> 845 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_find_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png)bin910 -> 910 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_moreoverflow_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png)bin287 -> 287 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_paste_mtrl_am_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png)bin372 -> 372 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_search_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png)bin990 -> 990 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_selectall_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png)bin385 -> 385 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_share_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png)bin857 -> 857 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png)bin800 -> 800 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_voice_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png)bin656 -> 656 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png)bin403 -> 403 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_qntm_alpha.png)bin953 -> 953 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/indicator_code_lock_point_area_qntm_alpha.png)bin5601 -> 5601 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png)bin78 -> 78 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png)bin115 -> 115 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_accessibility_features.pngbin1014 -> 508 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_accounts.pngbin1296 -> 814 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_affects_battery.pngbin794 -> 536 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_app_info.pngbin2312 -> 1043 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_audio_settings.pngbin2272 -> 999 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_bluetooth.pngbin1380 -> 977 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_bookmarks.pngbin1083 -> 569 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_calendar.pngbin1084 -> 556 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_camera.pngbin3674 -> 1535 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_device_alarms.pngbin3925 -> 1600 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_display.pngbin1035 -> 523 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_location.pngbin1246 -> 1403 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_messages.pngbin1082 -> 531 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_microphone.pngbin1954 -> 888 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_network.pngbin991 -> 708 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_personal_info.pngbin1664 -> 747 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_phone_calls.pngbin2100 -> 963 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_screenlock.pngbin1994 -> 845 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_shortrange_network.pngbin991 -> 526 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_social_info.pngbin2017 -> 747 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_status_bar.pngbin494 -> 572 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_storage.pngbin1744 -> 810 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_sync_settings.pngbin2622 -> 1142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_system_clock.pngbin3964 -> 1476 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_system_tools.pngbin2773 -> 1240 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_user_dictionary.pngbin1228 -> 560 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.pngbin1129 -> 759 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_voicemail.pngbin2579 -> 906 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_wallpaper.pngbin1513 -> 706 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_background_mtrl_mult.9.png (renamed from core/res/res/drawable-xhdpi/popup_background_qntm_mult.9.png)bin2448 -> 2448 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png)bin111 -> 111 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progress_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png)bin697 -> 697 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrollbar_handle_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png)bin128 -> 128 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_000.png)bin785 -> 785 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_001.png)bin706 -> 706 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_002.png)bin664 -> 664 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_003.png)bin617 -> 617 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_004.png)bin606 -> 606 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_005.png)bin622 -> 622 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_off_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png)bin314 -> 314 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png)bin1184 -> 1184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_on_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png)bin248 -> 248 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png)bin734 -> 734 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_000.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_000.png)bin619 -> 619 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_001.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_001.png)bin628 -> 628 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_002.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_002.png)bin714 -> 714 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_003.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_003.png)bin792 -> 792 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_004.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_004.png)bin798 -> 798 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_005.png (renamed from core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_005.png)bin802 -> 802 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png)bin119 -> 119 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png)bin114 -> 114 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_mtrl_am_alpha.9.png (renamed from core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png)bin427 -> 427 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png)bin158 -> 158 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/tab_indicator_qntm_alpha.9.png)bin112 -> 112 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png)bin105 -> 105 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_left_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png)bin751 -> 751 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_middle_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png)bin641 -> 641 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_right_mtrl_alpha.png (renamed from core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png)bin752 -> 752 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png)bin244 -> 244 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png)bin243 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png)bin98 -> 98 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ab_share_pack_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png)bin1140 -> 1140 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ab_solid_shadow_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png)bin344 -> 344 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_cab_done_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png)bin1046 -> 1046 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_000.png)bin1210 -> 1210 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_001.png)bin1232 -> 1232 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_002.png)bin1064 -> 1064 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_003.png)bin960 -> 960 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_004.png)bin935 -> 935 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_005.png)bin874 -> 874 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_006.png)bin876 -> 876 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_007.png)bin1123 -> 1123 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_008.png)bin1033 -> 1033 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_009.png)bin921 -> 921 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_010.png)bin826 -> 826 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_011.png)bin888 -> 888 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_012.png)bin866 -> 866 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_013.png)bin854 -> 854 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_014.png)bin851 -> 851 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_015.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_015.png)bin822 -> 822 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_000.png)bin822 -> 822 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_001.png)bin943 -> 943 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_002.png)bin1051 -> 1051 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_003.png)bin861 -> 861 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_004.png)bin749 -> 749 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_005.png)bin688 -> 688 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_006.png)bin948 -> 948 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_007.png)bin934 -> 934 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_008.png)bin1204 -> 1204 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_009.png)bin1283 -> 1283 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_010.png)bin1363 -> 1363 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_011.png)bin1309 -> 1309 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_012.png)bin1240 -> 1240 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_013.png)bin1240 -> 1240 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_014.png)bin1220 -> 1220 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_015.png (renamed from core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_015.png)bin1210 -> 1210 bytes
-rwxr-xr-xcore/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_code_lock_default_qntm_alpha.png)bin2258 -> 2258 bytes
-rwxr-xr-xcore/res/res/drawable-xxhdpi/btn_code_lock_touched_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_code_lock_touched_qntm_alpha.png)bin1979 -> 1979 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png)bin418 -> 418 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00000_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00000_qntm_alpha.png)bin1821 -> 1821 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00001_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00001_qntm_alpha.png)bin1636 -> 1636 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00002_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00002_qntm_alpha.png)bin1227 -> 1227 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00003_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00003_qntm_alpha.png)bin1139 -> 1139 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00004_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00004_qntm_alpha.png)bin1700 -> 1700 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00005_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00005_qntm_alpha.png)bin2050 -> 2050 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00006_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00006_qntm_alpha.png)bin2205 -> 2205 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00007_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00007_qntm_alpha.png)bin2185 -> 2185 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00008_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00008_qntm_alpha.png)bin2193 -> 2193 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00009_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00009_qntm_alpha.png)bin2285 -> 2285 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00010_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00010_qntm_alpha.png)bin2233 -> 2233 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00011_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00011_qntm_alpha.png)bin2255 -> 2255 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00012_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00012_qntm_alpha.png)bin2280 -> 2280 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00013_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00013_qntm_alpha.png)bin2280 -> 2280 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00014_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00014_qntm_alpha.png)bin2274 -> 2274 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_anim_00015_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_anim_00015_qntm_alpha.png)bin2181 -> 2181 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_000.png)bin2063 -> 2063 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_001.png)bin2088 -> 2088 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_002.png)bin1967 -> 1967 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_003.png)bin1928 -> 1928 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_004.png)bin1793 -> 1793 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_005.png)bin1646 -> 1646 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_006.png)bin1380 -> 1380 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_007.png)bin1571 -> 1571 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_008.png)bin1629 -> 1629 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_009.png)bin1707 -> 1707 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_010.png)bin1782 -> 1782 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_011.png)bin1830 -> 1830 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_012.png)bin1784 -> 1784 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_013.png)bin1793 -> 1793 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_014.png)bin1809 -> 1809 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_015.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_015.png)bin1820 -> 1820 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_000.png)bin1820 -> 1820 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_001.png)bin1638 -> 1638 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_002.png)bin1470 -> 1470 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_003.png)bin1340 -> 1340 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_004.png)bin1912 -> 1912 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_005.png)bin1885 -> 1885 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_006.png)bin1972 -> 1972 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_007.png)bin2005 -> 2005 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_008.png)bin2108 -> 2108 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_009.png)bin2081 -> 2081 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_010.png)bin2087 -> 2087 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_011.png)bin2046 -> 2046 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_012.png)bin2000 -> 2000 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_013.png)bin2092 -> 2092 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_014.png)bin2060 -> 2060 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_015.png (renamed from core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_015.png)bin2063 -> 2063 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_rating_star_off_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png)bin2096 -> 2096 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_rating_star_on_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png)bin1463 -> 1463 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_star_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png)bin913 -> 913 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_000.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_001.png)bin1290 -> 1290 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_002.png)bin1544 -> 1544 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_003.png)bin1716 -> 1716 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_004.png)bin1738 -> 1738 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_005.png)bin1706 -> 1706 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_006.png)bin2028 -> 2028 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_007.png)bin2028 -> 2028 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_008.png)bin1817 -> 1817 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_009.png)bin1863 -> 1863 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_010.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_011.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_012.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_013.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_014.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_000.png)bin1856 -> 1856 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_001.png)bin1863 -> 1863 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_002.png)bin1710 -> 1710 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_003.png)bin1481 -> 1481 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_004.png)bin1315 -> 1315 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_005.png)bin1274 -> 1274 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_006.png)bin1246 -> 1246 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_007.png)bin1290 -> 1290 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_008.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_009.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_010.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_011.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_012.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_013.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_014.png)bin1248 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_toggle_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/btn_toggle_indicator_qntm_alpha.9.png)bin218 -> 218 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/btn_toggle_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/btn_toggle_qntm_alpha.9.png)bin325 -> 325 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/expander_close_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png)bin473 -> 473 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/expander_open_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png)bin519 -> 519 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/fastscroll_thumb_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png)bin279 -> 279 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/fastscroll_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png)bin148 -> 148 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_ab_back_mtrl_am_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png)bin358 -> 358 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_afw_icon.pngbin0 -> 2137 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_cab_done_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png)bin782 -> 782 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_clear_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png)bin522 -> 522 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_commit_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png)bin488 -> 488 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_corp_badge.pngbin2285 -> 0 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_dialog_alert_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png)bin1018 -> 1018 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_find_next_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png)bin683 -> 683 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_find_previous_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png)bin657 -> 657 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_go_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png)bin172 -> 172 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png)bin1000 -> 1000 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png)bin1067 -> 1067 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png)bin1014 -> 1014 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png)bin1043 -> 1043 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png)bin1026 -> 1026 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png)bin1148 -> 1148 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_copy_mtrl_am_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png)bin317 -> 317 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_cut_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png)bin1155 -> 1155 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_find_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png)bin1170 -> 1170 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png)bin414 -> 414 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_paste_mtrl_am_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png)bin553 -> 553 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_search_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png)bin1277 -> 1277 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_selectall_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png)bin503 -> 503 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_menu_share_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png)bin1127 -> 1127 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png)bin963 -> 963 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/ic_voice_search_api_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png)bin767 -> 767 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png)bin435 -> 435 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_qntm_alpha.png)bin1957 -> 1957 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_qntm_alpha.png)bin7165 -> 7165 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/list_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png)bin122 -> 122 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/list_section_divider_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png)bin160 -> 160 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_accessibility_features.pngbin753 -> 642 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_accounts.pngbin995 -> 1131 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_affects_battery.pngbin15116 -> 592 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_app_info.pngbin1993 -> 1419 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_audio_settings.pngbin1991 -> 1433 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_bluetooth.pngbin1084 -> 1464 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_bookmarks.pngbin806 -> 781 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_calendar.pngbin873 -> 696 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_camera.pngbin3293 -> 2242 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_device_alarms.pngbin3532 -> 2406 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_display.pngbin833 -> 673 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_location.pngbin878 -> 2053 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_messages.pngbin847 -> 706 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_microphone.pngbin1775 -> 1292 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_network.pngbin541 -> 980 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_personal_info.pngbin1299 -> 1001 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_phone_calls.pngbin1770 -> 1392 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_screenlock.pngbin1654 -> 1196 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_shortrange_network.pngbin541 -> 678 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_social_info.pngbin1346 -> 1008 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_status_bar.pngbin15333 -> 690 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_storage.pngbin1442 -> 1115 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_sync_settings.pngbin2174 -> 1635 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_system_clock.pngbin3099 -> 2085 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_system_tools.pngbin2442 -> 1672 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_user_dictionary.pngbin913 -> 773 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_user_dictionary_write.pngbin826 -> 1078 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_voicemail.pngbin1817 -> 1235 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/perm_group_wallpaper.pngbin1229 -> 1008 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/popup_background_mtrl_mult.9.png (renamed from core/res/res/drawable-xxhdpi/popup_background_qntm_mult.9.png)bin3652 -> 3652 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/progress_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png)bin156 -> 156 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/progress_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png)bin672 -> 672 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrollbar_handle_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png)bin181 -> 181 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_000.png)bin1101 -> 1101 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_001.png)bin989 -> 989 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_002.png)bin900 -> 900 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_003.png)bin808 -> 808 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_004.png)bin824 -> 824 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_005.png)bin803 -> 803 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_off_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png)bin388 -> 388 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png)bin2227 -> 2227 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_on_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png)bin294 -> 294 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png)bin1815 -> 1815 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_000.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_000.png)bin815 -> 815 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_001.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_001.png)bin847 -> 847 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_002.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_002.png)bin1004 -> 1004 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_003.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_003.png)bin1077 -> 1077 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_004.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_004.png)bin1085 -> 1085 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_005.png (renamed from core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_005.png)bin1134 -> 1134 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_primary_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png)bin155 -> 155 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/scrubber_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png)bin204 -> 204 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/spinner_mtrl_am_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png)bin529 -> 529 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png)bin165 -> 165 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/tab_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/tab_indicator_qntm_alpha.9.png)bin142 -> 142 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png)bin134 -> 134 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/text_select_handle_left_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png)bin1148 -> 1148 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/text_select_handle_middle_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png)bin811 -> 811 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/text_select_handle_right_mtrl_alpha.png (renamed from core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png)bin1155 -> 1155 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/textfield_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png)bin1362 -> 1362 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/textfield_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png)bin1366 -> 1366 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/textfield_search_activated_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png)bin102 -> 102 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/textfield_search_default_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png)bin106 -> 106 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_000.png)bin881 -> 881 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_001.png)bin895 -> 895 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_002.png)bin804 -> 804 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_003.png)bin743 -> 743 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_004.png)bin690 -> 690 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_005.png)bin626 -> 626 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_006.png)bin662 -> 662 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_007.png)bin765 -> 765 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_008.png)bin711 -> 711 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_009.png)bin726 -> 726 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_010.png)bin671 -> 671 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_011.png)bin604 -> 604 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_012.png)bin621 -> 621 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_013.png)bin647 -> 647 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_014.png)bin623 -> 623 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_015.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_015.png)bin588 -> 588 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_000.png)bin588 -> 588 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_001.png)bin703 -> 703 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_002.png)bin806 -> 806 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_003.png)bin629 -> 629 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_004.png)bin547 -> 547 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_005.png)bin545 -> 545 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_006.png)bin698 -> 698 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_007.png)bin721 -> 721 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_008.png)bin817 -> 817 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_009.png)bin879 -> 879 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_010.png)bin955 -> 955 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_011.png)bin977 -> 977 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_012.png)bin906 -> 906 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_013.png)bin913 -> 913 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_014.png)bin914 -> 914 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_015.png (renamed from core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_015.png)bin881 -> 881 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxxhdpi/btn_qntm_alpha.9.png)bin1507 -> 1507 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_000.png)bin1758 -> 1758 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_001.png)bin1698 -> 1698 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_002.png)bin1647 -> 1647 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_003.png)bin1698 -> 1698 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_004.png)bin1687 -> 1687 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_005.png)bin1445 -> 1445 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_006.png)bin1136 -> 1136 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_007.png)bin1250 -> 1250 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_008.png)bin1337 -> 1337 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_009.png)bin1492 -> 1492 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_010.png)bin1451 -> 1451 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_011.png)bin1515 -> 1515 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_012.png)bin1515 -> 1515 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_013.png)bin1558 -> 1558 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_014.png)bin1469 -> 1469 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_015.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_015.png)bin1510 -> 1510 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_000.png)bin1510 -> 1510 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_001.png)bin1415 -> 1415 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_002.png)bin1209 -> 1209 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_003.png)bin1140 -> 1140 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_004.png)bin1654 -> 1654 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_005.png)bin1699 -> 1699 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_006.png)bin1732 -> 1732 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_007.png)bin1756 -> 1756 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_008.png)bin1718 -> 1718 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_009.png)bin1799 -> 1799 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_010.png)bin1739 -> 1739 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_011.png)bin1770 -> 1770 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_012.png)bin1731 -> 1731 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_013.png)bin1727 -> 1727 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_014.png)bin1753 -> 1753 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_015.png (renamed from core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_015.png)bin1758 -> 1758 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_000.png)bin1908 -> 1908 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_001.png)bin1841 -> 1841 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_002.png)bin2033 -> 2033 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_003.png)bin2148 -> 2148 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_004.png)bin2257 -> 2257 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_005.png)bin2223 -> 2223 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_006.png)bin2411 -> 2411 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_007.png)bin2401 -> 2401 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_008.png)bin2298 -> 2298 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_009.png)bin2364 -> 2364 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_010.png)bin2295 -> 2295 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_011.png)bin2295 -> 2295 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_012.png)bin2296 -> 2296 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_013.png)bin2295 -> 2295 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_014.png)bin2329 -> 2329 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_000.png)bin2295 -> 2295 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_001.png)bin2373 -> 2373 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_002.png)bin2188 -> 2188 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_003.png)bin1982 -> 1982 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_004.png)bin1894 -> 1894 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_005.png)bin1853 -> 1853 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_006.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_006.png)bin1859 -> 1859 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_007.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_007.png)bin1952 -> 1952 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_008.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_008.png)bin1908 -> 1908 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_009.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_009.png)bin1908 -> 1908 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_010.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_010.png)bin1931 -> 1931 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_011.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_011.png)bin1908 -> 1908 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_012.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_012.png)bin1908 -> 1908 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_013.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_013.png)bin1891 -> 1891 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_014.png (renamed from core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_014.png)bin1908 -> 1908 bytes
-rwxr-xr-xcore/res/res/drawable-xxxhdpi/btn_toggle_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxxhdpi/btn_toggle_indicator_qntm_alpha.9.png)bin1103 -> 1103 bytes
-rwxr-xr-xcore/res/res/drawable-xxxhdpi/btn_toggle_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxxhdpi/btn_toggle_qntm_alpha.9.png)bin1228 -> 1228 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png (renamed from core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png)bin1105 -> 1105 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_accessibility_features.pngbin0 -> 1258 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_accounts.pngbin0 -> 1539 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_affects_battery.pngbin0 -> 15225 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_app_info.pngbin0 -> 1827 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_audio_settings.pngbin0 -> 1804 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_bluetooth.pngbin0 -> 1866 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_bookmarks.pngbin0 -> 1307 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_calendar.pngbin0 -> 1272 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_camera.pngbin0 -> 2985 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_device_alarms.pngbin0 -> 2634 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_display.pngbin0 -> 1260 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_location.pngbin0 -> 2162 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_messages.pngbin0 -> 1281 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_microphone.pngbin0 -> 1898 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_network.pngbin0 -> 1598 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_personal_info.pngbin0 -> 1547 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_phone_calls.pngbin0 -> 1763 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_screenlock.pngbin0 -> 1639 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_shortrange_network.pngbin0 -> 14815 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_social_info.pngbin0 -> 1584 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_status_bar.pngbin0 -> 1486 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_storage.pngbin0 -> 1535 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_sync_settings.pngbin0 -> 2023 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_system_clock.pngbin0 -> 2302 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_system_tools.pngbin0 -> 2327 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_user_dictionary.pngbin0 -> 1308 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_user_dictionary_write.pngbin0 -> 1451 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_voicemail.pngbin0 -> 1741 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/perm_group_wallpaper.pngbin0 -> 1583 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_000.png)bin1818 -> 1818 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_001.png)bin1653 -> 1653 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_002.png)bin1571 -> 1571 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_003.png)bin1471 -> 1471 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_004.png)bin1502 -> 1502 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_005.png)bin1487 -> 1487 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_000.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_000.png)bin1492 -> 1492 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_001.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_001.png)bin1507 -> 1507 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_002.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_002.png)bin1664 -> 1664 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_003.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_003.png)bin1752 -> 1752 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_004.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_004.png)bin1772 -> 1772 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_005.png (renamed from core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_005.png)bin1858 -> 1858 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/switch_track_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxxhdpi/switch_track_qntm_alpha.9.png)bin1060 -> 1060 bytes
-rw-r--r--core/res/res/drawable-xxxhdpi/tab_indicator_mtrl_alpha.9.png (renamed from core/res/res/drawable-xxxhdpi/tab_indicator_qntm_alpha.9.png)bin171 -> 171 bytes
-rw-r--r--core/res/res/drawable/ab_share_pack_material.xml (renamed from core/res/res/drawable/ab_share_pack_quantum.xml)2
-rw-r--r--core/res/res/drawable/ab_solid_shadow_material.xml (renamed from core/res/res/drawable/ab_solid_shadow_quantum.xml)2
-rw-r--r--core/res/res/drawable/activated_background_material.xml (renamed from core/res/res/drawable/activated_background_quantum.xml)0
-rw-r--r--core/res/res/drawable/btn_borderless_material.xml (renamed from core/res/res/drawable/btn_borderless_quantum.xml)4
-rw-r--r--core/res/res/drawable/btn_cab_done_material.xml (renamed from core/res/res/drawable/btn_cab_done_quantum.xml)4
-rw-r--r--core/res/res/drawable/btn_check_material_anim.xml (renamed from core/res/res/drawable/btn_check_quantum_anim.xml)72
-rw-r--r--core/res/res/drawable/btn_default_material.xml (renamed from core/res/res/drawable/btn_default_quantum.xml)4
-rw-r--r--core/res/res/drawable/btn_radio_material_anim.xml (renamed from core/res/res/drawable/btn_radio_quantum_anim.xml)72
-rw-r--r--core/res/res/drawable/btn_star_material.xml (renamed from core/res/res/drawable/btn_star_quantum.xml)6
-rw-r--r--core/res/res/drawable/btn_toggle_material.xml (renamed from core/res/res/drawable/btn_toggle_quantum.xml)8
-rw-r--r--core/res/res/drawable/dialog_background_material.xml (renamed from core/res/res/drawable/dialog_background_quantum.xml)0
-rw-r--r--core/res/res/drawable/edit_text_material.xml (renamed from core/res/res/drawable/edit_text_quantum.xml)9
-rw-r--r--core/res/res/drawable/expander_group_material.xml (renamed from core/res/res/drawable/expander_group_quantum.xml)4
-rw-r--r--core/res/res/drawable/fastscroll_thumb_material.xml (renamed from core/res/res/drawable/fastscroll_thumb_quantum.xml)4
-rw-r--r--core/res/res/drawable/fastscroll_track_material.xml (renamed from core/res/res/drawable/fastscroll_track_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_ab_back_material.xml (renamed from core/res/res/drawable/ic_ab_back_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_cab_done_material.xml (renamed from core/res/res/drawable/ic_cab_done_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_clear_material.xml (renamed from core/res/res/drawable/ic_clear_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_commit_search_api_material.xml (renamed from core/res/res/drawable/ic_commit_search_api_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_corp_badge.xml34
-rw-r--r--core/res/res/drawable/ic_corp_icon_badge.xml40
-rw-r--r--core/res/res/drawable/ic_dialog_alert_material.xml (renamed from core/res/res/drawable/ic_dialog_alert_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_find_next_material.xml (renamed from core/res/res/drawable/ic_find_next_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_find_previous_material.xml19
-rw-r--r--core/res/res/drawable/ic_find_previous_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_go_search_api_material.xml19
-rw-r--r--core/res/res/drawable/ic_go_search_api_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_media_route_connecting_material.xml (renamed from core/res/res/drawable/ic_media_route_connecting_quantum.xml)8
-rw-r--r--core/res/res/drawable/ic_media_route_material.xml (renamed from core/res/res/drawable/ic_media_route_quantum.xml)8
-rw-r--r--core/res/res/drawable/ic_menu_copy_material.xml (renamed from core/res/res/drawable/ic_menu_copy_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_menu_cut_material.xml (renamed from core/res/res/drawable/ic_menu_cut_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_menu_find_material.xml19
-rw-r--r--core/res/res/drawable/ic_menu_find_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_menu_moreoverflow_material.xml19
-rw-r--r--core/res/res/drawable/ic_menu_moreoverflow_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_menu_paste_material.xml (renamed from core/res/res/drawable/ic_menu_paste_quantum.xml)2
-rw-r--r--core/res/res/drawable/ic_menu_search_material.xml19
-rw-r--r--core/res/res/drawable/ic_menu_search_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_menu_selectall_material.xml19
-rw-r--r--core/res/res/drawable/ic_menu_selectall_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_menu_share_material.xml19
-rw-r--r--core/res/res/drawable/ic_menu_share_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_search_api_material.xml19
-rw-r--r--core/res/res/drawable/ic_search_api_quantum.xml19
-rw-r--r--core/res/res/drawable/ic_voice_search_api_material.xml19
-rw-r--r--core/res/res/drawable/ic_voice_search_api_quantum.xml19
-rw-r--r--core/res/res/drawable/item_background_borderless_material.xml (renamed from core/res/res/drawable/item_background_borderless_quantum.xml)3
-rw-r--r--core/res/res/drawable/item_background_material.xml (renamed from core/res/res/drawable/item_background_quantum.xml)4
-rw-r--r--core/res/res/drawable/list_divider_material.xml (renamed from core/res/res/drawable/list_divider_quantum.xml)2
-rw-r--r--core/res/res/drawable/list_section_divider_material.xml (renamed from core/res/res/drawable/list_section_divider_quantum.xml)2
-rw-r--r--core/res/res/drawable/notification_bg_dim.xml6
-rw-r--r--core/res/res/drawable/notification_material_bg.xml (renamed from core/res/res/drawable/notification_quantum_bg.xml)4
-rw-r--r--core/res/res/drawable/notification_material_bg_dim.xml32
-rw-r--r--core/res/res/drawable/notification_material_media_progress.xml (renamed from core/res/res/drawable/notification_quantum_media_progress.xml)0
-rw-r--r--core/res/res/drawable/popup_background_material.xml (renamed from core/res/res/drawable/popup_background_quantum.xml)2
-rw-r--r--core/res/res/drawable/progress_horizontal_material.xml (renamed from core/res/res/drawable/progress_horizontal_quantum.xml)6
-rw-r--r--core/res/res/drawable/progress_large_material.xml (renamed from core/res/res/drawable/progress_large_quantum.xml)2
-rw-r--r--core/res/res/drawable/progress_medium_material.xml (renamed from core/res/res/drawable/progress_medium_quantum.xml)2
-rw-r--r--core/res/res/drawable/progress_small_material.xml (renamed from core/res/res/drawable/progress_small_quantum.xml)2
-rw-r--r--core/res/res/drawable/ratingbar_full_empty_material.xml (renamed from core/res/res/drawable/ratingbar_full_empty_quantum.xml)4
-rw-r--r--core/res/res/drawable/ratingbar_full_filled_material.xml (renamed from core/res/res/drawable/ratingbar_full_filled_quantum.xml)4
-rw-r--r--core/res/res/drawable/ratingbar_full_material.xml (renamed from core/res/res/drawable/ratingbar_full_quantum.xml)6
-rw-r--r--core/res/res/drawable/scrollbar_handle_material.xml (renamed from core/res/res/drawable/scrollbar_handle_quantum.xml)2
-rw-r--r--core/res/res/drawable/scrubber_control_material_anim.xml (renamed from core/res/res/drawable/scrubber_control_quantum_anim.xml)32
-rw-r--r--core/res/res/drawable/scrubber_control_selector_material.xml (renamed from core/res/res/drawable/scrubber_control_selector_quantum.xml)4
-rw-r--r--core/res/res/drawable/scrubber_progress_horizontal_material.xml (renamed from core/res/res/drawable/scrubber_progress_horizontal_quantum.xml)8
-rw-r--r--core/res/res/drawable/spinner_background_material.xml (renamed from core/res/res/drawable/spinner_background_quantum.xml)6
-rw-r--r--core/res/res/drawable/switch_thumb_material_anim.xml (renamed from core/res/res/drawable/switch_thumb_quantum_anim.xml)68
-rw-r--r--core/res/res/drawable/switch_track_material.xml (renamed from core/res/res/drawable/switch_track_quantum.xml)8
-rw-r--r--core/res/res/drawable/tab_indicator_material.xml (renamed from core/res/res/drawable/tab_indicator_quantum.xml)2
-rw-r--r--core/res/res/drawable/text_cursor_material.xml (renamed from core/res/res/drawable/text_cursor_quantum.xml)2
-rw-r--r--core/res/res/drawable/text_select_handle_left_material.xml (renamed from core/res/res/drawable/text_select_handle_left_quantum.xml)2
-rw-r--r--core/res/res/drawable/text_select_handle_middle_material.xml (renamed from core/res/res/drawable/text_select_handle_middle_quantum.xml)2
-rw-r--r--core/res/res/drawable/text_select_handle_right_material.xml (renamed from core/res/res/drawable/text_select_handle_right_quantum.xml)2
-rw-r--r--core/res/res/drawable/textfield_search_material.xml (renamed from core/res/res/drawable/textfield_search_quantum.xml)12
-rw-r--r--core/res/res/interpolator/accelerate_quart.xml21
-rw-r--r--core/res/res/interpolator/decelerate_quart.xml21
-rw-r--r--core/res/res/layout/action_bar_home_material.xml (renamed from core/res/res/layout/action_bar_home_quantum.xml)0
-rw-r--r--core/res/res/layout/alert_dialog_material.xml (renamed from core/res/res/layout/alert_dialog_quantum.xml)2
-rw-r--r--core/res/res/layout/alert_dialog_progress_material.xml (renamed from core/res/res/layout/alert_dialog_progress_quantum.xml)0
-rw-r--r--core/res/res/layout/dialog_custom_title_material.xml (renamed from core/res/res/layout/dialog_custom_title_quantum.xml)0
-rw-r--r--core/res/res/layout/dialog_title_icons_material.xml (renamed from core/res/res/layout/dialog_title_icons_quantum.xml)0
-rw-r--r--core/res/res/layout/dialog_title_material.xml (renamed from core/res/res/layout/dialog_title_quantum.xml)0
-rw-r--r--core/res/res/layout/notification_material_action.xml (renamed from core/res/res/layout/notification_quantum_action.xml)2
-rw-r--r--core/res/res/layout/notification_material_action_list.xml (renamed from core/res/res/layout/notification_quantum_action_list.xml)0
-rw-r--r--core/res/res/layout/notification_material_action_tombstone.xml (renamed from core/res/res/layout/notification_quantum_action_tombstone.xml)2
-rw-r--r--core/res/res/layout/notification_material_media_action.xml (renamed from core/res/res/layout/notification_quantum_media_action.xml)2
-rw-r--r--core/res/res/layout/notification_template_material_base.xml (renamed from core/res/res/layout/notification_template_quantum_base.xml)19
-rw-r--r--core/res/res/layout/notification_template_material_big_base.xml (renamed from core/res/res/layout/notification_template_quantum_big_base.xml)23
-rw-r--r--core/res/res/layout/notification_template_material_big_media.xml (renamed from core/res/res/layout/notification_template_quantum_big_media.xml)13
-rw-r--r--core/res/res/layout/notification_template_material_big_picture.xml (renamed from core/res/res/layout/notification_template_quantum_big_picture.xml)4
-rw-r--r--core/res/res/layout/notification_template_material_big_text.xml (renamed from core/res/res/layout/notification_template_quantum_big_text.xml)23
-rw-r--r--core/res/res/layout/notification_template_material_inbox.xml (renamed from core/res/res/layout/notification_template_quantum_inbox.xml)37
-rw-r--r--core/res/res/layout/notification_template_material_media.xml (renamed from core/res/res/layout/notification_template_quantum_media.xml)10
-rw-r--r--core/res/res/layout/notification_template_part_chronometer.xml2
-rw-r--r--core/res/res/layout/notification_template_part_time.xml2
-rw-r--r--core/res/res/layout/preference_category_material.xml (renamed from core/res/res/layout/preference_category_quantum.xml)5
-rw-r--r--core/res/res/layout/preference_child_material.xml (renamed from core/res/res/layout/preference_child_quantum.xml)0
-rw-r--r--core/res/res/layout/preference_information_material.xml (renamed from core/res/res/layout/preference_information_quantum.xml)0
-rw-r--r--core/res/res/layout/preference_material.xml (renamed from core/res/res/layout/preference_quantum.xml)2
-rw-r--r--core/res/res/layout/preference_widget_checkbox.xml3
-rw-r--r--core/res/res/layout/preference_widget_switch.xml3
-rw-r--r--core/res/res/layout/progress_dialog_material.xml (renamed from core/res/res/layout/progress_dialog_quantum.xml)0
-rw-r--r--core/res/res/layout/select_dialog_item_material.xml (renamed from core/res/res/layout/select_dialog_item_quantum.xml)0
-rw-r--r--core/res/res/layout/select_dialog_material.xml (renamed from core/res/res/layout/select_dialog_quantum.xml)0
-rw-r--r--core/res/res/layout/select_dialog_multichoice_material.xml (renamed from core/res/res/layout/select_dialog_multichoice_quantum.xml)0
-rw-r--r--core/res/res/layout/select_dialog_singlechoice_material.xml (renamed from core/res/res/layout/select_dialog_singlechoice_quantum.xml)0
-rw-r--r--core/res/res/layout/status_bar_latest_event_content.xml2
-rw-r--r--core/res/res/layout/tab_indicator_material.xml (renamed from core/res/res/layout/tab_indicator_quantum.xml)4
-rw-r--r--core/res/res/values-af/strings.xml6
-rw-r--r--core/res/res/values-am/strings.xml6
-rw-r--r--core/res/res/values-ar/strings.xml6
-rw-r--r--core/res/res/values-bg/strings.xml6
-rw-r--r--core/res/res/values-ca/strings.xml6
-rw-r--r--core/res/res/values-cs/strings.xml6
-rw-r--r--core/res/res/values-da/strings.xml6
-rw-r--r--core/res/res/values-de/strings.xml6
-rw-r--r--core/res/res/values-el/strings.xml6
-rw-r--r--core/res/res/values-en-rGB/strings.xml6
-rw-r--r--core/res/res/values-en-rIN/strings.xml6
-rw-r--r--core/res/res/values-es-rUS/strings.xml6
-rw-r--r--core/res/res/values-es/strings.xml6
-rw-r--r--core/res/res/values-et-rEE/strings.xml6
-rw-r--r--core/res/res/values-fa/strings.xml6
-rw-r--r--core/res/res/values-fi/strings.xml6
-rw-r--r--core/res/res/values-fr-rCA/strings.xml6
-rw-r--r--core/res/res/values-fr/strings.xml8
-rw-r--r--core/res/res/values-hi/strings.xml6
-rw-r--r--core/res/res/values-hr/strings.xml6
-rw-r--r--core/res/res/values-hu/strings.xml6
-rw-r--r--core/res/res/values-hy-rAM/strings.xml6
-rw-r--r--core/res/res/values-in/strings.xml6
-rw-r--r--core/res/res/values-it/strings.xml6
-rw-r--r--core/res/res/values-iw/strings.xml6
-rw-r--r--core/res/res/values-ja/strings.xml6
-rw-r--r--core/res/res/values-ka-rGE/strings.xml6
-rw-r--r--core/res/res/values-km-rKH/strings.xml6
-rw-r--r--core/res/res/values-ko/strings.xml6
-rw-r--r--core/res/res/values-land/dimens_material.xml (renamed from core/res/res/values-land/dimens_quantum.xml)4
-rw-r--r--core/res/res/values-large/themes.xml15
-rw-r--r--core/res/res/values-lo-rLA/strings.xml6
-rw-r--r--core/res/res/values-lt/strings.xml6
-rw-r--r--core/res/res/values-lv/strings.xml6
-rw-r--r--core/res/res/values-mn-rMN/strings.xml6
-rw-r--r--core/res/res/values-ms-rMY/strings.xml6
-rw-r--r--core/res/res/values-nb/strings.xml6
-rw-r--r--core/res/res/values-nl/strings.xml6
-rw-r--r--core/res/res/values-pl/strings.xml6
-rw-r--r--core/res/res/values-pt-rPT/strings.xml6
-rw-r--r--core/res/res/values-pt/strings.xml6
-rw-r--r--core/res/res/values-rm/strings.xml12
-rw-r--r--core/res/res/values-ro/strings.xml6
-rw-r--r--core/res/res/values-ru/strings.xml8
-rw-r--r--core/res/res/values-sk/strings.xml6
-rw-r--r--core/res/res/values-sl/strings.xml6
-rw-r--r--core/res/res/values-sr/strings.xml20
-rw-r--r--core/res/res/values-sv/strings.xml6
-rw-r--r--core/res/res/values-sw/strings.xml6
-rw-r--r--core/res/res/values-television/themes.xml4
-rw-r--r--core/res/res/values-th/strings.xml6
-rw-r--r--core/res/res/values-tl/strings.xml6
-rw-r--r--core/res/res/values-tr/strings.xml6
-rw-r--r--core/res/res/values-uk/strings.xml6
-rw-r--r--core/res/res/values-vi/strings.xml6
-rw-r--r--core/res/res/values-zh-rCN/strings.xml6
-rw-r--r--core/res/res/values-zh-rHK/strings.xml6
-rw-r--r--core/res/res/values-zh-rTW/strings.xml6
-rw-r--r--core/res/res/values-zu/strings.xml6
-rw-r--r--core/res/res/values/arrays.xml386
-rw-r--r--core/res/res/values/attrs.xml26
-rw-r--r--core/res/res/values/attrs_manifest.xml34
-rw-r--r--core/res/res/values/colors.xml1
-rw-r--r--core/res/res/values/colors_holo.xml2
-rw-r--r--core/res/res/values/colors_legacy.xml2
-rw-r--r--core/res/res/values/colors_material.xml163
-rw-r--r--core/res/res/values/colors_quantum.xml163
-rw-r--r--core/res/res/values/config.xml7
-rw-r--r--core/res/res/values/dimens.xml4
-rw-r--r--core/res/res/values/dimens_material.xml58
-rw-r--r--core/res/res/values/dimens_quantum.xml58
-rw-r--r--core/res/res/values/donottranslate_material.xml32
-rw-r--r--core/res/res/values/donottranslate_quantum.xml32
-rw-r--r--core/res/res/values/ids.xml1
-rw-r--r--core/res/res/values/public.xml422
-rw-r--r--core/res/res/values/strings.xml10
-rw-r--r--core/res/res/values/styles_device_defaults.xml426
-rw-r--r--core/res/res/values/styles_material.xml982
-rw-r--r--core/res/res/values/styles_quantum.xml973
-rw-r--r--core/res/res/values/symbols.xml61
-rw-r--r--core/res/res/values/themes_device_defaults.xml82
-rw-r--r--core/res/res/values/themes_material.xml (renamed from core/res/res/values/themes_quantum.xml)1099
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java4
-rw-r--r--core/tests/coretests/src/android/net/LinkPropertiesTest.java36
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java15
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java4
-rw-r--r--graphics/java/android/graphics/drawable/GradientDrawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/MaterialProgressDrawable.java (renamed from graphics/java/android/graphics/drawable/QuantumProgressDrawable.java)42
-rw-r--r--graphics/java/android/graphics/drawable/NinePatchDrawable.java1
-rw-r--r--graphics/java/android/graphics/drawable/Ripple.java42
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java176
-rw-r--r--graphics/java/android/graphics/pdf/PdfRenderer.java2
-rw-r--r--libs/androidfw/ResourceTypes.cpp2
-rw-r--r--libs/hwui/AmbientShadow.cpp10
-rw-r--r--libs/hwui/AmbientShadow.h2
-rw-r--r--libs/hwui/Android.mk1
-rw-r--r--libs/hwui/Caches.cpp4
-rw-r--r--libs/hwui/Caches.h2
-rw-r--r--libs/hwui/DisplayListOp.h29
-rw-r--r--libs/hwui/OpenGLRenderer.cpp134
-rw-r--r--libs/hwui/OpenGLRenderer.h23
-rw-r--r--libs/hwui/PathCache.cpp17
-rw-r--r--libs/hwui/PathCache.h25
-rw-r--r--libs/hwui/PathTessellator.cpp64
-rw-r--r--libs/hwui/PathTessellator.h16
-rw-r--r--libs/hwui/Properties.h2
-rw-r--r--libs/hwui/Rect.h7
-rw-r--r--libs/hwui/ShadowTessellator.cpp15
-rw-r--r--libs/hwui/ShadowTessellator.h4
-rw-r--r--libs/hwui/SpotShadow.cpp4
-rw-r--r--libs/hwui/SpotShadow.h2
-rw-r--r--libs/hwui/StatefulBaseRenderer.cpp4
-rw-r--r--libs/hwui/StatefulBaseRenderer.h1
-rw-r--r--libs/hwui/TessellationCache.cpp481
-rw-r--r--libs/hwui/TessellationCache.h193
-rw-r--r--libs/hwui/VertexBuffer.h28
-rw-r--r--libs/hwui/thread/TaskManager.cpp6
-rw-r--r--libs/hwui/utils/Macros.h7
-rw-r--r--libs/hwui/utils/MathUtils.h4
-rw-r--r--media/java/android/media/MediaRouter.java161
-rw-r--r--media/java/android/media/session/IActiveSessionsListener.aidl (renamed from core/java/android/hardware/hdmi/IHdmiCecListener.aidl)17
-rw-r--r--media/java/android/media/session/ISessionController.aidl2
-rw-r--r--media/java/android/media/session/ISessionManager.aidl4
-rw-r--r--media/java/android/media/session/MediaController.java15
-rw-r--r--media/java/android/media/session/MediaSession.java44
-rw-r--r--media/java/android/media/session/MediaSessionInfo.aidl18
-rw-r--r--media/java/android/media/session/MediaSessionInfo.java12
-rw-r--r--media/java/android/media/session/MediaSessionManager.java75
-rw-r--r--media/java/android/media/session/MediaSessionToken.java2
-rw-r--r--media/java/android/media/session/RemoteVolumeProvider.java15
-rw-r--r--media/java/android/media/tv/ITvInputSessionWrapper.java10
-rw-r--r--media/java/android/media/tv/TvContract.java85
-rw-r--r--media/java/android/media/tv/TvInputInfo.java56
-rw-r--r--media/java/android/media/tv/TvInputManager.java13
-rw-r--r--media/java/android/media/tv/TvInputService.java65
-rw-r--r--media/java/android/media/tv/TvView.java241
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RangeTest.java175
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RationalTest.java406
-rw-r--r--native/android/sensor.cpp5
-rw-r--r--packages/DocumentsUI/AndroidManifest.xml2
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java26
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/PickFragment.java16
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RootsCache.java6
-rw-r--r--packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java2
-rw-r--r--packages/Keyguard/res/values-af/strings.xml2
-rw-r--r--packages/Keyguard/res/values-am/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ar/strings.xml2
-rw-r--r--packages/Keyguard/res/values-bg/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ca/strings.xml2
-rw-r--r--packages/Keyguard/res/values-cs/strings.xml2
-rw-r--r--packages/Keyguard/res/values-da/strings.xml2
-rw-r--r--packages/Keyguard/res/values-de/strings.xml2
-rw-r--r--packages/Keyguard/res/values-el/strings.xml2
-rw-r--r--packages/Keyguard/res/values-en-rGB/strings.xml2
-rw-r--r--packages/Keyguard/res/values-en-rIN/strings.xml2
-rw-r--r--packages/Keyguard/res/values-es-rUS/strings.xml2
-rw-r--r--packages/Keyguard/res/values-es/strings.xml2
-rw-r--r--packages/Keyguard/res/values-et-rEE/strings.xml2
-rw-r--r--packages/Keyguard/res/values-fa/strings.xml2
-rw-r--r--packages/Keyguard/res/values-fi/strings.xml2
-rw-r--r--packages/Keyguard/res/values-fr-rCA/strings.xml2
-rw-r--r--packages/Keyguard/res/values-fr/strings.xml2
-rw-r--r--packages/Keyguard/res/values-hi/strings.xml2
-rw-r--r--packages/Keyguard/res/values-hr/strings.xml2
-rw-r--r--packages/Keyguard/res/values-hu/strings.xml2
-rw-r--r--packages/Keyguard/res/values-hy-rAM/strings.xml2
-rw-r--r--packages/Keyguard/res/values-in/strings.xml2
-rw-r--r--packages/Keyguard/res/values-it/strings.xml2
-rw-r--r--packages/Keyguard/res/values-iw/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ja/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ka-rGE/strings.xml2
-rw-r--r--packages/Keyguard/res/values-km-rKH/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ko/strings.xml2
-rw-r--r--packages/Keyguard/res/values-lo-rLA/strings.xml2
-rw-r--r--packages/Keyguard/res/values-lt/strings.xml2
-rw-r--r--packages/Keyguard/res/values-lv/strings.xml2
-rw-r--r--packages/Keyguard/res/values-mn-rMN/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ms-rMY/strings.xml2
-rw-r--r--packages/Keyguard/res/values-nb/strings.xml2
-rw-r--r--packages/Keyguard/res/values-nl/strings.xml2
-rw-r--r--packages/Keyguard/res/values-pl/strings.xml2
-rw-r--r--packages/Keyguard/res/values-pt-rPT/strings.xml2
-rw-r--r--packages/Keyguard/res/values-pt/strings.xml2
-rw-r--r--packages/Keyguard/res/values-rm/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ro/strings.xml2
-rw-r--r--packages/Keyguard/res/values-ru/strings.xml2
-rw-r--r--packages/Keyguard/res/values-sk/strings.xml2
-rw-r--r--packages/Keyguard/res/values-sl/strings.xml2
-rw-r--r--packages/Keyguard/res/values-sr/strings.xml6
-rw-r--r--packages/Keyguard/res/values-sv/strings.xml2
-rw-r--r--packages/Keyguard/res/values-sw/strings.xml2
-rw-r--r--packages/Keyguard/res/values-th/strings.xml2
-rw-r--r--packages/Keyguard/res/values-tl/strings.xml2
-rw-r--r--packages/Keyguard/res/values-tr/strings.xml2
-rw-r--r--packages/Keyguard/res/values-uk/strings.xml2
-rw-r--r--packages/Keyguard/res/values-vi/strings.xml2
-rw-r--r--packages/Keyguard/res/values-zh-rCN/strings.xml2
-rw-r--r--packages/Keyguard/res/values-zh-rHK/strings.xml2
-rw-r--r--packages/Keyguard/res/values-zh-rTW/strings.xml2
-rw-r--r--packages/Keyguard/res/values-zu/strings.xml2
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java2
-rw-r--r--packages/SystemUI/res/drawable-hdpi/recents_lower_gradient.9.pngbin0 -> 219 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/recents_nav_bar_background.9.pngbin1054 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.pngbin940 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.pngbin979 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.pngbin756 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/recents_lower_gradient.9.pngbin0 -> 193 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/recents_nav_bar_background.9.pngbin1050 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.pngbin654 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.pngbin687 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.pngbin569 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/recents_lower_gradient.9.pngbin0 -> 242 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/recents_nav_bar_background.9.pngbin985 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.pngbin1260 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.pngbin1330 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.pngbin932 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/recents_lower_gradient.9.pngbin0 -> 1123 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/recents_nav_bar_background.9.pngbin1070 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth.pngbin2243 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.pngbin2150 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable-xxhdpi/stat_sys_no_sim.pngbin1683 -> 0 bytes
-rw-r--r--packages/SystemUI/res/drawable/ic_notify_zen.xml (renamed from packages/SystemUI/res/drawable/ic_qs_location_02.xml)10
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_color_inversion.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_inversion_off.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_inversion_on.xml (renamed from packages/SystemUI/res/drawable/ic_qs_location_04.xml)6
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_05.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_06.xml31
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_07.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_09.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_10.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_11.xml28
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_off.xml32
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_location_on.xml29
-rw-r--r--packages/SystemUI/res/drawable/notification_row_legacy_bg.xml22
-rw-r--r--packages/SystemUI/res/drawable/qs_panel_background.xml2
-rw-r--r--packages/SystemUI/res/drawable/ripple_drawable.xml4
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_data_bluetooth.xml (renamed from packages/SystemUI/res/drawable/ic_qs_location_01.xml)10
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_data_bluetooth_connected.xml (renamed from packages/SystemUI/res/drawable/ic_qs_location_03.xml)10
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_no_sim.xml (renamed from packages/SystemUI/res/drawable/ic_qs_location_08.xml)8
-rw-r--r--packages/SystemUI/res/drawable/status_bar_item_background.xml25
-rw-r--r--packages/SystemUI/res/drawable/ticker_background.xml27
-rw-r--r--packages/SystemUI/res/layout/recents_nav_bar_scrim.xml2
-rw-r--r--packages/SystemUI/res/layout/status_bar.xml48
-rw-r--r--packages/SystemUI/res/layout/status_bar_expanded_header.xml9
-rw-r--r--packages/SystemUI/res/layout/status_bar_notification_speed_bump.xml49
-rw-r--r--packages/SystemUI/res/layout/status_bar_ticker.xml62
-rw-r--r--packages/SystemUI/res/layout/status_bar_toggle_slider.xml2
-rw-r--r--packages/SystemUI/res/values-af/strings.xml20
-rw-r--r--packages/SystemUI/res/values-am/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml20
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml20
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml20
-rw-r--r--packages/SystemUI/res/values-da/strings.xml20
-rw-r--r--packages/SystemUI/res/values-de/strings.xml20
-rw-r--r--packages/SystemUI/res/values-el/strings.xml20
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml20
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml20
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml23
-rw-r--r--packages/SystemUI/res/values-es/strings.xml20
-rw-r--r--packages/SystemUI/res/values-et-rEE/strings.xml20
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml20
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml23
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml23
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml22
-rw-r--r--packages/SystemUI/res/values-hy-rAM/strings.xml23
-rw-r--r--packages/SystemUI/res/values-in/strings.xml20
-rw-r--r--packages/SystemUI/res/values-it/strings.xml20
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ka-rGE/strings.xml23
-rw-r--r--packages/SystemUI/res/values-km-rKH/strings.xml23
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml20
-rw-r--r--packages/SystemUI/res/values-lo-rLA/strings.xml20
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml20
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml23
-rw-r--r--packages/SystemUI/res/values-mn-rMN/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ms-rMY/strings.xml23
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml20
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml23
-rw-r--r--packages/SystemUI/res/values-rm/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml23
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml20
-rw-r--r--packages/SystemUI/res/values-th/strings.xml20
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml23
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml20
-rw-r--r--packages/SystemUI/res/values/colors.xml17
-rw-r--r--packages/SystemUI/res/values/config.xml5
-rw-r--r--packages/SystemUI/res/values/dimens.xml13
-rw-r--r--packages/SystemUI/res/values/internal.xml2
-rw-r--r--packages/SystemUI/res/values/styles.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/PowerUI.java47
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSTile.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/Constants.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java43
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/RecentsService.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java114
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotView.java52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsAlgorithm.java80
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsLayout.java136
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsState.java128
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpView.java204
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPageSwipeHelper.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java47
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java275
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java33
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java53
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java4
-rw-r--r--rs/java/android/renderscript/RenderScript.java14
-rw-r--r--services/core/java/com/android/server/BatteryService.java106
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java9
-rw-r--r--services/core/java/com/android/server/MountService.java5
-rw-r--r--services/core/java/com/android/server/MountServiceIdler.java70
-rw-r--r--services/core/java/com/android/server/VibratorService.java18
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java25
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityRecord.java3
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityStack.java6
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java133
-rw-r--r--services/core/java/com/android/server/am/TaskPersister.java2
-rw-r--r--services/core/java/com/android/server/am/TaskRecord.java21
-rw-r--r--services/core/java/com/android/server/connectivity/Tethering.java2
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecDevice.java230
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecDevicePlayback.java129
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecDeviceTv.java35
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecService.java383
-rw-r--r--services/core/java/com/android/server/job/JobCompletedListener.java (renamed from services/core/java/com/android/server/task/TaskCompletedListener.java)16
-rw-r--r--services/core/java/com/android/server/job/JobMapReadFinishedListener.java (renamed from services/core/java/com/android/server/task/TaskMapReadFinishedListener.java)12
-rw-r--r--services/core/java/com/android/server/job/JobSchedulerService.java764
-rw-r--r--services/core/java/com/android/server/job/JobServiceContext.java (renamed from services/core/java/com/android/server/task/TaskServiceContext.java)294
-rw-r--r--services/core/java/com/android/server/job/JobStore.java (renamed from services/core/java/com/android/server/task/TaskStore.java)408
-rw-r--r--services/core/java/com/android/server/job/StateChangedListener.java (renamed from services/core/java/com/android/server/task/StateChangedListener.java)16
-rw-r--r--services/core/java/com/android/server/job/controllers/BatteryController.java (renamed from services/core/java/com/android/server/task/controllers/BatteryController.java)63
-rw-r--r--services/core/java/com/android/server/job/controllers/ConnectivityController.java200
-rw-r--r--services/core/java/com/android/server/job/controllers/IdleController.java (renamed from services/core/java/com/android/server/task/controllers/IdleController.java)22
-rw-r--r--services/core/java/com/android/server/job/controllers/JobStatus.java (renamed from services/core/java/com/android/server/task/controllers/TaskStatus.java)132
-rw-r--r--services/core/java/com/android/server/job/controllers/StateController.java (renamed from services/core/java/com/android/server/task/controllers/StateController.java)22
-rw-r--r--services/core/java/com/android/server/job/controllers/TimeController.java289
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java8
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java198
-rw-r--r--services/core/java/com/android/server/media/MediaSessionStack.java5
-rw-r--r--services/core/java/com/android/server/net/IpConfigStore.java4
-rw-r--r--services/core/java/com/android/server/notification/NotificationComparator.java2
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecord.java31
-rwxr-xr-xservices/core/java/com/android/server/pm/PackageManagerService.java9
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java3
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java62
-rw-r--r--services/core/java/com/android/server/task/TaskManagerService.java655
-rw-r--r--services/core/java/com/android/server/task/controllers/ConnectivityController.java143
-rw-r--r--services/core/java/com/android/server/task/controllers/TimeController.java242
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java5
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java2
-rw-r--r--services/core/java/com/android/server/wm/AppWindowAnimator.java5
-rw-r--r--services/core/java/com/android/server/wm/Session.java12
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java141
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java4
-rw-r--r--services/core/jni/Android.mk1
-rw-r--r--services/core/jni/com_android_server_hdmi_HdmiCecService.cpp756
-rw-r--r--services/core/jni/onload.cpp3
-rw-r--r--services/java/com/android/server/SystemServer.java34
-rw-r--r--services/tests/servicestests/src/com/android/server/task/TaskStoreTest.java83
-rw-r--r--services/tests/servicestests/src/com/android/server/task/controllers/BatteryControllerTest.java66
-rw-r--r--telecomm/java/android/telecomm/CallCapabilities.java50
-rw-r--r--telecomm/java/android/telecomm/CallService.java55
-rw-r--r--telecomm/java/android/telecomm/CallServiceAdapter.java32
-rw-r--r--telecomm/java/android/telecomm/Connection.java127
-rw-r--r--telecomm/java/android/telecomm/ConnectionService.java135
-rw-r--r--telecomm/java/android/telecomm/InCallAdapter.java16
-rw-r--r--telecomm/java/android/telecomm/InCallCall.java24
-rw-r--r--telecomm/java/com/android/internal/telecomm/ICallService.aidl6
-rw-r--r--telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl8
-rw-r--r--telecomm/java/com/android/internal/telecomm/IInCallAdapter.aidl4
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java64
-rw-r--r--tests/JobSchedulerTestApp/Android.mk15
-rw-r--r--tests/JobSchedulerTestApp/AndroidManifest.xml32
-rw-r--r--tests/JobSchedulerTestApp/res/drawable-hdpi/ic_launcher.pngbin0 -> 5473 bytes
-rw-r--r--tests/JobSchedulerTestApp/res/drawable-mdpi/ic_launcher.pngbin0 -> 3298 bytes
-rw-r--r--tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_action_refresh.pngbin0 -> 856 bytes
-rw-r--r--tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_launcher.pngbin0 -> 7401 bytes
-rw-r--r--tests/JobSchedulerTestApp/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 12074 bytes
-rw-r--r--tests/JobSchedulerTestApp/res/layout/activity_main.xml125
-rw-r--r--tests/JobSchedulerTestApp/res/values-v11/styles.xml28
-rw-r--r--tests/JobSchedulerTestApp/res/values-v14/styles.xml29
-rw-r--r--tests/JobSchedulerTestApp/res/values/color.xml (renamed from core/res/res/drawable/notification_quantum_bg_dim.xml)18
-rw-r--r--tests/JobSchedulerTestApp/res/values/strings.xml33
-rw-r--r--tests/JobSchedulerTestApp/res/values/styles.xml37
-rw-r--r--tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java169
-rw-r--r--tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/service/TestJobService.java119
-rw-r--r--tests/VoiceInteraction/AndroidManifest.xml4
-rw-r--r--tools/aapt/AaptAssets.cpp4
-rw-r--r--tools/aapt/Resource.cpp81
-rw-r--r--tools/layoutlib/Android.mk2
-rw-r--r--tools/layoutlib/bridge/Android.mk1
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java7
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java76
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java53
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java20
-rw-r--r--tools/layoutlib/bridge/src/android/view/BridgeInflater.java4
-rw-r--r--tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java9
-rw-r--r--tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java2
-rw-r--r--tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java2
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java3
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java5
-rw-r--r--tools/layoutlib/create/README.txt14
-rw-r--r--tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java34
-rw-r--r--tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java36
-rw-r--r--tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java5
-rw-r--r--tools/layoutlib/create/src/com/android/tools/layoutlib/create/ReplaceMethodCallsAdapter.java53
-rwxr-xr-xtools/layoutlib/rename_font/build_font.py5
-rwxr-xr-xtools/layoutlib/rename_font/test.py2
1708 files changed, 14737 insertions, 12637 deletions
diff --git a/Android.mk b/Android.mk
index a0187165cb52..52459ae124d6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -77,9 +77,9 @@ LOCAL_SRC_FILES += \
core/java/android/app/ISearchManagerCallback.aidl \
core/java/android/app/IServiceConnection.aidl \
core/java/android/app/IStopUserCallback.aidl \
- core/java/android/app/task/ITaskCallback.aidl \
- core/java/android/app/task/ITaskManager.aidl \
- core/java/android/app/task/ITaskService.aidl \
+ core/java/android/app/job/IJobCallback.aidl \
+ core/java/android/app/job/IJobScheduler.aidl \
+ core/java/android/app/job/IJobService.aidl \
core/java/android/app/IThumbnailRetriever.aidl \
core/java/android/app/ITransientNotification.aidl \
core/java/android/app/IUiAutomationConnection.aidl \
@@ -146,8 +146,6 @@ LOCAL_SRC_FILES += \
core/java/android/hardware/ISerialManager.aidl \
core/java/android/hardware/display/IDisplayManager.aidl \
core/java/android/hardware/display/IDisplayManagerCallback.aidl \
- core/java/android/hardware/hdmi/IHdmiCecListener.aidl \
- core/java/android/hardware/hdmi/IHdmiCecService.aidl \
core/java/android/hardware/hdmi/IHdmiControlCallback.aidl \
core/java/android/hardware/hdmi/IHdmiControlService.aidl \
core/java/android/hardware/hdmi/IHdmiHotplugEventListener.aidl \
@@ -231,6 +229,7 @@ LOCAL_SRC_FILES += \
core/java/android/view/IWindowId.aidl \
core/java/android/view/IWindowManager.aidl \
core/java/android/view/IWindowSession.aidl \
+ core/java/android/view/IWindowSessionCallback.aidl \
core/java/android/speech/IRecognitionListener.aidl \
core/java/android/speech/IRecognitionService.aidl \
core/java/android/speech/tts/ITextToSpeechCallback.aidl \
@@ -305,14 +304,15 @@ LOCAL_SRC_FILES += \
media/java/android/media/IRemoteVolumeObserver.aidl \
media/java/android/media/IRingtonePlayer.aidl \
media/java/android/media/IVolumeController.aidl \
- media/java/android/media/routeprovider/IRouteConnection.aidl \
- media/java/android/media/routeprovider/IRouteProvider.aidl \
- media/java/android/media/routeprovider/IRouteProviderCallback.aidl \
- media/java/android/media/session/ISessionController.aidl \
- media/java/android/media/session/ISessionControllerCallback.aidl \
- media/java/android/media/session/ISession.aidl \
- media/java/android/media/session/ISessionCallback.aidl \
- media/java/android/media/session/ISessionManager.aidl \
+ media/java/android/media/routeprovider/IRouteConnection.aidl \
+ media/java/android/media/routeprovider/IRouteProvider.aidl \
+ media/java/android/media/routeprovider/IRouteProviderCallback.aidl \
+ media/java/android/media/session/IActiveSessionsListener.aidl \
+ media/java/android/media/session/ISessionController.aidl \
+ media/java/android/media/session/ISessionControllerCallback.aidl \
+ media/java/android/media/session/ISession.aidl \
+ media/java/android/media/session/ISessionCallback.aidl \
+ media/java/android/media/session/ISessionManager.aidl \
media/java/android/media/tv/ITvInputClient.aidl \
media/java/android/media/tv/ITvInputHardware.aidl \
media/java/android/media/tv/ITvInputHardwareCallback.aidl \
@@ -761,7 +761,7 @@ LOCAL_MODULE := private-api-stubs
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
-stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android_private_stubs_current_intermediates/src \
- -showAnnotation android.annotation.PrivateApi \
+ -showAnnotation android.annotation.SystemApi \
-nodocs
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
diff --git a/CleanSpec.mk b/CleanSpec.mk
index f3bb9b6a99a7..5b027b3d68d8 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -197,3 +197,6 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes/android/app/task)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/app/task)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes/android/app/TaskManager)
diff --git a/api/current.txt b/api/current.txt
index 012ecb8462ae..8b230b67f4ad 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -9,7 +9,6 @@ package android {
field public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
field public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
field public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
- field public static final java.lang.String ACCESS_INPUT_FLINGER = "android.permission.ACCESS_INPUT_FLINGER";
field public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
field public static final java.lang.String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
field public static final java.lang.String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE";
@@ -112,7 +111,6 @@ package android {
field public static final java.lang.String RECEIVE_SMS = "android.permission.RECEIVE_SMS";
field public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
- field public static final java.lang.String RECOVERY = "android.permission.RECOVERY";
field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
@@ -247,7 +245,7 @@ package android {
field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
field public static final int actionBarTabStyle = 16843507; // 0x10102f3
field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
- field public static final int actionBarTheme = 16843828; // 0x1010434
+ field public static final int actionBarTheme = 16843827; // 0x1010433
field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
field public static final int actionButtonStyle = 16843480; // 0x10102d8
field public static final int actionDropDownStyle = 16843479; // 0x10102d7
@@ -264,7 +262,7 @@ package android {
field public static final int actionModeSplitBackground = 16843677; // 0x101039d
field public static final int actionModeStyle = 16843668; // 0x1010394
field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
- field public static final int actionOverflowMenuStyle = 16843847; // 0x1010447
+ field public static final int actionOverflowMenuStyle = 16843846; // 0x1010446
field public static final int actionProviderClass = 16843657; // 0x1010389
field public static final int actionViewClass = 16843516; // 0x10102fc
field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
@@ -383,22 +381,22 @@ package android {
field public static final int codes = 16843330; // 0x1010242
field public static final int collapseColumns = 16843083; // 0x101014b
field public static final int color = 16843173; // 0x10101a5
- field public static final int colorAccent = 16843832; // 0x1010438
+ field public static final int colorAccent = 16843831; // 0x1010437
field public static final int colorActivatedHighlight = 16843664; // 0x1010390
field public static final int colorBackground = 16842801; // 0x1010031
field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
- field public static final int colorButtonNormal = 16843822; // 0x101042e
- field public static final int colorControlActivated = 16843821; // 0x101042d
- field public static final int colorControlHighlight = 16843823; // 0x101042f
- field public static final int colorControlNormal = 16843820; // 0x101042c
+ field public static final int colorButtonNormal = 16843821; // 0x101042d
+ field public static final int colorControlActivated = 16843820; // 0x101042c
+ field public static final int colorControlHighlight = 16843822; // 0x101042e
+ field public static final int colorControlNormal = 16843819; // 0x101042b
field public static final int colorFocusedHighlight = 16843663; // 0x101038f
field public static final int colorForeground = 16842800; // 0x1010030
field public static final int colorForegroundInverse = 16843270; // 0x1010206
field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
field public static final int colorPressedHighlight = 16843661; // 0x101038d
- field public static final int colorPrimary = 16843830; // 0x1010436
- field public static final int colorPrimaryDark = 16843831; // 0x1010437
+ field public static final int colorPrimary = 16843829; // 0x1010435
+ field public static final int colorPrimaryDark = 16843830; // 0x1010436
field public static final int columnCount = 16843639; // 0x1010377
field public static final int columnDelay = 16843215; // 0x10101cf
field public static final int columnOrderPreserved = 16843640; // 0x1010378
@@ -461,7 +459,7 @@ package android {
field public static final int dividerHorizontal = 16843564; // 0x101032c
field public static final int dividerPadding = 16843562; // 0x101032a
field public static final int dividerVertical = 16843530; // 0x101030a
- field public static final int documentLaunchMode = 16843848; // 0x1010448
+ field public static final int documentLaunchMode = 16843847; // 0x1010447
field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
field public static final int drawable = 16843161; // 0x1010199
field public static final int drawableBottom = 16843118; // 0x101016e
@@ -490,7 +488,8 @@ package android {
field public static final int editTextStyle = 16842862; // 0x101006e
field public static final deprecated int editable = 16843115; // 0x101016b
field public static final int editorExtras = 16843300; // 0x1010224
- field public static final int elevation = 16843843; // 0x1010443
+ field public static final int elegantTextHeight = 16843867; // 0x101045b
+ field public static final int elevation = 16843842; // 0x1010442
field public static final int ellipsize = 16842923; // 0x10100ab
field public static final int ems = 16843096; // 0x1010158
field public static final int enabled = 16842766; // 0x101000e
@@ -500,9 +499,9 @@ package android {
field public static final int entries = 16842930; // 0x10100b2
field public static final int entryValues = 16843256; // 0x10101f8
field public static final int eventsInterceptionEnabled = 16843389; // 0x101027d
- field public static final int excludeClass = 16843845; // 0x1010445
+ field public static final int excludeClass = 16843844; // 0x1010444
field public static final int excludeFromRecents = 16842775; // 0x1010017
- field public static final int excludeId = 16843844; // 0x1010444
+ field public static final int excludeId = 16843843; // 0x1010443
field public static final int excludeViewName = 16843856; // 0x1010450
field public static final int exitFadeDuration = 16843533; // 0x101030d
field public static final int expandableListPreferredChildIndicatorLeft = 16842834; // 0x1010052
@@ -598,7 +597,7 @@ package android {
field public static final int headerBackground = 16843055; // 0x101012f
field public static final int headerDividersEnabled = 16843310; // 0x101022e
field public static final int height = 16843093; // 0x1010155
- field public static final int hideOnContentScroll = 16843846; // 0x1010446
+ field public static final int hideOnContentScroll = 16843845; // 0x1010445
field public static final int hint = 16843088; // 0x1010150
field public static final int homeAsUpIndicator = 16843531; // 0x101030b
field public static final int homeLayout = 16843549; // 0x101031d
@@ -704,7 +703,6 @@ package android {
field public static final int l_resource_pad23 = 16843770; // 0x10103fa
field public static final int l_resource_pad24 = 16843769; // 0x10103f9
field public static final int l_resource_pad25 = 16843768; // 0x10103f8
- field public static final int l_resource_pad26 = 16843767; // 0x10103f7
field public static final int l_resource_pad3 = 16843790; // 0x101040e
field public static final int l_resource_pad4 = 16843789; // 0x101040d
field public static final int l_resource_pad5 = 16843788; // 0x101040c
@@ -803,6 +801,7 @@ package android {
field public static final int maxLength = 16843104; // 0x1010160
field public static final int maxLevel = 16843186; // 0x10101b2
field public static final int maxLines = 16843091; // 0x1010153
+ field public static final int maxRecents = 16843848; // 0x1010448
field public static final int maxRows = 16843059; // 0x1010133
field public static final int maxSdkVersion = 16843377; // 0x1010271
field public static final int maxWidth = 16843039; // 0x101011f
@@ -830,7 +829,7 @@ package android {
field public static final int navigationBarColor = 16843860; // 0x1010454
field public static final int navigationMode = 16843471; // 0x10102cf
field public static final int negativeButtonText = 16843254; // 0x10101f6
- field public static final int nestedScrollingEnabled = 16843833; // 0x1010439
+ field public static final int nestedScrollingEnabled = 16843832; // 0x1010438
field public static final int nextFocusDown = 16842980; // 0x10100e4
field public static final int nextFocusForward = 16843580; // 0x101033c
field public static final int nextFocusLeft = 16842977; // 0x10100e1
@@ -880,11 +879,10 @@ package android {
field public static final int permissionFlags = 16843719; // 0x10103c7
field public static final int permissionGroup = 16842762; // 0x101000a
field public static final int permissionGroupFlags = 16843717; // 0x10103c5
- field public static final int persistable = 16843824; // 0x1010430
+ field public static final int persistable = 16843823; // 0x101042f
field public static final int persistent = 16842765; // 0x101000d
field public static final int persistentDrawingCache = 16842990; // 0x10100ee
field public static final deprecated int phoneNumber = 16843111; // 0x1010167
- field public static final int pinned = 16843819; // 0x101042b
field public static final int pivotX = 16843189; // 0x10101b5
field public static final int pivotY = 16843190; // 0x10101b6
field public static final int popupAnimationStyle = 16843465; // 0x10102c9
@@ -1014,7 +1012,7 @@ package android {
field public static final int selectableItemBackgroundBorderless = 16843866; // 0x101045a
field public static final int selectedDateVerticalBar = 16843591; // 0x1010347
field public static final int selectedWeekBackgroundColor = 16843586; // 0x1010342
- field public static final int sessionService = 16843840; // 0x1010440
+ field public static final int sessionService = 16843839; // 0x101043f
field public static final int settingsActivity = 16843301; // 0x1010225
field public static final int setupActivity = 16843766; // 0x10103f6
field public static final int shadowColor = 16843105; // 0x1010161
@@ -1036,7 +1034,7 @@ package android {
field public static final int shrinkColumns = 16843082; // 0x101014a
field public static final deprecated int singleLine = 16843101; // 0x101015d
field public static final int singleUser = 16843711; // 0x10103bf
- field public static final int slideEdge = 16843827; // 0x1010433
+ field public static final int slideEdge = 16843826; // 0x1010432
field public static final int smallIcon = 16843422; // 0x101029e
field public static final int smallScreens = 16843396; // 0x1010284
field public static final int smoothScrollbar = 16843313; // 0x1010231
@@ -1054,7 +1052,7 @@ package android {
field public static final int sspPattern = 16843749; // 0x10103e5
field public static final int sspPrefix = 16843748; // 0x10103e4
field public static final int stackFromBottom = 16843005; // 0x10100fd
- field public static final int stackViewStyle = 16843841; // 0x1010441
+ field public static final int stackViewStyle = 16843840; // 0x1010440
field public static final int starStyle = 16842882; // 0x1010082
field public static final int startColor = 16843165; // 0x101019d
field public static final int startDelay = 16843746; // 0x10103e2
@@ -1097,7 +1095,7 @@ package android {
field public static final int strokeOpacity = 16843810; // 0x1010422
field public static final int strokeWidth = 16843811; // 0x1010423
field public static final int subtitle = 16843473; // 0x10102d1
- field public static final int subtitleTextAppearance = 16843826; // 0x1010432
+ field public static final int subtitleTextAppearance = 16843825; // 0x1010431
field public static final int subtitleTextStyle = 16843513; // 0x10102f9
field public static final int subtypeExtraValue = 16843674; // 0x101039a
field public static final int subtypeId = 16843713; // 0x10103c1
@@ -1114,7 +1112,7 @@ package android {
field public static final int switchMinWidth = 16843632; // 0x1010370
field public static final int switchPadding = 16843633; // 0x1010371
field public static final int switchPreferenceStyle = 16843629; // 0x101036d
- field public static final int switchStyle = 16843842; // 0x1010442
+ field public static final int switchStyle = 16843841; // 0x1010441
field public static final int switchTextAppearance = 16843630; // 0x101036e
field public static final int switchTextOff = 16843628; // 0x101036c
field public static final int switchTextOn = 16843627; // 0x101036b
@@ -1152,7 +1150,7 @@ package android {
field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
field public static final int textAppearanceListItem = 16843678; // 0x101039e
- field public static final int textAppearanceListItemSecondary = 16843829; // 0x1010435
+ field public static final int textAppearanceListItemSecondary = 16843828; // 0x1010434
field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f
field public static final int textAppearanceMedium = 16842817; // 0x1010041
field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
@@ -1216,7 +1214,7 @@ package android {
field public static final int tintMode = 16843797; // 0x1010415
field public static final int title = 16843233; // 0x10101e1
field public static final int titleCondensed = 16843234; // 0x10101e2
- field public static final int titleTextAppearance = 16843825; // 0x1010431
+ field public static final int titleTextAppearance = 16843824; // 0x1010430
field public static final int titleTextStyle = 16843512; // 0x10102f8
field public static final int toAlpha = 16843211; // 0x10101cb
field public static final int toDegrees = 16843188; // 0x10101b4
@@ -1245,6 +1243,7 @@ package android {
field public static final int trimPathEnd = 16843813; // 0x1010425
field public static final int trimPathOffset = 16843814; // 0x1010426
field public static final int trimPathStart = 16843812; // 0x1010424
+ field public static final int tvInputType = 16843767; // 0x10103f7
field public static final int type = 16843169; // 0x10101a1
field public static final int typeface = 16842902; // 0x1010096
field public static final int uiOptions = 16843672; // 0x1010398
@@ -1300,8 +1299,8 @@ package android {
field public static final int windowActionBar = 16843469; // 0x10102cd
field public static final int windowActionBarOverlay = 16843492; // 0x10102e4
field public static final int windowActionModeOverlay = 16843485; // 0x10102dd
- field public static final int windowAllowEnterTransitionOverlap = 16843839; // 0x101043f
- field public static final int windowAllowExitTransitionOverlap = 16843838; // 0x101043e
+ field public static final int windowAllowEnterTransitionOverlap = 16843838; // 0x101043e
+ field public static final int windowAllowExitTransitionOverlap = 16843837; // 0x101043d
field public static final int windowAnimationStyle = 16842926; // 0x10100ae
field public static final int windowBackground = 16842836; // 0x1010054
field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b
@@ -1312,9 +1311,9 @@ package android {
field public static final int windowDrawsSystemBarBackgrounds = 16843858; // 0x1010452
field public static final int windowEnableSplitTouch = 16843543; // 0x1010317
field public static final int windowEnterAnimation = 16842932; // 0x10100b4
- field public static final int windowEnterTransition = 16843834; // 0x101043a
+ field public static final int windowEnterTransition = 16843833; // 0x1010439
field public static final int windowExitAnimation = 16842933; // 0x10100b5
- field public static final int windowExitTransition = 16843835; // 0x101043b
+ field public static final int windowExitTransition = 16843834; // 0x101043a
field public static final int windowFrame = 16842837; // 0x1010055
field public static final int windowFullscreen = 16843277; // 0x101020d
field public static final int windowHideAnimation = 16842935; // 0x10100b7
@@ -1325,8 +1324,8 @@ package android {
field public static final int windowNoDisplay = 16843294; // 0x101021e
field public static final int windowNoTitle = 16842838; // 0x1010056
field public static final int windowOverscan = 16843727; // 0x10103cf
- field public static final int windowSharedElementEnterTransition = 16843836; // 0x101043c
- field public static final int windowSharedElementExitTransition = 16843837; // 0x101043d
+ field public static final int windowSharedElementEnterTransition = 16843835; // 0x101043b
+ field public static final int windowSharedElementExitTransition = 16843836; // 0x101043c
field public static final int windowShowAnimation = 16842934; // 0x10100b6
field public static final int windowShowWallpaper = 16843410; // 0x1010292
field public static final int windowSoftInputMode = 16843307; // 0x101022b
@@ -1858,54 +1857,54 @@ package android {
field public static final int TextAppearance_Inverse = 16973887; // 0x103003f
field public static final int TextAppearance_Large = 16973890; // 0x1030042
field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043
+ field public static final int TextAppearance_Material = 16974350; // 0x103020e
+ field public static final int TextAppearance_Material_Body1 = 16974550; // 0x10302d6
+ field public static final int TextAppearance_Material_Body2 = 16974549; // 0x10302d5
+ field public static final int TextAppearance_Material_Button = 16974553; // 0x10302d9
+ field public static final int TextAppearance_Material_Caption = 16974551; // 0x10302d7
+ field public static final int TextAppearance_Material_DialogWindowTitle = 16974351; // 0x103020f
+ field public static final int TextAppearance_Material_Display1 = 16974545; // 0x10302d1
+ field public static final int TextAppearance_Material_Display2 = 16974544; // 0x10302d0
+ field public static final int TextAppearance_Material_Display3 = 16974543; // 0x10302cf
+ field public static final int TextAppearance_Material_Display4 = 16974542; // 0x10302ce
+ field public static final int TextAppearance_Material_Headline = 16974546; // 0x10302d2
+ field public static final int TextAppearance_Material_Inverse = 16974352; // 0x1030210
+ field public static final int TextAppearance_Material_Large = 16974353; // 0x1030211
+ field public static final int TextAppearance_Material_Large_Inverse = 16974354; // 0x1030212
+ field public static final int TextAppearance_Material_Medium = 16974355; // 0x1030213
+ field public static final int TextAppearance_Material_Medium_Inverse = 16974356; // 0x1030214
+ field public static final int TextAppearance_Material_Menu = 16974552; // 0x10302d8
+ field public static final int TextAppearance_Material_SearchResult_Subtitle = 16974357; // 0x1030215
+ field public static final int TextAppearance_Material_SearchResult_Title = 16974358; // 0x1030216
+ field public static final int TextAppearance_Material_Small = 16974359; // 0x1030217
+ field public static final int TextAppearance_Material_Small_Inverse = 16974360; // 0x1030218
+ field public static final int TextAppearance_Material_Subhead = 16974548; // 0x10302d4
+ field public static final int TextAppearance_Material_Title = 16974547; // 0x10302d3
+ field public static final int TextAppearance_Material_Widget = 16974362; // 0x103021a
+ field public static final int TextAppearance_Material_Widget_ActionBar_Menu = 16974363; // 0x103021b
+ field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle = 16974364; // 0x103021c
+ field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse = 16974365; // 0x103021d
+ field public static final int TextAppearance_Material_Widget_ActionBar_Title = 16974366; // 0x103021e
+ field public static final int TextAppearance_Material_Widget_ActionBar_Title_Inverse = 16974367; // 0x103021f
+ field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle = 16974368; // 0x1030220
+ field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse = 16974369; // 0x1030221
+ field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974370; // 0x1030222
+ field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974371; // 0x1030223
+ field public static final int TextAppearance_Material_Widget_Button = 16974372; // 0x1030224
+ field public static final int TextAppearance_Material_Widget_DropDownHint = 16974373; // 0x1030225
+ field public static final int TextAppearance_Material_Widget_DropDownItem = 16974374; // 0x1030226
+ field public static final int TextAppearance_Material_Widget_EditText = 16974375; // 0x1030227
+ field public static final int TextAppearance_Material_Widget_IconMenu_Item = 16974376; // 0x1030228
+ field public static final int TextAppearance_Material_Widget_PopupMenu = 16974377; // 0x1030229
+ field public static final int TextAppearance_Material_Widget_PopupMenu_Large = 16974378; // 0x103022a
+ field public static final int TextAppearance_Material_Widget_PopupMenu_Small = 16974379; // 0x103022b
+ field public static final int TextAppearance_Material_Widget_TabWidget = 16974380; // 0x103022c
+ field public static final int TextAppearance_Material_Widget_TextView = 16974381; // 0x103022d
+ field public static final int TextAppearance_Material_Widget_TextView_PopupMenu = 16974382; // 0x103022e
+ field public static final int TextAppearance_Material_Widget_TextView_SpinnerItem = 16974383; // 0x103022f
+ field public static final int TextAppearance_Material_WindowTitle = 16974361; // 0x1030219
field public static final int TextAppearance_Medium = 16973892; // 0x1030044
field public static final int TextAppearance_Medium_Inverse = 16973893; // 0x1030045
- field public static final int TextAppearance_Quantum = 16974348; // 0x103020c
- field public static final int TextAppearance_Quantum_Body1 = 16974546; // 0x10302d2
- field public static final int TextAppearance_Quantum_Body2 = 16974545; // 0x10302d1
- field public static final int TextAppearance_Quantum_Button = 16974549; // 0x10302d5
- field public static final int TextAppearance_Quantum_Caption = 16974547; // 0x10302d3
- field public static final int TextAppearance_Quantum_DialogWindowTitle = 16974349; // 0x103020d
- field public static final int TextAppearance_Quantum_Display1 = 16974541; // 0x10302cd
- field public static final int TextAppearance_Quantum_Display2 = 16974540; // 0x10302cc
- field public static final int TextAppearance_Quantum_Display3 = 16974539; // 0x10302cb
- field public static final int TextAppearance_Quantum_Display4 = 16974538; // 0x10302ca
- field public static final int TextAppearance_Quantum_Headline = 16974542; // 0x10302ce
- field public static final int TextAppearance_Quantum_Inverse = 16974350; // 0x103020e
- field public static final int TextAppearance_Quantum_Large = 16974351; // 0x103020f
- field public static final int TextAppearance_Quantum_Large_Inverse = 16974352; // 0x1030210
- field public static final int TextAppearance_Quantum_Medium = 16974353; // 0x1030211
- field public static final int TextAppearance_Quantum_Medium_Inverse = 16974354; // 0x1030212
- field public static final int TextAppearance_Quantum_Menu = 16974548; // 0x10302d4
- field public static final int TextAppearance_Quantum_SearchResult_Subtitle = 16974355; // 0x1030213
- field public static final int TextAppearance_Quantum_SearchResult_Title = 16974356; // 0x1030214
- field public static final int TextAppearance_Quantum_Small = 16974357; // 0x1030215
- field public static final int TextAppearance_Quantum_Small_Inverse = 16974358; // 0x1030216
- field public static final int TextAppearance_Quantum_Subhead = 16974544; // 0x10302d0
- field public static final int TextAppearance_Quantum_Title = 16974543; // 0x10302cf
- field public static final int TextAppearance_Quantum_Widget = 16974360; // 0x1030218
- field public static final int TextAppearance_Quantum_Widget_ActionBar_Menu = 16974361; // 0x1030219
- field public static final int TextAppearance_Quantum_Widget_ActionBar_Subtitle = 16974362; // 0x103021a
- field public static final int TextAppearance_Quantum_Widget_ActionBar_Subtitle_Inverse = 16974363; // 0x103021b
- field public static final int TextAppearance_Quantum_Widget_ActionBar_Title = 16974364; // 0x103021c
- field public static final int TextAppearance_Quantum_Widget_ActionBar_Title_Inverse = 16974365; // 0x103021d
- field public static final int TextAppearance_Quantum_Widget_ActionMode_Subtitle = 16974366; // 0x103021e
- field public static final int TextAppearance_Quantum_Widget_ActionMode_Subtitle_Inverse = 16974367; // 0x103021f
- field public static final int TextAppearance_Quantum_Widget_ActionMode_Title = 16974368; // 0x1030220
- field public static final int TextAppearance_Quantum_Widget_ActionMode_Title_Inverse = 16974369; // 0x1030221
- field public static final int TextAppearance_Quantum_Widget_Button = 16974370; // 0x1030222
- field public static final int TextAppearance_Quantum_Widget_DropDownHint = 16974371; // 0x1030223
- field public static final int TextAppearance_Quantum_Widget_DropDownItem = 16974372; // 0x1030224
- field public static final int TextAppearance_Quantum_Widget_EditText = 16974373; // 0x1030225
- field public static final int TextAppearance_Quantum_Widget_IconMenu_Item = 16974374; // 0x1030226
- field public static final int TextAppearance_Quantum_Widget_PopupMenu = 16974375; // 0x1030227
- field public static final int TextAppearance_Quantum_Widget_PopupMenu_Large = 16974376; // 0x1030228
- field public static final int TextAppearance_Quantum_Widget_PopupMenu_Small = 16974377; // 0x1030229
- field public static final int TextAppearance_Quantum_Widget_TabWidget = 16974378; // 0x103022a
- field public static final int TextAppearance_Quantum_Widget_TextView = 16974379; // 0x103022b
- field public static final int TextAppearance_Quantum_Widget_TextView_PopupMenu = 16974380; // 0x103022c
- field public static final int TextAppearance_Quantum_Widget_TextView_SpinnerItem = 16974381; // 0x103022d
- field public static final int TextAppearance_Quantum_WindowTitle = 16974359; // 0x1030217
field public static final int TextAppearance_Small = 16973894; // 0x1030046
field public static final int TextAppearance_Small_Inverse = 16973895; // 0x1030047
field public static final int TextAppearance_StatusBar_EventContent = 16973927; // 0x1030067
@@ -1929,12 +1928,12 @@ package android {
field public static final int TextAppearance_Widget_TextView_SpinnerItem = 16973906; // 0x1030052
field public static final int TextAppearance_WindowTitle = 16973907; // 0x1030053
field public static final int Theme = 16973829; // 0x1030005
- field public static final int ThemeOverlay = 16974412; // 0x103024c
- field public static final int ThemeOverlay_Quantum = 16974413; // 0x103024d
- field public static final int ThemeOverlay_Quantum_ActionBar = 16974414; // 0x103024e
- field public static final int ThemeOverlay_Quantum_Dark = 16974416; // 0x1030250
- field public static final int ThemeOverlay_Quantum_Dark_ActionBar = 16974417; // 0x1030251
- field public static final int ThemeOverlay_Quantum_Light = 16974415; // 0x103024f
+ field public static final int ThemeOverlay = 16974414; // 0x103024e
+ field public static final int ThemeOverlay_Material = 16974415; // 0x103024f
+ field public static final int ThemeOverlay_Material_ActionBar = 16974416; // 0x1030250
+ field public static final int ThemeOverlay_Material_Dark = 16974418; // 0x1030252
+ field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974419; // 0x1030253
+ field public static final int ThemeOverlay_Material_Light = 16974417; // 0x1030251
field public static final int Theme_Black = 16973832; // 0x1030008
field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a
@@ -2001,41 +2000,41 @@ package android {
field public static final int Theme_Light_NoTitleBar_Fullscreen = 16973838; // 0x103000e
field public static final int Theme_Light_Panel = 16973914; // 0x103005a
field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062
+ field public static final int Theme_Material = 16974384; // 0x1030230
+ field public static final int Theme_Material_Dialog = 16974385; // 0x1030231
+ field public static final int Theme_Material_DialogWhenLarge = 16974389; // 0x1030235
+ field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974390; // 0x1030236
+ field public static final int Theme_Material_Dialog_MinWidth = 16974386; // 0x1030232
+ field public static final int Theme_Material_Dialog_NoActionBar = 16974387; // 0x1030233
+ field public static final int Theme_Material_Dialog_NoActionBar_MinWidth = 16974388; // 0x1030234
+ field public static final int Theme_Material_InputMethod = 16974391; // 0x1030237
+ field public static final int Theme_Material_Light = 16974400; // 0x1030240
+ field public static final int Theme_Material_Light_DarkActionBar = 16974401; // 0x1030241
+ field public static final int Theme_Material_Light_Dialog = 16974402; // 0x1030242
+ field public static final int Theme_Material_Light_DialogWhenLarge = 16974406; // 0x1030246
+ field public static final int Theme_Material_Light_DialogWhenLarge_NoActionBar = 16974407; // 0x1030247
+ field public static final int Theme_Material_Light_Dialog_MinWidth = 16974403; // 0x1030243
+ field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974404; // 0x1030244
+ field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974405; // 0x1030245
+ field public static final int Theme_Material_Light_NoActionBar = 16974408; // 0x1030248
+ field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974409; // 0x1030249
+ field public static final int Theme_Material_Light_NoActionBar_Overscan = 16974410; // 0x103024a
+ field public static final int Theme_Material_Light_NoActionBar_TranslucentDecor = 16974411; // 0x103024b
+ field public static final int Theme_Material_Light_Panel = 16974412; // 0x103024c
+ field public static final int Theme_Material_Light_Voice = 16974413; // 0x103024d
+ field public static final int Theme_Material_NoActionBar = 16974392; // 0x1030238
+ field public static final int Theme_Material_NoActionBar_Fullscreen = 16974393; // 0x1030239
+ field public static final int Theme_Material_NoActionBar_Overscan = 16974394; // 0x103023a
+ field public static final int Theme_Material_NoActionBar_TranslucentDecor = 16974395; // 0x103023b
+ field public static final int Theme_Material_Panel = 16974396; // 0x103023c
+ field public static final int Theme_Material_Voice = 16974397; // 0x103023d
+ field public static final int Theme_Material_Wallpaper = 16974398; // 0x103023e
+ field public static final int Theme_Material_Wallpaper_NoTitleBar = 16974399; // 0x103023f
field public static final int Theme_NoDisplay = 16973909; // 0x1030055
field public static final int Theme_NoTitleBar = 16973830; // 0x1030006
field public static final int Theme_NoTitleBar_Fullscreen = 16973831; // 0x1030007
field public static final int Theme_NoTitleBar_OverlayActionModes = 16973930; // 0x103006a
field public static final int Theme_Panel = 16973913; // 0x1030059
- field public static final int Theme_Quantum = 16974382; // 0x103022e
- field public static final int Theme_Quantum_Dialog = 16974383; // 0x103022f
- field public static final int Theme_Quantum_DialogWhenLarge = 16974387; // 0x1030233
- field public static final int Theme_Quantum_DialogWhenLarge_NoActionBar = 16974388; // 0x1030234
- field public static final int Theme_Quantum_Dialog_MinWidth = 16974384; // 0x1030230
- field public static final int Theme_Quantum_Dialog_NoActionBar = 16974385; // 0x1030231
- field public static final int Theme_Quantum_Dialog_NoActionBar_MinWidth = 16974386; // 0x1030232
- field public static final int Theme_Quantum_InputMethod = 16974389; // 0x1030235
- field public static final int Theme_Quantum_Light = 16974398; // 0x103023e
- field public static final int Theme_Quantum_Light_DarkActionBar = 16974399; // 0x103023f
- field public static final int Theme_Quantum_Light_Dialog = 16974400; // 0x1030240
- field public static final int Theme_Quantum_Light_DialogWhenLarge = 16974404; // 0x1030244
- field public static final int Theme_Quantum_Light_DialogWhenLarge_NoActionBar = 16974405; // 0x1030245
- field public static final int Theme_Quantum_Light_Dialog_MinWidth = 16974401; // 0x1030241
- field public static final int Theme_Quantum_Light_Dialog_NoActionBar = 16974402; // 0x1030242
- field public static final int Theme_Quantum_Light_Dialog_NoActionBar_MinWidth = 16974403; // 0x1030243
- field public static final int Theme_Quantum_Light_NoActionBar = 16974406; // 0x1030246
- field public static final int Theme_Quantum_Light_NoActionBar_Fullscreen = 16974407; // 0x1030247
- field public static final int Theme_Quantum_Light_NoActionBar_Overscan = 16974408; // 0x1030248
- field public static final int Theme_Quantum_Light_NoActionBar_TranslucentDecor = 16974409; // 0x1030249
- field public static final int Theme_Quantum_Light_Panel = 16974410; // 0x103024a
- field public static final int Theme_Quantum_Light_Voice = 16974411; // 0x103024b
- field public static final int Theme_Quantum_NoActionBar = 16974390; // 0x1030236
- field public static final int Theme_Quantum_NoActionBar_Fullscreen = 16974391; // 0x1030237
- field public static final int Theme_Quantum_NoActionBar_Overscan = 16974392; // 0x1030238
- field public static final int Theme_Quantum_NoActionBar_TranslucentDecor = 16974393; // 0x1030239
- field public static final int Theme_Quantum_Panel = 16974394; // 0x103023a
- field public static final int Theme_Quantum_Voice = 16974395; // 0x103023b
- field public static final int Theme_Quantum_Wallpaper = 16974396; // 0x103023c
- field public static final int Theme_Quantum_Wallpaper_NoTitleBar = 16974397; // 0x103023d
field public static final int Theme_Translucent = 16973839; // 0x103000f
field public static final int Theme_Translucent_NoTitleBar = 16973840; // 0x1030010
field public static final int Theme_Translucent_NoTitleBar_Fullscreen = 16973841; // 0x1030011
@@ -2092,7 +2091,7 @@ package android {
field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162
field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a
field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b
- field public static final int Widget_DeviceDefault_FastScroll = 16974344; // 0x1030208
+ field public static final int Widget_DeviceDefault_FastScroll = 16974346; // 0x103020a
field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c
field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b
field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d
@@ -2126,7 +2125,7 @@ package android {
field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199
field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e
field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f
- field public static final int Widget_DeviceDefault_Light_FastScroll = 16974346; // 0x103020a
+ field public static final int Widget_DeviceDefault_Light_FastScroll = 16974348; // 0x103020c
field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180
field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192
field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181
@@ -2150,7 +2149,7 @@ package android {
field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191
field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c
field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193
- field public static final int Widget_DeviceDefault_Light_StackView = 16974347; // 0x103020b
+ field public static final int Widget_DeviceDefault_Light_StackView = 16974349; // 0x103020d
field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d
field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195
field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a
@@ -2174,7 +2173,7 @@ package android {
field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a
field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155
field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c
- field public static final int Widget_DeviceDefault_StackView = 16974345; // 0x1030209
+ field public static final int Widget_DeviceDefault_StackView = 16974347; // 0x103020b
field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d
field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e
field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146
@@ -2217,7 +2216,7 @@ package android {
field public static final int Widget_Holo_DropDownItem_Spinner = 16973995; // 0x10300ab
field public static final int Widget_Holo_EditText = 16973971; // 0x1030093
field public static final int Widget_Holo_ExpandableListView = 16973972; // 0x1030094
- field public static final int Widget_Holo_FastScroll = 16974339; // 0x1030203
+ field public static final int Widget_Holo_FastScroll = 16974341; // 0x1030205
field public static final int Widget_Holo_GridView = 16973973; // 0x1030095
field public static final int Widget_Holo_HorizontalScrollView = 16973988; // 0x10300a4
field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
@@ -2238,7 +2237,7 @@ package android {
field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
- field public static final int Widget_Holo_Light_Button_Borderless = 16974341; // 0x1030205
+ field public static final int Widget_Holo_Light_Button_Borderless = 16974343; // 0x1030207
field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b
field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8
field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
@@ -2252,7 +2251,7 @@ package android {
field public static final int Widget_Holo_Light_DropDownItem_Spinner = 16974041; // 0x10300d9
field public static final int Widget_Holo_Light_EditText = 16974014; // 0x10300be
field public static final int Widget_Holo_Light_ExpandableListView = 16974015; // 0x10300bf
- field public static final int Widget_Holo_Light_FastScroll = 16974342; // 0x1030206
+ field public static final int Widget_Holo_Light_FastScroll = 16974344; // 0x1030208
field public static final int Widget_Holo_Light_GridView = 16974016; // 0x10300c0
field public static final int Widget_Holo_Light_HorizontalScrollView = 16974034; // 0x10300d2
field public static final int Widget_Holo_Light_ImageButton = 16974017; // 0x10300c1
@@ -2276,7 +2275,7 @@ package android {
field public static final int Widget_Holo_Light_ScrollView = 16974033; // 0x10300d1
field public static final int Widget_Holo_Light_SeekBar = 16974028; // 0x10300cc
field public static final int Widget_Holo_Light_Spinner = 16974035; // 0x10300d3
- field public static final int Widget_Holo_Light_StackView = 16974343; // 0x1030207
+ field public static final int Widget_Holo_Light_StackView = 16974345; // 0x1030209
field public static final int Widget_Holo_Light_Tab = 16974052; // 0x10300e4
field public static final int Widget_Holo_Light_TabWidget = 16974037; // 0x10300d5
field public static final int Widget_Holo_Light_TextView = 16974010; // 0x10300ba
@@ -2300,7 +2299,7 @@ package android {
field public static final int Widget_Holo_ScrollView = 16973987; // 0x10300a3
field public static final int Widget_Holo_SeekBar = 16973982; // 0x103009e
field public static final int Widget_Holo_Spinner = 16973989; // 0x10300a5
- field public static final int Widget_Holo_StackView = 16974340; // 0x1030204
+ field public static final int Widget_Holo_StackView = 16974342; // 0x1030206
field public static final int Widget_Holo_Tab = 16974051; // 0x10300e3
field public static final int Widget_Holo_TabWidget = 16973991; // 0x10300a7
field public static final int Widget_Holo_TextView = 16973967; // 0x103008f
@@ -2315,6 +2314,128 @@ package android {
field public static final int Widget_ListView_DropDown = 16973872; // 0x1030030
field public static final int Widget_ListView_Menu = 16973873; // 0x1030031
field public static final int Widget_ListView_White = 16973871; // 0x103002f
+ field public static final int Widget_Material = 16974420; // 0x1030254
+ field public static final int Widget_Material_ActionBar = 16974421; // 0x1030255
+ field public static final int Widget_Material_ActionBar_Solid = 16974422; // 0x1030256
+ field public static final int Widget_Material_ActionBar_TabBar = 16974423; // 0x1030257
+ field public static final int Widget_Material_ActionBar_TabText = 16974424; // 0x1030258
+ field public static final int Widget_Material_ActionBar_TabView = 16974425; // 0x1030259
+ field public static final int Widget_Material_ActionButton = 16974426; // 0x103025a
+ field public static final int Widget_Material_ActionButton_CloseMode = 16974427; // 0x103025b
+ field public static final int Widget_Material_ActionButton_Overflow = 16974428; // 0x103025c
+ field public static final int Widget_Material_ActionMode = 16974429; // 0x103025d
+ field public static final int Widget_Material_AutoCompleteTextView = 16974430; // 0x103025e
+ field public static final int Widget_Material_Button = 16974431; // 0x103025f
+ field public static final int Widget_Material_ButtonBar = 16974437; // 0x1030265
+ field public static final int Widget_Material_ButtonBar_AlertDialog = 16974438; // 0x1030266
+ field public static final int Widget_Material_Button_Borderless = 16974432; // 0x1030260
+ field public static final int Widget_Material_Button_Borderless_Small = 16974433; // 0x1030261
+ field public static final int Widget_Material_Button_Inset = 16974434; // 0x1030262
+ field public static final int Widget_Material_Button_Small = 16974435; // 0x1030263
+ field public static final int Widget_Material_Button_Toggle = 16974436; // 0x1030264
+ field public static final int Widget_Material_CalendarView = 16974439; // 0x1030267
+ field public static final int Widget_Material_CheckedTextView = 16974440; // 0x1030268
+ field public static final int Widget_Material_CompoundButton_CheckBox = 16974441; // 0x1030269
+ field public static final int Widget_Material_CompoundButton_RadioButton = 16974442; // 0x103026a
+ field public static final int Widget_Material_CompoundButton_Star = 16974443; // 0x103026b
+ field public static final int Widget_Material_DatePicker = 16974444; // 0x103026c
+ field public static final int Widget_Material_DropDownItem = 16974445; // 0x103026d
+ field public static final int Widget_Material_DropDownItem_Spinner = 16974446; // 0x103026e
+ field public static final int Widget_Material_EditText = 16974447; // 0x103026f
+ field public static final int Widget_Material_ExpandableListView = 16974448; // 0x1030270
+ field public static final int Widget_Material_FastScroll = 16974449; // 0x1030271
+ field public static final int Widget_Material_GridView = 16974450; // 0x1030272
+ field public static final int Widget_Material_HorizontalScrollView = 16974451; // 0x1030273
+ field public static final int Widget_Material_ImageButton = 16974452; // 0x1030274
+ field public static final int Widget_Material_Light = 16974481; // 0x1030291
+ field public static final int Widget_Material_Light_ActionBar = 16974482; // 0x1030292
+ field public static final int Widget_Material_Light_ActionBar_Solid = 16974483; // 0x1030293
+ field public static final int Widget_Material_Light_ActionBar_TabBar = 16974484; // 0x1030294
+ field public static final int Widget_Material_Light_ActionBar_TabText = 16974485; // 0x1030295
+ field public static final int Widget_Material_Light_ActionBar_TabView = 16974486; // 0x1030296
+ field public static final int Widget_Material_Light_ActionButton = 16974487; // 0x1030297
+ field public static final int Widget_Material_Light_ActionButton_CloseMode = 16974488; // 0x1030298
+ field public static final int Widget_Material_Light_ActionButton_Overflow = 16974489; // 0x1030299
+ field public static final int Widget_Material_Light_ActionMode = 16974490; // 0x103029a
+ field public static final int Widget_Material_Light_AutoCompleteTextView = 16974491; // 0x103029b
+ field public static final int Widget_Material_Light_Button = 16974492; // 0x103029c
+ field public static final int Widget_Material_Light_ButtonBar = 16974498; // 0x10302a2
+ field public static final int Widget_Material_Light_ButtonBar_AlertDialog = 16974499; // 0x10302a3
+ field public static final int Widget_Material_Light_Button_Borderless = 16974493; // 0x103029d
+ field public static final int Widget_Material_Light_Button_Borderless_Small = 16974494; // 0x103029e
+ field public static final int Widget_Material_Light_Button_Inset = 16974495; // 0x103029f
+ field public static final int Widget_Material_Light_Button_Small = 16974496; // 0x10302a0
+ field public static final int Widget_Material_Light_Button_Toggle = 16974497; // 0x10302a1
+ field public static final int Widget_Material_Light_CalendarView = 16974500; // 0x10302a4
+ field public static final int Widget_Material_Light_CheckedTextView = 16974501; // 0x10302a5
+ field public static final int Widget_Material_Light_CompoundButton_CheckBox = 16974502; // 0x10302a6
+ field public static final int Widget_Material_Light_CompoundButton_RadioButton = 16974503; // 0x10302a7
+ field public static final int Widget_Material_Light_CompoundButton_Star = 16974504; // 0x10302a8
+ field public static final int Widget_Material_Light_DropDownItem = 16974505; // 0x10302a9
+ field public static final int Widget_Material_Light_DropDownItem_Spinner = 16974506; // 0x10302aa
+ field public static final int Widget_Material_Light_EditText = 16974507; // 0x10302ab
+ field public static final int Widget_Material_Light_ExpandableListView = 16974508; // 0x10302ac
+ field public static final int Widget_Material_Light_FastScroll = 16974509; // 0x10302ad
+ field public static final int Widget_Material_Light_GridView = 16974510; // 0x10302ae
+ field public static final int Widget_Material_Light_HorizontalScrollView = 16974511; // 0x10302af
+ field public static final int Widget_Material_Light_ImageButton = 16974512; // 0x10302b0
+ field public static final int Widget_Material_Light_ListPopupWindow = 16974513; // 0x10302b1
+ field public static final int Widget_Material_Light_ListView = 16974514; // 0x10302b2
+ field public static final int Widget_Material_Light_ListView_DropDown = 16974515; // 0x10302b3
+ field public static final int Widget_Material_Light_MediaRouteButton = 16974516; // 0x10302b4
+ field public static final int Widget_Material_Light_PopupMenu = 16974517; // 0x10302b5
+ field public static final int Widget_Material_Light_PopupMenu_Overflow = 16974518; // 0x10302b6
+ field public static final int Widget_Material_Light_PopupWindow = 16974519; // 0x10302b7
+ field public static final int Widget_Material_Light_ProgressBar = 16974520; // 0x10302b8
+ field public static final int Widget_Material_Light_ProgressBar_Horizontal = 16974521; // 0x10302b9
+ field public static final int Widget_Material_Light_ProgressBar_Inverse = 16974522; // 0x10302ba
+ field public static final int Widget_Material_Light_ProgressBar_Large = 16974523; // 0x10302bb
+ field public static final int Widget_Material_Light_ProgressBar_Large_Inverse = 16974524; // 0x10302bc
+ field public static final int Widget_Material_Light_ProgressBar_Small = 16974525; // 0x10302bd
+ field public static final int Widget_Material_Light_ProgressBar_Small_Inverse = 16974526; // 0x10302be
+ field public static final int Widget_Material_Light_ProgressBar_Small_Title = 16974527; // 0x10302bf
+ field public static final int Widget_Material_Light_RatingBar = 16974528; // 0x10302c0
+ field public static final int Widget_Material_Light_RatingBar_Indicator = 16974529; // 0x10302c1
+ field public static final int Widget_Material_Light_RatingBar_Small = 16974530; // 0x10302c2
+ field public static final int Widget_Material_Light_ScrollView = 16974531; // 0x10302c3
+ field public static final int Widget_Material_Light_SeekBar = 16974532; // 0x10302c4
+ field public static final int Widget_Material_Light_SegmentedButton = 16974533; // 0x10302c5
+ field public static final int Widget_Material_Light_Spinner = 16974535; // 0x10302c7
+ field public static final int Widget_Material_Light_StackView = 16974534; // 0x10302c6
+ field public static final int Widget_Material_Light_Tab = 16974536; // 0x10302c8
+ field public static final int Widget_Material_Light_TabWidget = 16974537; // 0x10302c9
+ field public static final int Widget_Material_Light_TextView = 16974538; // 0x10302ca
+ field public static final int Widget_Material_Light_TextView_SpinnerItem = 16974539; // 0x10302cb
+ field public static final int Widget_Material_Light_WebTextView = 16974540; // 0x10302cc
+ field public static final int Widget_Material_Light_WebView = 16974541; // 0x10302cd
+ field public static final int Widget_Material_ListPopupWindow = 16974453; // 0x1030275
+ field public static final int Widget_Material_ListView = 16974454; // 0x1030276
+ field public static final int Widget_Material_ListView_DropDown = 16974455; // 0x1030277
+ field public static final int Widget_Material_MediaRouteButton = 16974456; // 0x1030278
+ field public static final int Widget_Material_PopupMenu = 16974457; // 0x1030279
+ field public static final int Widget_Material_PopupMenu_Overflow = 16974458; // 0x103027a
+ field public static final int Widget_Material_PopupWindow = 16974459; // 0x103027b
+ field public static final int Widget_Material_ProgressBar = 16974460; // 0x103027c
+ field public static final int Widget_Material_ProgressBar_Horizontal = 16974461; // 0x103027d
+ field public static final int Widget_Material_ProgressBar_Large = 16974462; // 0x103027e
+ field public static final int Widget_Material_ProgressBar_Small = 16974463; // 0x103027f
+ field public static final int Widget_Material_ProgressBar_Small_Title = 16974464; // 0x1030280
+ field public static final int Widget_Material_RatingBar = 16974465; // 0x1030281
+ field public static final int Widget_Material_RatingBar_Indicator = 16974466; // 0x1030282
+ field public static final int Widget_Material_RatingBar_Small = 16974467; // 0x1030283
+ field public static final int Widget_Material_ScrollView = 16974468; // 0x1030284
+ field public static final int Widget_Material_SeekBar = 16974469; // 0x1030285
+ field public static final int Widget_Material_SegmentedButton = 16974470; // 0x1030286
+ field public static final int Widget_Material_Spinner = 16974472; // 0x1030288
+ field public static final int Widget_Material_StackView = 16974471; // 0x1030287
+ field public static final int Widget_Material_Tab = 16974473; // 0x1030289
+ field public static final int Widget_Material_TabWidget = 16974474; // 0x103028a
+ field public static final int Widget_Material_TextView = 16974475; // 0x103028b
+ field public static final int Widget_Material_TextView_SpinnerItem = 16974476; // 0x103028c
+ field public static final int Widget_Material_Toolbar = 16974477; // 0x103028d
+ field public static final int Widget_Material_Toolbar_Button_Navigation = 16974478; // 0x103028e
+ field public static final int Widget_Material_WebTextView = 16974479; // 0x103028f
+ field public static final int Widget_Material_WebView = 16974480; // 0x1030290
field public static final int Widget_PopupMenu = 16973958; // 0x1030086
field public static final int Widget_PopupWindow = 16973878; // 0x1030036
field public static final int Widget_ProgressBar = 16973852; // 0x103001c
@@ -2324,126 +2445,6 @@ package android {
field public static final int Widget_ProgressBar_Large_Inverse = 16973916; // 0x103005c
field public static final int Widget_ProgressBar_Small = 16973854; // 0x103001e
field public static final int Widget_ProgressBar_Small_Inverse = 16973917; // 0x103005d
- field public static final int Widget_Quantum = 16974418; // 0x1030252
- field public static final int Widget_Quantum_ActionBar = 16974419; // 0x1030253
- field public static final int Widget_Quantum_ActionBar_Solid = 16974420; // 0x1030254
- field public static final int Widget_Quantum_ActionBar_TabBar = 16974421; // 0x1030255
- field public static final int Widget_Quantum_ActionBar_TabText = 16974422; // 0x1030256
- field public static final int Widget_Quantum_ActionBar_TabView = 16974423; // 0x1030257
- field public static final int Widget_Quantum_ActionButton = 16974424; // 0x1030258
- field public static final int Widget_Quantum_ActionButton_CloseMode = 16974425; // 0x1030259
- field public static final int Widget_Quantum_ActionButton_Overflow = 16974426; // 0x103025a
- field public static final int Widget_Quantum_ActionMode = 16974427; // 0x103025b
- field public static final int Widget_Quantum_AutoCompleteTextView = 16974428; // 0x103025c
- field public static final int Widget_Quantum_Button = 16974429; // 0x103025d
- field public static final int Widget_Quantum_ButtonBar = 16974435; // 0x1030263
- field public static final int Widget_Quantum_ButtonBar_AlertDialog = 16974436; // 0x1030264
- field public static final int Widget_Quantum_Button_Borderless = 16974430; // 0x103025e
- field public static final int Widget_Quantum_Button_Borderless_Small = 16974431; // 0x103025f
- field public static final int Widget_Quantum_Button_Inset = 16974432; // 0x1030260
- field public static final int Widget_Quantum_Button_Small = 16974433; // 0x1030261
- field public static final int Widget_Quantum_Button_Toggle = 16974434; // 0x1030262
- field public static final int Widget_Quantum_CalendarView = 16974437; // 0x1030265
- field public static final int Widget_Quantum_CheckedTextView = 16974438; // 0x1030266
- field public static final int Widget_Quantum_CompoundButton_CheckBox = 16974439; // 0x1030267
- field public static final int Widget_Quantum_CompoundButton_RadioButton = 16974440; // 0x1030268
- field public static final int Widget_Quantum_CompoundButton_Star = 16974441; // 0x1030269
- field public static final int Widget_Quantum_DatePicker = 16974442; // 0x103026a
- field public static final int Widget_Quantum_DropDownItem = 16974443; // 0x103026b
- field public static final int Widget_Quantum_DropDownItem_Spinner = 16974444; // 0x103026c
- field public static final int Widget_Quantum_EditText = 16974445; // 0x103026d
- field public static final int Widget_Quantum_ExpandableListView = 16974446; // 0x103026e
- field public static final int Widget_Quantum_FastScroll = 16974447; // 0x103026f
- field public static final int Widget_Quantum_GridView = 16974448; // 0x1030270
- field public static final int Widget_Quantum_HorizontalScrollView = 16974449; // 0x1030271
- field public static final int Widget_Quantum_ImageButton = 16974450; // 0x1030272
- field public static final int Widget_Quantum_Light = 16974477; // 0x103028d
- field public static final int Widget_Quantum_Light_ActionBar = 16974478; // 0x103028e
- field public static final int Widget_Quantum_Light_ActionBar_Solid = 16974479; // 0x103028f
- field public static final int Widget_Quantum_Light_ActionBar_TabBar = 16974480; // 0x1030290
- field public static final int Widget_Quantum_Light_ActionBar_TabText = 16974481; // 0x1030291
- field public static final int Widget_Quantum_Light_ActionBar_TabView = 16974482; // 0x1030292
- field public static final int Widget_Quantum_Light_ActionButton = 16974483; // 0x1030293
- field public static final int Widget_Quantum_Light_ActionButton_CloseMode = 16974484; // 0x1030294
- field public static final int Widget_Quantum_Light_ActionButton_Overflow = 16974485; // 0x1030295
- field public static final int Widget_Quantum_Light_ActionMode = 16974486; // 0x1030296
- field public static final int Widget_Quantum_Light_AutoCompleteTextView = 16974487; // 0x1030297
- field public static final int Widget_Quantum_Light_Button = 16974488; // 0x1030298
- field public static final int Widget_Quantum_Light_ButtonBar = 16974494; // 0x103029e
- field public static final int Widget_Quantum_Light_ButtonBar_AlertDialog = 16974495; // 0x103029f
- field public static final int Widget_Quantum_Light_Button_Borderless = 16974489; // 0x1030299
- field public static final int Widget_Quantum_Light_Button_Borderless_Small = 16974490; // 0x103029a
- field public static final int Widget_Quantum_Light_Button_Inset = 16974491; // 0x103029b
- field public static final int Widget_Quantum_Light_Button_Small = 16974492; // 0x103029c
- field public static final int Widget_Quantum_Light_Button_Toggle = 16974493; // 0x103029d
- field public static final int Widget_Quantum_Light_CalendarView = 16974496; // 0x10302a0
- field public static final int Widget_Quantum_Light_CheckedTextView = 16974497; // 0x10302a1
- field public static final int Widget_Quantum_Light_CompoundButton_CheckBox = 16974498; // 0x10302a2
- field public static final int Widget_Quantum_Light_CompoundButton_RadioButton = 16974499; // 0x10302a3
- field public static final int Widget_Quantum_Light_CompoundButton_Star = 16974500; // 0x10302a4
- field public static final int Widget_Quantum_Light_DropDownItem = 16974501; // 0x10302a5
- field public static final int Widget_Quantum_Light_DropDownItem_Spinner = 16974502; // 0x10302a6
- field public static final int Widget_Quantum_Light_EditText = 16974503; // 0x10302a7
- field public static final int Widget_Quantum_Light_ExpandableListView = 16974504; // 0x10302a8
- field public static final int Widget_Quantum_Light_FastScroll = 16974505; // 0x10302a9
- field public static final int Widget_Quantum_Light_GridView = 16974506; // 0x10302aa
- field public static final int Widget_Quantum_Light_HorizontalScrollView = 16974507; // 0x10302ab
- field public static final int Widget_Quantum_Light_ImageButton = 16974508; // 0x10302ac
- field public static final int Widget_Quantum_Light_ListPopupWindow = 16974509; // 0x10302ad
- field public static final int Widget_Quantum_Light_ListView = 16974510; // 0x10302ae
- field public static final int Widget_Quantum_Light_ListView_DropDown = 16974511; // 0x10302af
- field public static final int Widget_Quantum_Light_MediaRouteButton = 16974512; // 0x10302b0
- field public static final int Widget_Quantum_Light_PopupMenu = 16974513; // 0x10302b1
- field public static final int Widget_Quantum_Light_PopupMenu_Overflow = 16974514; // 0x10302b2
- field public static final int Widget_Quantum_Light_PopupWindow = 16974515; // 0x10302b3
- field public static final int Widget_Quantum_Light_ProgressBar = 16974516; // 0x10302b4
- field public static final int Widget_Quantum_Light_ProgressBar_Horizontal = 16974517; // 0x10302b5
- field public static final int Widget_Quantum_Light_ProgressBar_Inverse = 16974518; // 0x10302b6
- field public static final int Widget_Quantum_Light_ProgressBar_Large = 16974519; // 0x10302b7
- field public static final int Widget_Quantum_Light_ProgressBar_Large_Inverse = 16974520; // 0x10302b8
- field public static final int Widget_Quantum_Light_ProgressBar_Small = 16974521; // 0x10302b9
- field public static final int Widget_Quantum_Light_ProgressBar_Small_Inverse = 16974522; // 0x10302ba
- field public static final int Widget_Quantum_Light_ProgressBar_Small_Title = 16974523; // 0x10302bb
- field public static final int Widget_Quantum_Light_RatingBar = 16974524; // 0x10302bc
- field public static final int Widget_Quantum_Light_RatingBar_Indicator = 16974525; // 0x10302bd
- field public static final int Widget_Quantum_Light_RatingBar_Small = 16974526; // 0x10302be
- field public static final int Widget_Quantum_Light_ScrollView = 16974527; // 0x10302bf
- field public static final int Widget_Quantum_Light_SeekBar = 16974528; // 0x10302c0
- field public static final int Widget_Quantum_Light_SegmentedButton = 16974529; // 0x10302c1
- field public static final int Widget_Quantum_Light_Spinner = 16974531; // 0x10302c3
- field public static final int Widget_Quantum_Light_StackView = 16974530; // 0x10302c2
- field public static final int Widget_Quantum_Light_Tab = 16974532; // 0x10302c4
- field public static final int Widget_Quantum_Light_TabWidget = 16974533; // 0x10302c5
- field public static final int Widget_Quantum_Light_TextView = 16974534; // 0x10302c6
- field public static final int Widget_Quantum_Light_TextView_SpinnerItem = 16974535; // 0x10302c7
- field public static final int Widget_Quantum_Light_WebTextView = 16974536; // 0x10302c8
- field public static final int Widget_Quantum_Light_WebView = 16974537; // 0x10302c9
- field public static final int Widget_Quantum_ListPopupWindow = 16974451; // 0x1030273
- field public static final int Widget_Quantum_ListView = 16974452; // 0x1030274
- field public static final int Widget_Quantum_ListView_DropDown = 16974453; // 0x1030275
- field public static final int Widget_Quantum_MediaRouteButton = 16974454; // 0x1030276
- field public static final int Widget_Quantum_PopupMenu = 16974455; // 0x1030277
- field public static final int Widget_Quantum_PopupMenu_Overflow = 16974456; // 0x1030278
- field public static final int Widget_Quantum_PopupWindow = 16974457; // 0x1030279
- field public static final int Widget_Quantum_ProgressBar = 16974458; // 0x103027a
- field public static final int Widget_Quantum_ProgressBar_Horizontal = 16974459; // 0x103027b
- field public static final int Widget_Quantum_ProgressBar_Large = 16974460; // 0x103027c
- field public static final int Widget_Quantum_ProgressBar_Small = 16974461; // 0x103027d
- field public static final int Widget_Quantum_ProgressBar_Small_Title = 16974462; // 0x103027e
- field public static final int Widget_Quantum_RatingBar = 16974463; // 0x103027f
- field public static final int Widget_Quantum_RatingBar_Indicator = 16974464; // 0x1030280
- field public static final int Widget_Quantum_RatingBar_Small = 16974465; // 0x1030281
- field public static final int Widget_Quantum_ScrollView = 16974466; // 0x1030282
- field public static final int Widget_Quantum_SeekBar = 16974467; // 0x1030283
- field public static final int Widget_Quantum_SegmentedButton = 16974468; // 0x1030284
- field public static final int Widget_Quantum_Spinner = 16974470; // 0x1030286
- field public static final int Widget_Quantum_StackView = 16974469; // 0x1030285
- field public static final int Widget_Quantum_Tab = 16974471; // 0x1030287
- field public static final int Widget_Quantum_TabWidget = 16974472; // 0x1030288
- field public static final int Widget_Quantum_TextView = 16974473; // 0x1030289
- field public static final int Widget_Quantum_TextView_SpinnerItem = 16974474; // 0x103028a
- field public static final int Widget_Quantum_WebTextView = 16974475; // 0x103028b
- field public static final int Widget_Quantum_WebView = 16974476; // 0x103028c
field public static final int Widget_RatingBar = 16973857; // 0x1030021
field public static final int Widget_ScrollView = 16973869; // 0x103002d
field public static final int Widget_SeekBar = 16973856; // 0x1030020
@@ -2454,6 +2455,8 @@ package android {
field public static final int Widget_TextView = 16973858; // 0x1030022
field public static final int Widget_TextView_PopupMenu = 16973865; // 0x1030029
field public static final int Widget_TextView_SpinnerItem = 16973866; // 0x103002a
+ field public static final int Widget_Toolbar = 16974339; // 0x1030203
+ field public static final int Widget_Toolbar_Button_Navigation = 16974340; // 0x1030204
field public static final int Widget_WebView = 16973875; // 0x1030033
field public static final int l_resource_pad1 = 16974336; // 0x1030200
field public static final int l_resource_pad10 = 16974327; // 0x10301f7
@@ -3332,6 +3335,7 @@ package android.app {
method public void openContextMenu(android.view.View);
method public void openOptionsMenu();
method public void overridePendingTransition(int, int);
+ method public void postponeEnterTransition();
method public void recreate();
method public void registerForContextMenu(android.view.View);
method public final deprecated void removeDialog(int);
@@ -3387,6 +3391,7 @@ package android.app {
method public deprecated void startManagingCursor(android.database.Cursor);
method public boolean startNextMatchingActivity(android.content.Intent);
method public boolean startNextMatchingActivity(android.content.Intent, android.os.Bundle);
+ method public void startPostponedEnterTransition();
method public void startSearch(java.lang.String, boolean, android.os.Bundle, boolean);
method public void stopLockTask();
method public deprecated void stopManagingCursor(android.database.Cursor);
@@ -4481,6 +4486,7 @@ package android.app {
field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -4837,6 +4843,9 @@ package android.app {
field public static final int MENU_KEYCODE = 47; // 0x2f
field public static final java.lang.String QUERY = "query";
field public static final java.lang.String SHORTCUT_MIME_TYPE = "vnd.android.cursor.item/vnd.android.search.suggest";
+ field public static final java.lang.String SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG = "suggest_audio_channel_config";
+ field public static final java.lang.String SUGGEST_COLUMN_CONTENT_TYPE = "suggest_content_type";
+ field public static final java.lang.String SUGGEST_COLUMN_DURATION = "suggest_duration";
field public static final java.lang.String SUGGEST_COLUMN_FLAGS = "suggest_flags";
field public static final java.lang.String SUGGEST_COLUMN_FORMAT = "suggest_format";
field public static final java.lang.String SUGGEST_COLUMN_ICON_1 = "suggest_icon_1";
@@ -4845,13 +4854,22 @@ package android.app {
field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data";
field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id";
field public static final java.lang.String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data";
+ field public static final java.lang.String SUGGEST_COLUMN_IS_LIVE = "suggest_is_live";
field public static final java.lang.String SUGGEST_COLUMN_LAST_ACCESS_HINT = "suggest_last_access_hint";
+ field public static final java.lang.String SUGGEST_COLUMN_PRODUCTION_YEAR = "suggest_production_year";
+ field public static final java.lang.String SUGGEST_COLUMN_PURCHASE_PRICE = "suggest_purchase_price";
field public static final java.lang.String SUGGEST_COLUMN_QUERY = "suggest_intent_query";
+ field public static final java.lang.String SUGGEST_COLUMN_RATING_SCORE = "suggest_rating_score";
+ field public static final java.lang.String SUGGEST_COLUMN_RATING_STYLE = "suggest_rating_style";
+ field public static final java.lang.String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price";
+ field public static final java.lang.String SUGGEST_COLUMN_RESULT_CARD_IMAGE = "suggest_result_card_image";
field public static final java.lang.String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id";
field public static final java.lang.String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = "suggest_spinner_while_refreshing";
field public static final java.lang.String SUGGEST_COLUMN_TEXT_1 = "suggest_text_1";
field public static final java.lang.String SUGGEST_COLUMN_TEXT_2 = "suggest_text_2";
field public static final java.lang.String SUGGEST_COLUMN_TEXT_2_URL = "suggest_text_2_url";
+ field public static final java.lang.String SUGGEST_COLUMN_VIDEO_HEIGHT = "suggest_video_height";
+ field public static final java.lang.String SUGGEST_COLUMN_VIDEO_WIDTH = "suggest_video_width";
field public static final java.lang.String SUGGEST_MIME_TYPE = "vnd.android.cursor.dir/vnd.android.search.suggest";
field public static final java.lang.String SUGGEST_NEVER_MAKE_SHORTCUT = "_-1";
field public static final java.lang.String SUGGEST_PARAMETER_LIMIT = "limit";
@@ -5237,8 +5255,8 @@ package android.app.admin {
field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0
field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION";
field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
- field public static final java.lang.String EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME = "defaultManagedProfileName";
- field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "deviceAdminPackageName";
+ field public static final java.lang.String EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME = "android.app.extra.defaultManagedProfileName";
+ field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.deviceAdminPackageName";
field public static int FLAG_TO_MANAGED_PROFILE;
field public static int FLAG_TO_PRIMARY_USER;
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
@@ -5343,23 +5361,9 @@ package android.app.backup {
}
-package android.app.maintenance {
+package android.app.job {
- public abstract class IdleService extends android.app.Service {
- ctor public IdleService();
- method public final void finishIdle();
- method public final android.os.IBinder onBind(android.content.Intent);
- method public abstract boolean onIdleStart();
- method public abstract void onIdleStop();
- field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_IDLE_SERVICE";
- field public static final java.lang.String SERVICE_INTERFACE = "android.service.idle.IdleService";
- }
-
-}
-
-package android.app.task {
-
- public class Task implements android.os.Parcelable {
+ public class JobInfo implements android.os.Parcelable {
method public int describeContents();
method public int getBackoffPolicy();
method public android.os.PersistableBundle getExtras();
@@ -5377,55 +5381,55 @@ package android.app.task {
field public static final android.os.Parcelable.Creator CREATOR;
}
- public static abstract interface Task.BackoffPolicy {
+ public static abstract interface JobInfo.BackoffPolicy {
field public static final int EXPONENTIAL = 1; // 0x1
field public static final int LINEAR = 0; // 0x0
}
- public static final class Task.Builder {
- ctor public Task.Builder(int, android.content.ComponentName);
- method public android.app.task.Task build();
- method public android.app.task.Task.Builder setBackoffCriteria(long, int);
- method public android.app.task.Task.Builder setExtras(android.os.PersistableBundle);
- method public android.app.task.Task.Builder setMinimumLatency(long);
- method public android.app.task.Task.Builder setOverrideDeadline(long);
- method public android.app.task.Task.Builder setPeriodic(long);
- method public android.app.task.Task.Builder setRequiredNetworkCapabilities(int);
- method public android.app.task.Task.Builder setRequiresCharging(boolean);
- method public android.app.task.Task.Builder setRequiresDeviceIdle(boolean);
+ public static final class JobInfo.Builder {
+ ctor public JobInfo.Builder(int, android.content.ComponentName);
+ method public android.app.job.JobInfo build();
+ method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int);
+ method public android.app.job.JobInfo.Builder setExtras(android.os.PersistableBundle);
+ method public android.app.job.JobInfo.Builder setMinimumLatency(long);
+ method public android.app.job.JobInfo.Builder setOverrideDeadline(long);
+ method public android.app.job.JobInfo.Builder setPeriodic(long);
+ method public android.app.job.JobInfo.Builder setRequiredNetworkCapabilities(int);
+ method public android.app.job.JobInfo.Builder setRequiresCharging(boolean);
+ method public android.app.job.JobInfo.Builder setRequiresDeviceIdle(boolean);
}
- public static abstract interface Task.NetworkType {
+ public static abstract interface JobInfo.NetworkType {
field public static final int ANY = 1; // 0x1
field public static final int NONE = 0; // 0x0
field public static final int UNMETERED = 2; // 0x2
}
- public abstract class TaskManager {
- ctor public TaskManager();
- method public abstract void cancel(int);
- method public abstract void cancelAll();
- method public abstract java.util.List<android.app.task.Task> getAllPendingTasks();
- method public abstract int schedule(android.app.task.Task);
- field public static final int RESULT_FAILURE = 0; // 0x0
- field public static final int RESULT_SUCCESS = 1; // 0x1
- }
-
- public class TaskParams implements android.os.Parcelable {
+ public class JobParameters implements android.os.Parcelable {
method public int describeContents();
method public android.os.PersistableBundle getExtras();
- method public int getTaskId();
+ method public int getJobId();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
- public abstract class TaskService extends android.app.Service {
- ctor public TaskService();
+ public abstract class JobScheduler {
+ ctor public JobScheduler();
+ method public abstract void cancel(int);
+ method public abstract void cancelAll();
+ method public abstract java.util.List<android.app.job.JobInfo> getAllPendingJobs();
+ method public abstract int schedule(android.app.job.JobInfo);
+ field public static final int RESULT_FAILURE = 0; // 0x0
+ field public static final int RESULT_SUCCESS = 1; // 0x1
+ }
+
+ public abstract class JobService extends android.app.Service {
+ ctor public JobService();
+ method public final void jobFinished(android.app.job.JobParameters, boolean);
method public final android.os.IBinder onBind(android.content.Intent);
- method public abstract boolean onStartTask(android.app.task.TaskParams);
- method public abstract boolean onStopTask(android.app.task.TaskParams);
- method public final void taskFinished(android.app.task.TaskParams, boolean);
- field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_TASK_SERVICE";
+ method public abstract boolean onStartJob(android.app.job.JobParameters);
+ method public abstract boolean onStopJob(android.app.job.JobParameters);
+ field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_JOB_SERVICE";
}
}
@@ -6991,11 +6995,9 @@ package android.content {
field public static final java.lang.String DISPLAY_SERVICE = "display";
field public static final java.lang.String DOWNLOAD_SERVICE = "download";
field public static final java.lang.String DROPBOX_SERVICE = "dropbox";
- field public static final java.lang.String FINGERPRINT_SERVICE = "fingerprint";
- field public static final java.lang.String HDMI_CEC_SERVICE = "hdmi_cec";
- field public static final java.lang.String HDMI_CONTROL_SERVICE = "hdmi_control";
field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
field public static final java.lang.String INPUT_SERVICE = "input";
+ field public static final java.lang.String JOB_SCHEDULER_SERVICE = "jobscheduler";
field public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps";
field public static final java.lang.String LAYOUT_INFLATER_SERVICE = "layout_inflater";
@@ -7016,7 +7018,6 @@ package android.content {
field public static final java.lang.String SEARCH_SERVICE = "search";
field public static final java.lang.String SENSOR_SERVICE = "sensor";
field public static final java.lang.String STORAGE_SERVICE = "storage";
- field public static final java.lang.String TASK_SERVICE = "task";
field public static final java.lang.String TELEPHONY_SERVICE = "phone";
field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
field public static final java.lang.String TV_INPUT_SERVICE = "tv_input";
@@ -7387,6 +7388,7 @@ package android.content {
field public static final java.lang.String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED";
field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
+ field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
field public static final java.lang.String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
field public static final java.lang.String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
@@ -7401,7 +7403,6 @@ package android.content {
field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE";
field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK";
field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
- field public static final java.lang.String ACTION_PICK_DIRECTORY = "android.intent.action.PICK_DIRECTORY";
field public static final java.lang.String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
field public static final java.lang.String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
field public static final java.lang.String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY";
@@ -7461,7 +7462,6 @@ package android.content {
field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
field public static final java.lang.String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK";
field public static final java.lang.String CATEGORY_MONKEY = "android.intent.category.MONKEY";
- field public static final java.lang.String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final java.lang.String CATEGORY_OPENABLE = "android.intent.category.OPENABLE";
field public static final java.lang.String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
field public static final java.lang.String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE";
@@ -7533,12 +7533,12 @@ package android.content {
field public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304; // 0x400000
field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
field public static final int FLAG_ACTIVITY_CLEAR_TOP = 67108864; // 0x4000000
- field public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; // 0x80000
+ field public static final deprecated int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; // 0x80000
field public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608; // 0x800000
field public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432; // 0x2000000
field public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; // 0x100000
field public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; // 0x8000000
- field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 268959744; // 0x10080000
+ field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 524288; // 0x80000
field public static final int FLAG_ACTIVITY_NEW_TASK = 268435456; // 0x10000000
field public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536; // 0x10000
field public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824; // 0x40000000
@@ -7877,7 +7877,6 @@ package android.content {
public class SyncRequest implements android.os.Parcelable {
method public int describeContents();
- method public boolean isExpedited();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
@@ -7892,7 +7891,6 @@ package android.content {
method public android.content.SyncRequest.Builder setIgnoreSettings(boolean);
method public android.content.SyncRequest.Builder setManual(boolean);
method public android.content.SyncRequest.Builder setNoRetry(boolean);
- method public android.content.SyncRequest.Builder setPriority(int);
method public android.content.SyncRequest.Builder setSyncAdapter(android.accounts.Account, java.lang.String);
method public android.content.SyncRequest.Builder syncOnce();
method public android.content.SyncRequest.Builder syncPeriodic(long, long);
@@ -7989,6 +7987,7 @@ package android.content.pm {
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2
field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1
+ field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3
field public static final int DOCUMENT_LAUNCH_NONE = 0; // 0x0
field public static final int FLAG_ALLOW_TASK_REPARENTING = 64; // 0x40
field public static final int FLAG_ALWAYS_RETAIN_TASK_STATE = 8; // 0x8
@@ -8029,6 +8028,7 @@ package android.content.pm {
field public int documentLaunchMode;
field public int flags;
field public int launchMode;
+ field public int maxRecents;
field public java.lang.String parentActivityName;
field public java.lang.String permission;
field public int screenOrientation;
@@ -8367,7 +8367,7 @@ package android.content.pm {
field public static final java.lang.String FEATURE_LOCATION = "android.hardware.location";
field public static final java.lang.String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
- field public static final java.lang.String FEATURE_MANAGEDPROFILES = "android.software.managedprofiles";
+ field public static final java.lang.String FEATURE_MANAGED_PROFILES = "android.software.managed_profiles";
field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone";
field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
@@ -11449,6 +11449,7 @@ package android.graphics.drawable {
public class RippleDrawable extends android.graphics.drawable.LayerDrawable {
ctor public RippleDrawable(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public void setColor(android.content.res.ColorStateList);
}
public class RotateDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
@@ -11901,7 +11902,6 @@ package android.hardware {
method public int getMinDelay();
method public java.lang.String getName();
method public float getPower();
- method public java.lang.String getRequiredPermission();
method public float getResolution();
method public java.lang.String getStringType();
method public int getType();
@@ -12146,7 +12146,6 @@ package android.hardware.camera2 {
field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE;
field public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_INPUT_STREAMS;
field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC;
field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW;
@@ -12371,7 +12370,6 @@ package android.hardware.camera2 {
field public static final int REQUEST_AVAILABLE_CAPABILITIES_DNG = 5; // 0x5
field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING = 3; // 0x3
field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 2; // 0x2
- field public static final int REQUEST_AVAILABLE_CAPABILITIES_ZSL = 4; // 0x4
field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0
field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1
field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3
@@ -12670,6 +12668,7 @@ package android.hardware.camera2.params {
}
public final class TonemapCurve {
+ ctor public TonemapCurve(float[], float[], float[]);
method public void copyColorCurve(int, float[], int);
method public android.graphics.PointF getPoint(int, int);
method public int getPointCount(int);
@@ -12714,199 +12713,6 @@ package android.hardware.display {
}
-package android.hardware.hdmi {
-
- public final class HdmiCec {
- method public static java.lang.String getDefaultDeviceName(int);
- method public static int getTypeFromAddress(int);
- method public static boolean isValidAddress(int);
- method public static boolean isValidType(int);
- field public static final int ADDR_AUDIO_SYSTEM = 5; // 0x5
- field public static final int ADDR_BROADCAST = 15; // 0xf
- field public static final int ADDR_INVALID = -1; // 0xffffffff
- field public static final int ADDR_PLAYBACK_1 = 4; // 0x4
- field public static final int ADDR_PLAYBACK_2 = 8; // 0x8
- field public static final int ADDR_PLAYBACK_3 = 11; // 0xb
- field public static final int ADDR_RECORDER_1 = 1; // 0x1
- field public static final int ADDR_RECORDER_2 = 2; // 0x2
- field public static final int ADDR_RECORDER_3 = 9; // 0x9
- field public static final int ADDR_RESERVED_1 = 12; // 0xc
- field public static final int ADDR_RESERVED_2 = 13; // 0xd
- field public static final int ADDR_SPECIFIC_USE = 14; // 0xe
- field public static final int ADDR_TUNER_1 = 3; // 0x3
- field public static final int ADDR_TUNER_2 = 6; // 0x6
- field public static final int ADDR_TUNER_3 = 7; // 0x7
- field public static final int ADDR_TUNER_4 = 10; // 0xa
- field public static final int ADDR_TV = 0; // 0x0
- field public static final int ADDR_UNREGISTERED = 15; // 0xf
- field public static final int DEVICE_AUDIO_SYSTEM = 5; // 0x5
- field public static final int DEVICE_INACTIVE = -1; // 0xffffffff
- field public static final int DEVICE_PLAYBACK = 4; // 0x4
- field public static final int DEVICE_RECORDER = 1; // 0x1
- field public static final int DEVICE_RESERVED = 2; // 0x2
- field public static final int DEVICE_TUNER = 3; // 0x3
- field public static final int DEVICE_TV = 0; // 0x0
- field public static final int MESSAGE_ABORT = 255; // 0xff
- field public static final int MESSAGE_ACTIVE_SOURCE = 130; // 0x82
- field public static final int MESSAGE_CEC_VERSION = 158; // 0x9e
- field public static final int MESSAGE_CLEAR_ANALOG_TIMER = 51; // 0x33
- field public static final int MESSAGE_CLEAR_DIGITAL_TIMER = 153; // 0x99
- field public static final int MESSAGE_CLEAR_EXTERNAL_TIMER = 161; // 0xa1
- field public static final int MESSAGE_DECK_CONTROL = 66; // 0x42
- field public static final int MESSAGE_DECK_STATUS = 27; // 0x1b
- field public static final int MESSAGE_DEVICE_VENDOR_ID = 135; // 0x87
- field public static final int MESSAGE_FEATURE_ABORT = 0; // 0x0
- field public static final int MESSAGE_GET_CEC_VERSION = 159; // 0x9f
- field public static final int MESSAGE_GET_MENU_LANGUAGE = 145; // 0x91
- field public static final int MESSAGE_GIVE_AUDIO_STATUS = 113; // 0x71
- field public static final int MESSAGE_GIVE_DECK_STATUS = 26; // 0x1a
- field public static final int MESSAGE_GIVE_DEVICE_POWER_STATUS = 143; // 0x8f
- field public static final int MESSAGE_GIVE_DEVICE_VENDOR_ID = 140; // 0x8c
- field public static final int MESSAGE_GIVE_OSD_NAME = 70; // 0x46
- field public static final int MESSAGE_GIVE_PHYSICAL_ADDRESS = 131; // 0x83
- field public static final int MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS = 125; // 0x7d
- field public static final int MESSAGE_GIVE_TUNER_DEVICE_STATUS = 8; // 0x8
- field public static final int MESSAGE_IMAGE_VIEW_ON = 4; // 0x4
- field public static final int MESSAGE_INACTIVE_SOURCE = 157; // 0x9d
- field public static final int MESSAGE_INITIATE_ARC = 192; // 0xc0
- field public static final int MESSAGE_MENU_REQUEST = 141; // 0x8d
- field public static final int MESSAGE_MENU_STATUS = 142; // 0x8e
- field public static final int MESSAGE_PLAY = 65; // 0x41
- field public static final int MESSAGE_RECORD_OFF = 11; // 0xb
- field public static final int MESSAGE_RECORD_ON = 9; // 0x9
- field public static final int MESSAGE_RECORD_STATUS = 10; // 0xa
- field public static final int MESSAGE_RECORD_TV_SCREEN = 15; // 0xf
- field public static final int MESSAGE_REPORT_ARC_INITIATED = 193; // 0xc1
- field public static final int MESSAGE_REPORT_ARC_TERMINATED = 194; // 0xc2
- field public static final int MESSAGE_REPORT_AUDIO_STATUS = 122; // 0x7a
- field public static final int MESSAGE_REPORT_PHYSICAL_ADDRESS = 132; // 0x84
- field public static final int MESSAGE_REPORT_POWER_STATUS = 144; // 0x90
- field public static final int MESSAGE_REQUEST_ACTIVE_SOURCE = 133; // 0x85
- field public static final int MESSAGE_REQUEST_ARC_INITIATION = 195; // 0xc3
- field public static final int MESSAGE_REQUEST_ARC_TERMINATION = 196; // 0xc4
- field public static final int MESSAGE_ROUTING_CHANGE = 128; // 0x80
- field public static final int MESSAGE_ROUTING_INFORMATION = 129; // 0x81
- field public static final int MESSAGE_SELECT_ANALOG_SERVICE = 146; // 0x92
- field public static final int MESSAGE_SELECT_DIGITAL_SERVICE = 147; // 0x93
- field public static final int MESSAGE_SET_ANALOG_TIMER = 52; // 0x34
- field public static final int MESSAGE_SET_AUDIO_RATE = 154; // 0x9a
- field public static final int MESSAGE_SET_DIGITAL_TIMER = 151; // 0x97
- field public static final int MESSAGE_SET_EXTERNAL_TIMER = 162; // 0xa2
- field public static final int MESSAGE_SET_MENU_LANGUAGE = 50; // 0x32
- field public static final int MESSAGE_SET_OSD_NAME = 71; // 0x47
- field public static final int MESSAGE_SET_OSD_STRING = 100; // 0x64
- field public static final int MESSAGE_SET_STREAM_PATH = 134; // 0x86
- field public static final int MESSAGE_SET_SYSTEM_AUDIO_MODE = 114; // 0x72
- field public static final int MESSAGE_SET_TIMER_PROGRAM_TITLE = 103; // 0x67
- field public static final int MESSAGE_STANDBY = 54; // 0x36
- field public static final int MESSAGE_SYSTEM_AUDIO_MODE_REQUEST = 112; // 0x70
- field public static final int MESSAGE_SYSTEM_AUDIO_MODE_STATUS = 126; // 0x7e
- field public static final int MESSAGE_TERMINATE_ARC = 197; // 0xc5
- field public static final int MESSAGE_TEXT_VIEW_ON = 13; // 0xd
- field public static final int MESSAGE_TIMER_CLEARED_STATUS = 67; // 0x43
- field public static final int MESSAGE_TIMER_STATUS = 53; // 0x35
- field public static final int MESSAGE_TUNER_DEVICE_STATUS = 7; // 0x7
- field public static final int MESSAGE_TUNER_STEP_DECREMENT = 6; // 0x6
- field public static final int MESSAGE_TUNER_STEP_INCREMENT = 5; // 0x5
- field public static final int MESSAGE_USER_CONTROL_PRESSED = 68; // 0x44
- field public static final int MESSAGE_USER_CONTROL_RELEASED = 69; // 0x45
- field public static final int MESSAGE_VENDOR_COMMAND = 137; // 0x89
- field public static final int MESSAGE_VENDOR_COMMAND_WITH_ID = 160; // 0xa0
- field public static final int MESSAGE_VENDOR_REMOTE_BUTTON_DOWN = 138; // 0x8a
- field public static final int MESSAGE_VENDOR_REMOTE_BUTTON_UP = 139; // 0x8b
- field public static final int POWER_STATUS_ON = 0; // 0x0
- field public static final int POWER_STATUS_STANDBY = 1; // 0x1
- field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2
- field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3
- field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff
- field public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4
- field public static final int RESULT_EXCEPTION = 5; // 0x5
- field public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; // 0x2
- field public static final int RESULT_SUCCESS = 0; // 0x0
- field public static final int RESULT_TARGET_NOT_AVAILABLE = 3; // 0x3
- field public static final int RESULT_TIMEOUT = 1; // 0x1
- field public static final int UNKNOWN_VENDOR_ID = 16777215; // 0xffffff
- }
-
- public final class HdmiCecClient {
- method public boolean isTvOn();
- method public void sendActiveSource();
- method public void sendGiveDevicePowerStatus(int);
- method public void sendImageViewOn();
- method public void sendInactiveSource();
- method public void sendTextViewOn();
- }
-
- public static abstract class HdmiCecClient.Listener {
- ctor public HdmiCecClient.Listener();
- method public void onCableStatusChanged(boolean);
- method public void onMessageReceived(android.hardware.hdmi.HdmiCecMessage);
- }
-
- public final class HdmiCecDeviceInfo implements android.os.Parcelable {
- method public int describeContents();
- method public int getDeviceType();
- method public java.lang.String getDisplayName();
- method public int getLogicalAddress();
- method public int getPhysicalAddress();
- method public int getVendorId();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- }
-
- public final class HdmiCecManager {
- method public android.hardware.hdmi.HdmiCecClient getClient(int, android.hardware.hdmi.HdmiCecClient.Listener);
- }
-
- public final class HdmiCecMessage implements android.os.Parcelable {
- ctor public HdmiCecMessage(int, int, int, byte[]);
- method public int describeContents();
- method public int getDestination();
- method public int getOpcode();
- method public byte[] getParams();
- method public int getSource();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- field public static final byte[] EMPTY_PARAM;
- }
-
- public final class HdmiControlManager {
- method public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
- method public android.hardware.hdmi.HdmiPlaybackClient getPlaybackClient();
- method public android.hardware.hdmi.HdmiTvClient getTvClient();
- method public void removeHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
- }
-
- public static abstract interface HdmiControlManager.HotplugEventListener {
- method public abstract void onReceived(android.hardware.hdmi.HdmiHotplugEvent);
- }
-
- public final class HdmiHotplugEvent implements android.os.Parcelable {
- method public int describeContents();
- method public int getPort();
- method public boolean isConnected();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- }
-
- public final class HdmiPlaybackClient {
- method public void oneTouchPlay(android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback);
- method public void queryDisplayStatus(android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback);
- }
-
- public static abstract interface HdmiPlaybackClient.DisplayStatusCallback {
- method public abstract void onComplete(int);
- }
-
- public static abstract interface HdmiPlaybackClient.OneTouchPlayCallback {
- method public abstract void onComplete(int);
- }
-
- public final class HdmiTvClient {
- }
-
-}
-
package android.hardware.input {
public final class InputManager {
@@ -15824,6 +15630,8 @@ package android.media.session {
package android.media.tv {
public final class TvContract {
+ method public static final android.net.Uri buildChannelLogoUri(long);
+ method public static final android.net.Uri buildChannelLogoUri(android.net.Uri);
method public static final android.net.Uri buildChannelUri(long);
method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName);
method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName, boolean);
@@ -15859,7 +15667,7 @@ package android.media.tv {
field public static final int SERVICE_TYPE_OTHER = 0; // 0x0
field public static final int TYPE_1SEG = 263168; // 0x40400
field public static final int TYPE_ATSC_C = 197120; // 0x30200
- field public static final int TYPE_ATSC_M_H = 197120; // 0x30200
+ field public static final int TYPE_ATSC_M_H = 197376; // 0x30300
field public static final int TYPE_ATSC_T = 196608; // 0x30000
field public static final int TYPE_CMMB = 327936; // 0x50100
field public static final int TYPE_DTMB = 327680; // 0x50000
@@ -15881,6 +15689,10 @@ package android.media.tv {
field public static final int TYPE_T_DMB = 393216; // 0x60000
}
+ public static final class TvContract.Channels.Logo {
+ field public static final java.lang.String CONTENT_DIRECTORY = "logo";
+ }
+
public static final class TvContract.Programs implements android.media.tv.TvContract.BaseTvColumns {
field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
@@ -15889,8 +15701,10 @@ package android.media.tv {
field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
field public static final java.lang.String COLUMN_TITLE = "title";
field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
@@ -15916,35 +15730,23 @@ package android.media.tv {
public final class TvInputInfo implements android.os.Parcelable {
method public int describeContents();
- method public android.content.ComponentName getComponent();
method public java.lang.String getId();
method public android.content.Intent getIntentForSettingsActivity();
method public android.content.Intent getIntentForSetupActivity();
- method public java.lang.String getPackageName();
- method public java.lang.String getServiceName();
+ method public android.content.pm.ServiceInfo getServiceInfo();
+ method public int getType();
method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager);
method public void writeToParcel(android.os.Parcel, int);
field public static final java.lang.String EXTRA_SERVICE_NAME = "serviceName";
+ field public static final int TYPE_HDMI = 1; // 0x1
+ field public static final int TYPE_PASSTHROUGH = 3; // 0x3
+ field public static final int TYPE_TUNER = 2; // 0x2
+ field public static final int TYPE_VIRTUAL = 0; // 0x0
}
public final class TvInputManager {
- method public void createSession(java.lang.String, android.media.tv.TvInputManager.SessionCallback, android.os.Handler);
method public boolean getAvailability(java.lang.String);
method public java.util.List<android.media.tv.TvInputInfo> getTvInputList();
- method public void registerListener(java.lang.String, android.media.tv.TvInputManager.TvInputListener, android.os.Handler);
- method public void unregisterListener(java.lang.String, android.media.tv.TvInputManager.TvInputListener);
- }
-
- public static final class TvInputManager.Session {
- method public void release();
- method public void setVolume(float);
- method public void tune(android.net.Uri);
- }
-
- public static abstract class TvInputManager.SessionCallback {
- ctor public TvInputManager.SessionCallback();
- method public void onSessionCreated(android.media.tv.TvInputManager.Session);
- method public void onSessionReleased(android.media.tv.TvInputManager.Session);
}
public static abstract class TvInputManager.TvInputListener {
@@ -15955,14 +15757,13 @@ package android.media.tv {
public abstract class TvInputService extends android.app.Service {
ctor public TvInputService();
method public final android.os.IBinder onBind(android.content.Intent);
- method public abstract android.media.tv.TvInputService.TvInputSessionImpl onCreateSession();
- method public final void setAvailable(boolean);
+ method public abstract android.media.tv.TvInputService.Session onCreateSession();
field public static final java.lang.String SERVICE_INTERFACE = "android.media.tv.TvInputService";
field public static final java.lang.String SERVICE_META_DATA = "android.media.tv.input";
}
- public abstract class TvInputService.TvInputSessionImpl implements android.view.KeyEvent.Callback {
- ctor public TvInputService.TvInputSessionImpl();
+ public abstract class TvInputService.Session implements android.view.KeyEvent.Callback {
+ ctor public TvInputService.Session();
method public android.view.View onCreateOverlayView();
method public boolean onGenericMotionEvent(android.view.MotionEvent);
method public boolean onKeyDown(int, android.view.KeyEvent);
@@ -15970,29 +15771,39 @@ package android.media.tv {
method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
method public boolean onKeyUp(int, android.view.KeyEvent);
method public abstract void onRelease();
+ method public abstract void onSetStreamVolume(float);
method public abstract boolean onSetSurface(android.view.Surface);
- method public abstract void onSetVolume(float);
method public boolean onTouchEvent(android.view.MotionEvent);
method public boolean onTrackballEvent(android.view.MotionEvent);
method public abstract boolean onTune(android.net.Uri);
method public void setOverlayViewEnabled(boolean);
}
- public class TvView extends android.view.SurfaceView {
+ public class TvView extends android.view.ViewGroup {
ctor public TvView(android.content.Context);
ctor public TvView(android.content.Context, android.util.AttributeSet);
ctor public TvView(android.content.Context, android.util.AttributeSet, int);
- method public void bindTvInput(java.lang.String, android.media.tv.TvInputManager.SessionCallback);
method public boolean dispatchUnhandledInputEvent(android.view.InputEvent);
+ method protected void onLayout(boolean, int, int, int, int);
method public boolean onUnhandledInputEvent(android.view.InputEvent);
+ method public void reset();
method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener);
- method public void unbindTvInput();
+ method public void setStreamVolume(float);
+ method public void setTvInputListener(android.media.tv.TvView.TvInputListener);
+ method public void tune(java.lang.String, android.net.Uri);
+ field public static final int ERROR_BUSY = 0; // 0x0
+ field public static final int ERROR_TV_INPUT_DISCONNECTED = 1; // 0x1
}
public static abstract interface TvView.OnUnhandledInputEventListener {
method public abstract boolean onUnhandledInputEvent(android.view.InputEvent);
}
+ public static abstract class TvView.TvInputListener {
+ ctor public TvView.TvInputListener();
+ method public void onError(java.lang.String, int);
+ }
+
}
package android.mtp {
@@ -16132,6 +15943,7 @@ package android.net {
method public android.net.NetworkCapabilities getNetworkCapabilities(android.net.Network);
method public android.net.NetworkInfo getNetworkInfo(int);
method public deprecated int getNetworkPreference();
+ method public static android.net.Network getProcessDefaultNetwork();
method public boolean isActiveNetworkMetered();
method public boolean isNetworkActive();
method public static boolean isNetworkTypeValid(int);
@@ -16143,6 +15955,7 @@ package android.net {
method public android.net.NetworkRequest requestNetwork(android.net.NetworkCapabilities, android.app.PendingIntent);
method public deprecated boolean requestRouteToHost(int, int);
method public deprecated void setNetworkPreference(int);
+ method public static boolean setProcessDefaultNetwork(android.net.Network);
method public deprecated int startUsingNetworkFeature(int, java.lang.String);
method public deprecated int stopUsingNetworkFeature(int, java.lang.String);
method public void unregisterNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
@@ -16217,35 +16030,17 @@ package android.net {
public class LinkProperties implements android.os.Parcelable {
ctor public LinkProperties();
ctor public LinkProperties(android.net.LinkProperties);
- method public void addDns(java.net.InetAddress);
- method public boolean addLinkAddress(android.net.LinkAddress);
- method public void addRoute(android.net.RouteInfo);
- method public void clear();
method public int describeContents();
- method public java.util.Collection<java.lang.String> getAllInterfaceNames();
- method public java.util.Collection<java.net.InetAddress> getDnses();
+ method public java.util.List<java.net.InetAddress> getDnsServers();
method public java.lang.String getDomains();
method public android.net.ProxyInfo getHttpProxy();
method public java.lang.String getInterfaceName();
- method public java.util.Collection<android.net.LinkAddress> getLinkAddresses();
- method public java.util.Collection<android.net.RouteInfo> getRoutes();
- method public boolean hasIPv4Address();
- method public boolean hasIPv6Address();
- method public boolean removeLinkAddress(android.net.LinkAddress);
- method public void setDomains(java.lang.String);
- method public void setHttpProxy(android.net.ProxyInfo);
- method public void setInterfaceName(java.lang.String);
- method public void setLinkAddresses(java.util.Collection<android.net.LinkAddress>);
+ method public java.util.List<android.net.LinkAddress> getLinkAddresses();
+ method public java.util.List<android.net.RouteInfo> getRoutes();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
- public static class LinkProperties.CompareResult {
- ctor public LinkProperties.CompareResult();
- field public java.util.Collection added;
- field public java.util.Collection removed;
- }
-
public class LocalServerSocket {
ctor public LocalServerSocket(java.lang.String) throws java.io.IOException;
ctor public LocalServerSocket(java.io.FileDescriptor) throws java.io.IOException;
@@ -16315,13 +16110,10 @@ package android.net {
}
public class Network implements android.os.Parcelable {
- method public void bindProcess();
method public int describeContents();
method public java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException;
method public java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException;
- method public static android.net.Network getProcessBoundNetwork();
- method public javax.net.SocketFactory socketFactory();
- method public static void unbindProcess();
+ method public javax.net.SocketFactory getSocketFactory();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
@@ -20524,7 +20316,8 @@ package android.os {
public class BatteryManager {
ctor public BatteryManager();
- method public android.os.BatteryProperty getProperty(int) throws android.os.RemoteException;
+ method public int getIntProperty(int);
+ method public long getLongProperty(int);
field public static final int BATTERY_HEALTH_COLD = 7; // 0x7
field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4
field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2
@@ -20535,6 +20328,11 @@ package android.os {
field public static final int BATTERY_PLUGGED_AC = 1; // 0x1
field public static final int BATTERY_PLUGGED_USB = 2; // 0x2
field public static final int BATTERY_PLUGGED_WIRELESS = 4; // 0x4
+ field public static final int BATTERY_PROPERTY_CAPACITY = 4; // 0x4
+ field public static final int BATTERY_PROPERTY_CHARGE_COUNTER = 1; // 0x1
+ field public static final int BATTERY_PROPERTY_CURRENT_AVERAGE = 3; // 0x3
+ field public static final int BATTERY_PROPERTY_CURRENT_NOW = 2; // 0x2
+ field public static final int BATTERY_PROPERTY_ENERGY_COUNTER = 5; // 0x5
field public static final int BATTERY_STATUS_CHARGING = 2; // 0x2
field public static final int BATTERY_STATUS_DISCHARGING = 3; // 0x3
field public static final int BATTERY_STATUS_FULL = 5; // 0x5
@@ -20552,20 +20350,6 @@ package android.os {
field public static final java.lang.String EXTRA_VOLTAGE = "voltage";
}
- public class BatteryProperty implements android.os.Parcelable {
- method public int describeContents();
- method public int getInt();
- method public long getLong();
- method public void readFromParcel(android.os.Parcel);
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CAPACITY = 4; // 0x4
- field public static final int CHARGE_COUNTER = 1; // 0x1
- field public static final android.os.Parcelable.Creator CREATOR;
- field public static final int CURRENT_AVERAGE = 3; // 0x3
- field public static final int CURRENT_NOW = 2; // 0x2
- field public static final int ENERGY_COUNTER = 5; // 0x5
- }
-
public class Binder implements android.os.IBinder {
ctor public Binder();
method public void attachInterface(android.os.IInterface, java.lang.String);
@@ -21325,12 +21109,14 @@ package android.os {
public final class PowerManager {
method public void goToSleep(long);
method public boolean isInteractive();
+ method public boolean isPowerSaveMode();
method public deprecated boolean isScreenOn();
method public android.os.PowerManager.WakeLock newWakeLock(int, java.lang.String);
method public void reboot(java.lang.String);
method public void userActivity(long, boolean);
method public void wakeUp(long);
field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000
+ field public static final java.lang.String ACTION_POWER_SAVE_MODE_CHANGED = "android.os.action.POWER_SAVE_MODE_CHANGED";
field public static final deprecated int FULL_WAKE_LOCK = 26; // 0x1a
field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
@@ -23833,21 +23619,21 @@ package android.provider {
public final class DocumentsContract {
method public static android.net.Uri buildChildDocumentsUri(java.lang.String, java.lang.String);
- method public static android.net.Uri buildChildDocumentsViaUri(android.net.Uri, java.lang.String);
+ method public static android.net.Uri buildChildDocumentsUriUsingTree(android.net.Uri, java.lang.String);
method public static android.net.Uri buildDocumentUri(java.lang.String, java.lang.String);
- method public static android.net.Uri buildDocumentViaUri(android.net.Uri, java.lang.String);
+ method public static android.net.Uri buildDocumentUriUsingTree(android.net.Uri, java.lang.String);
method public static android.net.Uri buildRecentDocumentsUri(java.lang.String, java.lang.String);
method public static android.net.Uri buildRootUri(java.lang.String, java.lang.String);
method public static android.net.Uri buildRootsUri(java.lang.String);
method public static android.net.Uri buildSearchDocumentsUri(java.lang.String, java.lang.String, java.lang.String);
- method public static android.net.Uri buildViaUri(java.lang.String, java.lang.String);
+ method public static android.net.Uri buildTreeDocumentUri(java.lang.String, java.lang.String);
method public static android.net.Uri createDocument(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String);
method public static boolean deleteDocument(android.content.ContentResolver, android.net.Uri);
method public static java.lang.String getDocumentId(android.net.Uri);
method public static android.graphics.Bitmap getDocumentThumbnail(android.content.ContentResolver, android.net.Uri, android.graphics.Point, android.os.CancellationSignal);
method public static java.lang.String getRootId(android.net.Uri);
method public static java.lang.String getSearchDocumentsQuery(android.net.Uri);
- method public static java.lang.String getViaDocumentId(android.net.Uri);
+ method public static java.lang.String getTreeDocumentId(android.net.Uri);
method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
method public static android.net.Uri renameDocument(android.content.ContentResolver, android.net.Uri, java.lang.String);
field public static final java.lang.String EXTRA_ERROR = "error";
@@ -23886,7 +23672,7 @@ package android.provider {
field public static final java.lang.String COLUMN_TITLE = "title";
field public static final int FLAG_LOCAL_ONLY = 2; // 0x2
field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
- field public static final int FLAG_SUPPORTS_DIR_SELECTION = 16; // 0x10
+ field public static final int FLAG_SUPPORTS_IS_CHILD = 16; // 0x10
field public static final int FLAG_SUPPORTS_RECENTS = 4; // 0x4
field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8
}
@@ -25490,7 +25276,7 @@ package android.renderscript {
method public void contextDump();
method public static android.renderscript.RenderScript create(android.content.Context);
method public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType);
- method public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType, long);
+ method public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType, int);
method public void destroy();
method public void finish();
method public final android.content.Context getApplicationContext();
@@ -25500,9 +25286,9 @@ package android.renderscript {
method public void setErrorHandler(android.renderscript.RenderScript.RSErrorHandler);
method public void setMessageHandler(android.renderscript.RenderScript.RSMessageHandler);
method public void setPriority(android.renderscript.RenderScript.Priority);
- field public static final long CREATE_FLAG_LOW_LATENCY = 2L; // 0x2L
- field public static final long CREATE_FLAG_LOW_POWER = 4L; // 0x4L
- field public static final long CREATE_FLAG_NONE = 0L; // 0x0L
+ field public static final int CREATE_FLAG_LOW_LATENCY = 2; // 0x2
+ field public static final int CREATE_FLAG_LOW_POWER = 4; // 0x4
+ field public static final int CREATE_FLAG_NONE = 0; // 0x0
}
public static final class RenderScript.ContextType extends java.lang.Enum {
@@ -26016,36 +25802,6 @@ package android.service.dreams {
}
-package android.service.fingerprint {
-
- public class FingerprintManager {
- ctor public FingerprintManager(android.content.Context);
- method public void enroll(long);
- method public boolean enrolledAndEnabled();
- method public void remove(int);
- method public void startListening(android.service.fingerprint.FingerprintManagerReceiver);
- method public void stopListening();
- field public static final int FINGERPRINT_ERROR = -1; // 0xffffffff
- field public static final int FINGERPRINT_ERROR_BAD_CAPTURE = 2; // 0x2
- field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
- field public static final int FINGERPRINT_ERROR_NO_RECEIVER = -10; // 0xfffffff6
- field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
- field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
- field public static final int FINGERPRINT_SCANNED = 1; // 0x1
- field public static final int FINGERPRINT_TEMPLATE_ENROLLING = 2; // 0x2
- field public static final int FINGERPRINT_TEMPLATE_REMOVED = 4; // 0x4
- }
-
- public class FingerprintManagerReceiver {
- ctor public FingerprintManagerReceiver();
- method public void onEnrollResult(int, int);
- method public void onError(int);
- method public void onRemoved(int);
- method public void onScanned(int, int);
- }
-
-}
-
package android.service.notification {
public abstract class NotificationListenerService extends android.app.Service {
@@ -26055,21 +25811,28 @@ package android.service.notification {
method public final void cancelNotification(java.lang.String);
method public final void cancelNotifications(java.lang.String[]);
method public android.service.notification.StatusBarNotification[] getActiveNotifications();
- method public android.service.notification.NotificationListenerService.Ranking getCurrentRanking();
+ method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
method public android.os.IBinder onBind(android.content.Intent);
method public void onListenerConnected();
- method public abstract void onNotificationPosted(android.service.notification.StatusBarNotification);
- method public void onNotificationRankingUpdate();
- method public abstract void onNotificationRemoved(android.service.notification.StatusBarNotification);
+ method public void onNotificationPosted(android.service.notification.StatusBarNotification);
+ method public void onNotificationPosted(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
+ method public void onNotificationRankingUpdate(android.service.notification.NotificationListenerService.RankingMap);
+ method public void onNotificationRemoved(android.service.notification.StatusBarNotification);
+ method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationListenerService";
}
- public static class NotificationListenerService.Ranking implements android.os.Parcelable {
+ public static class NotificationListenerService.Ranking {
+ method public java.lang.String getKey();
+ method public int getRank();
+ method public boolean isAmbient();
+ method public boolean isInterceptedByDoNotDisturb();
+ }
+
+ public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
method public int describeContents();
method public java.lang.String[] getOrderedKeys();
- method public int getRank(java.lang.String);
- method public boolean isAmbient(java.lang.String);
- method public boolean isInterceptedByDoNotDisturb(java.lang.String);
+ method public android.service.notification.NotificationListenerService.Ranking getRanking(java.lang.String);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
@@ -29854,20 +29617,12 @@ package android.transition {
method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
method public void setPropagationSpeed(float);
method public void setSide(int);
- field public static final int BOTTOM = 3; // 0x3
- field public static final int LEFT = 0; // 0x0
- field public static final int RIGHT = 2; // 0x2
- field public static final int TOP = 1; // 0x1
}
public class Slide extends android.transition.Visibility {
ctor public Slide();
ctor public Slide(int);
method public void setSlideEdge(int);
- field public static final int BOTTOM = 3; // 0x3
- field public static final int LEFT = 0; // 0x0
- field public static final int RIGHT = 2; // 0x2
- field public static final int TOP = 1; // 0x1
}
public abstract class Transition implements java.lang.Cloneable {
@@ -29921,7 +29676,7 @@ package android.transition {
public static abstract class Transition.EpicenterCallback {
ctor public Transition.EpicenterCallback();
- method public abstract android.graphics.Rect getEpicenter(android.transition.Transition);
+ method public abstract android.graphics.Rect onGetEpicenter(android.transition.Transition);
}
public static abstract interface Transition.TransitionListener {
@@ -30431,12 +30186,26 @@ package android.util {
method public static android.util.Range<T> create(T, T);
method public T getLower();
method public T getUpper();
+ method public boolean inRange(T);
}
- public final class Rational {
+ public final class Rational extends java.lang.Number implements java.lang.Comparable {
ctor public Rational(int, int);
+ method public int compareTo(android.util.Rational);
+ method public double doubleValue();
+ method public float floatValue();
method public int getDenominator();
method public int getNumerator();
+ method public int intValue();
+ method public boolean isFinite();
+ method public boolean isInfinite();
+ method public boolean isNaN();
+ method public boolean isZero();
+ method public long longValue();
+ field public static final android.util.Rational NEGATIVE_INFINITY;
+ field public static final android.util.Rational NaN;
+ field public static final android.util.Rational POSITIVE_INFINITY;
+ field public static final android.util.Rational ZERO;
}
public final class Size {
@@ -31941,7 +31710,6 @@ package android.view {
method protected int computeVerticalScrollRange();
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
method public void createContextMenu(android.view.ContextMenu);
- method public final android.animation.ValueAnimator createRevealAnimator(int, int, float, float);
method public void destroyDrawingCache();
method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
method public void dispatchConfigurationChanged(android.content.res.Configuration);
@@ -32589,6 +32357,10 @@ package android.view {
method public abstract boolean onTouch(android.view.View, android.view.MotionEvent);
}
+ public class ViewAnimationUtils {
+ method public static final android.animation.ValueAnimator createCircularReveal(android.view.View, int, int, float, float);
+ }
+
public class ViewConfiguration {
ctor public deprecated ViewConfiguration();
method public static android.view.ViewConfiguration get(android.content.Context);
diff --git a/cmds/settings/src/com/android/commands/settings/SettingsCmd.java b/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
index dce0a758b0b5..e6847a9946cf 100644
--- a/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
+++ b/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
@@ -20,6 +20,7 @@ import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.IActivityManager.ContentProviderHolder;
import android.content.IContentProvider;
+import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
@@ -33,7 +34,8 @@ public final class SettingsCmd {
enum CommandVerb {
UNSPECIFIED,
GET,
- PUT
+ PUT,
+ DELETE
}
static String[] mArgs;
@@ -74,6 +76,8 @@ public final class SettingsCmd {
mVerb = CommandVerb.GET;
} else if ("put".equalsIgnoreCase(arg)) {
mVerb = CommandVerb.PUT;
+ } else if ("delete".equalsIgnoreCase(arg)) {
+ mVerb = CommandVerb.DELETE;
} else {
// invalid
System.err.println("Invalid command: " + arg);
@@ -87,7 +91,7 @@ public final class SettingsCmd {
break; // invalid
}
mTable = arg.toLowerCase();
- } else if (mVerb == CommandVerb.GET) {
+ } else if (mVerb == CommandVerb.GET || mVerb == CommandVerb.DELETE) {
mKey = arg;
if (mNextArg >= mArgs.length) {
valid = true;
@@ -136,6 +140,10 @@ public final class SettingsCmd {
case PUT:
putForUser(provider, mUser, mTable, mKey, mValue);
break;
+ case DELETE:
+ System.out.println("Deleted "
+ + deleteForUser(provider, mUser, mTable, mKey) + " rows");
+ break;
default:
System.err.println("Unspecified command");
break;
@@ -211,9 +219,31 @@ public final class SettingsCmd {
}
}
+ int deleteForUser(IContentProvider provider, int userHandle,
+ final String table, final String key) {
+ Uri targetUri;
+ if ("system".equals(table)) targetUri = Settings.System.getUriFor(key);
+ else if ("secure".equals(table)) targetUri = Settings.Secure.getUriFor(key);
+ else if ("global".equals(table)) targetUri = Settings.Global.getUriFor(key);
+ else {
+ System.err.println("Invalid table; no delete performed");
+ throw new IllegalArgumentException("Invalid table " + table);
+ }
+
+ int num = 0;
+ try {
+ num = provider.delete(null, targetUri, null, null);
+ } catch (RemoteException e) {
+ System.err.println("Can't clear key " + key + " in " + table + " for user "
+ + userHandle);
+ }
+ return num;
+ }
+
private static void printUsage() {
System.err.println("usage: settings [--user NUM] get namespace key");
System.err.println(" settings [--user NUM] put namespace key value");
+ System.err.println(" settings [--user NUM] delete namespace key");
System.err.println("\n'namespace' is one of {system, secure, global}, case-insensitive");
System.err.println("If '--user NUM' is not given, the operations are performed on the owner user.");
}
diff --git a/core/java/android/animation/ObjectAnimator.java b/core/java/android/animation/ObjectAnimator.java
index 130754ed59ea..89475503eab6 100644
--- a/core/java/android/animation/ObjectAnimator.java
+++ b/core/java/android/animation/ObjectAnimator.java
@@ -16,11 +16,14 @@
package android.animation;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.graphics.Path;
import android.graphics.PointF;
import android.util.Log;
import android.util.Property;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
/**
@@ -41,10 +44,15 @@ import java.util.ArrayList;
*
*/
public final class ObjectAnimator extends ValueAnimator {
+ private static final String LOG_TAG = "ObjectAnimator";
+
private static final boolean DBG = false;
- // The target object on which the property exists, set in the constructor
- private Object mTarget;
+ /**
+ * A weak reference to the target object on which the property exists, set
+ * in the constructor. We'll cancel the animation if this goes away.
+ */
+ private WeakReference<Object> mTarget;
private String mPropertyName;
@@ -78,7 +86,7 @@ public final class ObjectAnimator extends ValueAnimator {
*
* @param propertyName The name of the property being animated. Should not be null.
*/
- public void setPropertyName(String propertyName) {
+ public void setPropertyName(@NonNull String propertyName) {
// mValues could be null if this is being constructed piecemeal. Just record the
// propertyName to be used later when setValues() is called if so.
if (mValues != null) {
@@ -100,7 +108,7 @@ public final class ObjectAnimator extends ValueAnimator {
*
* @param property The property being animated. Should not be null.
*/
- public void setProperty(Property property) {
+ public void setProperty(@NonNull Property property) {
// mValues could be null if this is being constructed piecemeal. Just record the
// propertyName to be used later when setValues() is called if so.
if (mValues != null) {
@@ -134,6 +142,7 @@ public final class ObjectAnimator extends ValueAnimator {
* object (if there was just one) or a comma-separated list of all of the
* names (if there are more than one).</p>
*/
+ @Nullable
public String getPropertyName() {
String propertyName = null;
if (mPropertyName != null) {
@@ -176,7 +185,7 @@ public final class ObjectAnimator extends ValueAnimator {
* @param propertyName The name of the property being animated.
*/
private ObjectAnimator(Object target, String propertyName) {
- mTarget = target;
+ setTarget(target);
setPropertyName(propertyName);
}
@@ -187,7 +196,7 @@ public final class ObjectAnimator extends ValueAnimator {
* @param property The property being animated.
*/
private <T> ObjectAnimator(T target, Property<T, ?> property) {
- mTarget = target;
+ setTarget(target);
setProperty(property);
}
@@ -574,8 +583,9 @@ public final class ObjectAnimator extends ValueAnimator {
* @param path The <code>Path</code> to animate values along.
* @return An ObjectAnimator object that is set up to animate along <code>path</code>.
*/
+ @NonNull
public static ObjectAnimator ofObject(Object target, String propertyName,
- TypeConverter<PointF, ?> converter, Path path) {
+ @Nullable TypeConverter<PointF, ?> converter, Path path) {
PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(propertyName, converter, path);
return ofPropertyValuesHolder(target, pvh);
}
@@ -595,6 +605,7 @@ public final class ObjectAnimator extends ValueAnimator {
* @param values A set of values that the animation will animate between over time.
* @return An ObjectAnimator object that is set up to animate between the given values.
*/
+ @NonNull
public static <T, V> ObjectAnimator ofObject(T target, Property<T, V> property,
TypeEvaluator<V> evaluator, V... values) {
ObjectAnimator anim = new ObjectAnimator(target, property);
@@ -622,6 +633,7 @@ public final class ObjectAnimator extends ValueAnimator {
* @param values A set of values that the animation will animate between over time.
* @return An ObjectAnimator object that is set up to animate between the given values.
*/
+ @NonNull
public static <T, V, P> ObjectAnimator ofObject(T target, Property<T, P> property,
TypeConverter<V, P> converter, TypeEvaluator<V> evaluator, V... values) {
PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(property, converter, evaluator,
@@ -644,8 +656,9 @@ public final class ObjectAnimator extends ValueAnimator {
* @param path The <code>Path</code> to animate values along.
* @return An ObjectAnimator object that is set up to animate along <code>path</code>.
*/
- public static <T, V> ObjectAnimator ofObject(T target, Property<T, V> property,
- TypeConverter<PointF, V> converter, Path path) {
+ @NonNull
+ public static <T, V> ObjectAnimator ofObject(T target, @NonNull Property<T, V> property,
+ @Nullable TypeConverter<PointF, V> converter, Path path) {
PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(property, converter, path);
return ofPropertyValuesHolder(target, pvh);
}
@@ -667,10 +680,11 @@ public final class ObjectAnimator extends ValueAnimator {
* over time.
* @return An ObjectAnimator object that is set up to animate between the given values.
*/
+ @NonNull
public static ObjectAnimator ofPropertyValuesHolder(Object target,
PropertyValuesHolder... values) {
ObjectAnimator anim = new ObjectAnimator();
- anim.mTarget = target;
+ anim.setTarget(target);
anim.setValues(values);
return anim;
}
@@ -736,10 +750,10 @@ public final class ObjectAnimator extends ValueAnimator {
mAutoCancel = cancel;
}
- private boolean hasSameTargetAndProperties(Animator anim) {
+ private boolean hasSameTargetAndProperties(@Nullable Animator anim) {
if (anim instanceof ObjectAnimator) {
PropertyValuesHolder[] theirValues = ((ObjectAnimator) anim).getValues();
- if (((ObjectAnimator) anim).getTarget() == mTarget &&
+ if (((ObjectAnimator) anim).getTarget() == getTarget() &&
mValues.length == theirValues.length) {
for (int i = 0; i < mValues.length; ++i) {
PropertyValuesHolder pvhMine = mValues[i];
@@ -789,11 +803,11 @@ public final class ObjectAnimator extends ValueAnimator {
}
}
if (DBG) {
- Log.d("ObjectAnimator", "Anim target, duration: " + mTarget + ", " + getDuration());
+ Log.d(LOG_TAG, "Anim target, duration: " + getTarget() + ", " + getDuration());
for (int i = 0; i < mValues.length; ++i) {
PropertyValuesHolder pvh = mValues[i];
ArrayList<Keyframe> keyframes = pvh.mKeyframeSet.mKeyframes;
- Log.d("ObjectAnimator", " Values[" + i + "]: " +
+ Log.d(LOG_TAG, " Values[" + i + "]: " +
pvh.getPropertyName() + ", " + keyframes.get(0).getValue() + ", " +
keyframes.get(pvh.mKeyframeSet.mNumKeyframes - 1).getValue());
}
@@ -818,9 +832,12 @@ public final class ObjectAnimator extends ValueAnimator {
if (!mInitialized) {
// mValueType may change due to setter/getter setup; do this before calling super.init(),
// which uses mValueType to set up the default type evaluator.
- int numValues = mValues.length;
- for (int i = 0; i < numValues; ++i) {
- mValues[i].setupSetterAndGetter(mTarget);
+ final Object target = getTarget();
+ if (target != null) {
+ final int numValues = mValues.length;
+ for (int i = 0; i < numValues; ++i) {
+ mValues[i].setupSetterAndGetter(target);
+ }
}
super.initAnimation();
}
@@ -836,6 +853,7 @@ public final class ObjectAnimator extends ValueAnimator {
* <code>ObjectAnimator.ofInt(target, propertyName, 0, 10).setDuration(500).start()</code>.
*/
@Override
+ @NonNull
public ObjectAnimator setDuration(long duration) {
super.setDuration(duration);
return this;
@@ -847,8 +865,9 @@ public final class ObjectAnimator extends ValueAnimator {
*
* @return The object being animated
*/
+ @Nullable
public Object getTarget() {
- return mTarget;
+ return mTarget == null ? null : mTarget.get();
}
/**
@@ -857,10 +876,10 @@ public final class ObjectAnimator extends ValueAnimator {
* @param target The object being animated
*/
@Override
- public void setTarget(Object target) {
- if (mTarget != target) {
- final Object oldTarget = mTarget;
- mTarget = target;
+ public void setTarget(@Nullable Object target) {
+ final Object oldTarget = getTarget();
+ if (oldTarget != target) {
+ mTarget = target == null ? null : new WeakReference<Object>(target);
if (oldTarget != null && target != null && oldTarget.getClass() == target.getClass()) {
return;
}
@@ -872,18 +891,26 @@ public final class ObjectAnimator extends ValueAnimator {
@Override
public void setupStartValues() {
initAnimation();
- int numValues = mValues.length;
- for (int i = 0; i < numValues; ++i) {
- mValues[i].setupStartValue(mTarget);
+
+ final Object target = getTarget();
+ if (target != null) {
+ final int numValues = mValues.length;
+ for (int i = 0; i < numValues; ++i) {
+ mValues[i].setupStartValue(target);
+ }
}
}
@Override
public void setupEndValues() {
initAnimation();
- int numValues = mValues.length;
- for (int i = 0; i < numValues; ++i) {
- mValues[i].setupEndValue(mTarget);
+
+ final Object target = getTarget();
+ if (target != null) {
+ final int numValues = mValues.length;
+ for (int i = 0; i < numValues; ++i) {
+ mValues[i].setupEndValue(target);
+ }
}
}
@@ -901,10 +928,17 @@ public final class ObjectAnimator extends ValueAnimator {
*/
@Override
void animateValue(float fraction) {
+ final Object target = getTarget();
+ if (mTarget != null && target == null) {
+ // We lost the target reference, cancel and clean up.
+ cancel();
+ return;
+ }
+
super.animateValue(fraction);
int numValues = mValues.length;
for (int i = 0; i < numValues; ++i) {
- mValues[i].setAnimatedValue(mTarget);
+ mValues[i].setAnimatedValue(target);
}
}
@@ -915,9 +949,10 @@ public final class ObjectAnimator extends ValueAnimator {
}
@Override
+ @NonNull
public String toString() {
String returnVal = "ObjectAnimator@" + Integer.toHexString(hashCode()) + ", target " +
- mTarget;
+ getTarget();
if (mValues != null) {
for (int i = 0; i < mValues.length; ++i) {
returnVal += "\n " + mValues[i].toString();
diff --git a/core/java/android/annotation/PrivateApi.java b/core/java/android/annotation/SystemApi.java
index 985eafec5d33..55028ebfa8fd 100644
--- a/core/java/android/annotation/PrivateApi.java
+++ b/core/java/android/annotation/SystemApi.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2014 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.
@@ -16,16 +16,29 @@
package android.annotation;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
/**
- * Indicates an API is exposed for use by bundled applications.
+ * Indicates an API is exposed for use by bundled system applications.
* <p>
* These APIs are not guaranteed to remain consistent release-to-release,
- * and are not for use by apps linking against the SDK.
+ * and are not for use by apps linking against the Android SDK.
+ * </p><p>
+ * This annotation should only appear on API that is already marked <pre>@hide</pre>.
+ * </p>
+ *
* @hide
*/
+@Target({TYPE, FIELD, METHOD, CONSTRUCTOR, ANNOTATION_TYPE, PACKAGE})
@Retention(RetentionPolicy.SOURCE)
-public @interface PrivateApi {
+public @interface SystemApi {
}
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index d4c431801b78..628875f0218e 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -68,7 +68,7 @@ import java.util.Map;
* select items accessible directly from the action bar as "action items". You can also
* modify various characteristics of the action bar or remove it completely.</p>
*
- * <p>When using the Quantum themes (default in API 21 or newer) the navigation button
+ * <p>When using the Material themes (default in API 21 or newer) the navigation button
* (formerly "Home") takes over the space previously occupied by the application icon.
* Apps wishing to express a stronger branding should use their brand colors heavily
* in the action bar and other application chrome or use a {@link #setLogo(int) logo}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 23b5f2903519..f6883e2f5339 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -5326,7 +5326,8 @@ public class Activity extends ContextThemeWrapper
*
* @hide
*/
- void convertToTranslucent(TranslucentConversionListener callback, ActivityOptions options) {
+ public void convertToTranslucent(TranslucentConversionListener callback,
+ ActivityOptions options) {
boolean drawComplete;
try {
mTranslucentCallback = callback;
@@ -5615,6 +5616,34 @@ public class Activity extends ContextThemeWrapper
mExitTransitionListener = listener;
}
+ /**
+ * Postpone the entering activity transition when Activity was started with
+ * {@link android.app.ActivityOptions#makeSceneTransitionAnimation(Activity,
+ * android.util.Pair[])}.
+ * <p>This method gives the Activity the ability to delay starting the entering and
+ * shared element transitions until all data is loaded. Until then, the Activity won't
+ * draw into its window, leaving the window transparent. This may also cause the
+ * returning animation to be delayed until data is ready. This method should be
+ * called in {@link #onCreate(android.os.Bundle)} or in
+ * {@link #onActivityReenter(int, android.content.Intent)}.
+ * {@link #startPostponedEnterTransition()} must be called to allow the Activity to
+ * start the transitions. If the Activity did not use
+ * {@link android.app.ActivityOptions#makeSceneTransitionAnimation(Activity,
+ * android.util.Pair[])}, then this method does nothing.</p>
+ */
+ public void postponeEnterTransition() {
+ mActivityTransitionState.postponeEnterTransition();
+ }
+
+ /**
+ * Begin postponed transitions after {@link #postponeEnterTransition()} was called.
+ * If postponeEnterTransition() was called, you must call startPostponedEnterTransition()
+ * to have your Activity start drawing.
+ */
+ public void startPostponedEnterTransition() {
+ mActivityTransitionState.startPostponedEnterTransition();
+ }
+
// ------------------ Internal API ------------------
final void setParent(Activity parent) {
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
index b739387a76c3..703df51a6018 100644
--- a/core/java/android/app/ActivityTransitionCoordinator.java
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -214,11 +214,21 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
ArrayList<String> allSharedElementNames,
ArrayList<String> accepted, ArrayList<String> localNames,
SharedElementListener listener, boolean isReturning) {
+ this(window, allSharedElementNames, listener, isReturning);
+ viewsReady(accepted, localNames);
+ }
+
+ public ActivityTransitionCoordinator(Window window,
+ ArrayList<String> allSharedElementNames,
+ SharedElementListener listener, boolean isReturning) {
super(new Handler());
mWindow = window;
mListener = listener;
mAllSharedElementNames = allSharedElementNames;
mIsReturning = isReturning;
+ }
+
+ protected void viewsReady(ArrayList<String> accepted, ArrayList<String> localNames) {
setSharedElements(accepted, localNames);
if (getViewsTransition() != null) {
getDecor().captureTransitioningViews(mTransitioningViews);
@@ -274,6 +284,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
return names;
}
+ public ArrayList<String> getAllSharedElementNames() { return mAllSharedElementNames; }
+
public static void setViewVisibility(Collection<View> views, int visibility) {
if (views != null) {
for (View view : views) {
@@ -563,7 +575,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
public void setEpicenter(Rect epicenter) { mEpicenter = epicenter; }
@Override
- public Rect getEpicenter(Transition transition) {
+ public Rect onGetEpicenter(Transition transition) {
return mEpicenter;
}
}
diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java
index b32e9ad615db..d94dadda055f 100644
--- a/core/java/android/app/ActivityTransitionState.java
+++ b/core/java/android/app/ActivityTransitionState.java
@@ -87,6 +87,11 @@ class ActivityTransitionState {
*/
private boolean mHasExited;
+ /**
+ * Postpone painting and starting the enter transition until this is false.
+ */
+ private boolean mIsEnterPostponed;
+
public ActivityTransitionState() {
}
@@ -140,15 +145,38 @@ class ActivityTransitionState {
if (mEnterActivityOptions.isReturning()) {
restoreExitedViews();
activity.getWindow().getDecorView().setVisibility(View.VISIBLE);
- mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity,
- resultReceiver, sharedElementNames, mExitingFrom, mExitingTo);
+ }
+ mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity,
+ resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning());
+
+ if (!mIsEnterPostponed) {
+ startEnter();
+ }
+ }
+
+ public void postponeEnterTransition() {
+ mIsEnterPostponed = true;
+ }
+
+ public void startPostponedEnterTransition() {
+ if (mIsEnterPostponed) {
+ mIsEnterPostponed = false;
+ if (mEnterTransitionCoordinator != null) {
+ startEnter();
+ }
+ }
+ }
+
+ private void startEnter() {
+ if (mEnterActivityOptions.isReturning()) {
+ mEnterTransitionCoordinator.viewsReady(mExitingFrom, mExitingTo);
} else {
- mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity,
- resultReceiver, sharedElementNames, null, null);
- mEnteringNames = sharedElementNames;
+ mEnterTransitionCoordinator.viewsReady(null, null);
+ mEnteringNames = mEnterTransitionCoordinator.getAllSharedElementNames();
mEnteringFrom = mEnterTransitionCoordinator.getAcceptedNames();
mEnteringTo = mEnterTransitionCoordinator.getMappedNames();
}
+
mExitingFrom = null;
mExitingTo = null;
mEnterActivityOptions = null;
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index ac25a5315e3a..c5190d384db6 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -57,9 +57,7 @@ import android.hardware.ConsumerIrManager;
import android.hardware.ISerialManager;
import android.hardware.SerialManager;
import android.hardware.SystemSensorManager;
-import android.hardware.hdmi.HdmiCecManager;
import android.hardware.hdmi.HdmiControlManager;
-import android.hardware.hdmi.IHdmiCecService;
import android.hardware.hdmi.IHdmiControlService;
import android.hardware.camera2.CameraManager;
import android.hardware.display.DisplayManager;
@@ -135,7 +133,7 @@ import android.view.textservice.TextServicesManager;
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
import android.app.admin.DevicePolicyManager;
-import android.app.task.ITaskManager;
+import android.app.job.IJobScheduler;
import android.app.trust.TrustManager;
import com.android.internal.annotations.GuardedBy;
@@ -384,12 +382,6 @@ class ContextImpl extends Context {
return new BluetoothManager(ctx);
}});
- registerService(HDMI_CEC_SERVICE, new StaticServiceFetcher() {
- public Object createStaticService() {
- IBinder b = ServiceManager.getService(HDMI_CEC_SERVICE);
- return new HdmiCecManager(IHdmiCecService.Stub.asInterface(b));
- }});
-
registerService(HDMI_CONTROL_SERVICE, new StaticServiceFetcher() {
public Object createStaticService() {
IBinder b = ServiceManager.getService(HDMI_CONTROL_SERVICE);
@@ -705,10 +697,10 @@ class ContextImpl extends Context {
return new UsageStatsManager(ctx.getOuterContext());
}});
- registerService(TASK_SERVICE, new ServiceFetcher() {
+ registerService(JOB_SCHEDULER_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(TASK_SERVICE);
- return new TaskManagerImpl(ITaskManager.Stub.asInterface(b));
+ IBinder b = ServiceManager.getService(JOB_SCHEDULER_SERVICE);
+ return new JobSchedulerImpl(IJobScheduler.Stub.asInterface(b));
}});
}
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
index 4b052e731e9a..779e3de2b564 100644
--- a/core/java/android/app/EnterTransitionCoordinator.java
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -53,18 +53,37 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
private boolean mIsCanceled;
private ObjectAnimator mBackgroundAnimator;
private boolean mIsExitTransitionComplete;
+ private boolean mIsReadyForTransition;
+ private Bundle mSharedElementsBundle;
public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver,
- ArrayList<String> sharedElementNames,
- ArrayList<String> acceptedNames, ArrayList<String> mappedNames) {
- super(activity.getWindow(), sharedElementNames, acceptedNames, mappedNames,
- getListener(activity, acceptedNames), acceptedNames != null);
+ ArrayList<String> sharedElementNames, boolean isReturning) {
+ super(activity.getWindow(), sharedElementNames,
+ getListener(activity, isReturning), isReturning);
mActivity = activity;
setResultReceiver(resultReceiver);
prepareEnter();
Bundle resultReceiverBundle = new Bundle();
resultReceiverBundle.putParcelable(KEY_REMOTE_RECEIVER, this);
mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle);
+ getDecor().getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ if (mIsReadyForTransition) {
+ getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
+ }
+ return mIsReadyForTransition;
+ }
+ });
+ }
+
+ public void viewsReady(ArrayList<String> accepted, ArrayList<String> localNames) {
+ if (mIsReadyForTransition) {
+ return;
+ }
+ super.viewsReady(accepted, localNames);
+
+ mIsReadyForTransition = true;
if (mIsReturning) {
mHandler = new Handler() {
@Override
@@ -75,6 +94,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
mHandler.sendEmptyMessageDelayed(MSG_CANCEL, MAX_WAIT_MS);
send(MSG_SEND_SHARED_ELEMENT_DESTINATION, null);
}
+ setViewVisibility(mSharedElements, View.INVISIBLE);
+ if (getViewsTransition() != null) {
+ setViewVisibility(mTransitioningViews, View.INVISIBLE);
+ }
+ if (mSharedElementsBundle != null) {
+ onTakeSharedElements();
+ }
}
private void sendSharedElementDestination() {
@@ -94,9 +120,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
}
}
- private static SharedElementListener getListener(Activity activity,
- ArrayList<String> acceptedNames) {
- boolean isReturning = acceptedNames != null;
+ private static SharedElementListener getListener(Activity activity, boolean isReturning) {
return isReturning ? activity.mExitTransitionListener : activity.mEnterTransitionListener;
}
@@ -108,7 +132,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
if (mHandler != null) {
mHandler.removeMessages(MSG_CANCEL);
}
- onTakeSharedElements(resultData);
+ mSharedElementsBundle = resultData;
+ onTakeSharedElements();
}
break;
case MSG_EXIT_TRANSITION_COMPLETE:
@@ -139,7 +164,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
mSharedElementNames.clear();
mSharedElements.clear();
mAllSharedElementNames.clear();
- onTakeSharedElements(null);
+ startSharedElementTransition(null);
onRemoteExitTransitionComplete();
}
}
@@ -149,10 +174,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
}
protected void prepareEnter() {
- setViewVisibility(mSharedElements, View.INVISIBLE);
- if (getViewsTransition() != null) {
- setViewVisibility(mTransitioningViews, View.INVISIBLE);
- }
mActivity.overridePendingTransition(0, 0);
if (!mIsReturning) {
mActivity.convertToTranslucent(null, null);
@@ -185,7 +206,25 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
}
}
- protected void onTakeSharedElements(Bundle sharedElementState) {
+ protected void onTakeSharedElements() {
+ if (!mIsReadyForTransition || mSharedElementsBundle == null) {
+ return;
+ }
+ final Bundle sharedElementState = mSharedElementsBundle;
+ mSharedElementsBundle = null;
+ getDecor().getViewTreeObserver()
+ .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
+ startSharedElementTransition(sharedElementState);
+ return false;
+ }
+ });
+ getDecor().invalidate();
+ }
+
+ private void startSharedElementTransition(Bundle sharedElementState) {
setEpicenter();
// Remove rejected shared elements
ArrayList<String> rejectedNames = new ArrayList<String>(mAllSharedElementNames);
@@ -299,8 +338,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
}
public void stop() {
+ makeOpaque();
mHasStopped = true;
- mActivity = null;
mIsCanceled = true;
mResultReceiver = null;
if (mBackgroundAnimator != null) {
@@ -310,7 +349,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
}
private void makeOpaque() {
- if (!mHasStopped) {
+ if (!mHasStopped && mActivity != null) {
mActivity.convertFromTranslucent();
mActivity = null;
}
diff --git a/core/java/android/app/JobSchedulerImpl.java b/core/java/android/app/JobSchedulerImpl.java
new file mode 100644
index 000000000000..09038d522500
--- /dev/null
+++ b/core/java/android/app/JobSchedulerImpl.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+// in android.app so ContextImpl has package access
+package android.app;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.app.job.IJobScheduler;
+import android.os.RemoteException;
+
+import java.util.List;
+
+
+/**
+ * Concrete implementation of the JobScheduler interface
+ * @hide
+ */
+public class JobSchedulerImpl extends JobScheduler {
+ IJobScheduler mBinder;
+
+ /* package */ JobSchedulerImpl(IJobScheduler binder) {
+ mBinder = binder;
+ }
+
+ @Override
+ public int schedule(JobInfo job) {
+ try {
+ return mBinder.schedule(job);
+ } catch (RemoteException e) {
+ return JobScheduler.RESULT_FAILURE;
+ }
+ }
+
+ @Override
+ public void cancel(int jobId) {
+ try {
+ mBinder.cancel(jobId);
+ } catch (RemoteException e) {}
+
+ }
+
+ @Override
+ public void cancelAll() {
+ try {
+ mBinder.cancelAll();
+ } catch (RemoteException e) {}
+
+ }
+
+ @Override
+ public List<JobInfo> getAllPendingJobs() {
+ try {
+ return mBinder.getAllPendingJobs();
+ } catch (RemoteException e) {
+ return null;
+ }
+ }
+}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 8dba1dcc778c..276f936605a6 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -17,21 +17,25 @@
package android.app;
import android.annotation.IntDef;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.session.MediaSessionToken;
import android.net.Uri;
import android.os.BadParcelableException;
-import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.os.UserManager;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
@@ -70,6 +74,15 @@ public class Notification implements Parcelable
private static final String TAG = "Notification";
/**
+ * An activity that provides a user interface for adjusting notification preferences for its
+ * containing application. Optional but recommended for apps that post
+ * {@link android.app.Notification Notifications}.
+ */
+ @SdkConstant(SdkConstantType.INTENT_CATEGORY)
+ public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES
+ = "android.intent.category.NOTIFICATION_PREFERENCES";
+
+ /**
* Use all default values (where applicable).
*/
public static final int DEFAULT_ALL = ~0;
@@ -2305,7 +2318,23 @@ public class Notification implements Parcelable
return this;
}
+ private Bitmap getProfileBadge() {
+ UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ Drawable badge = userManager.getBadgeForUser(android.os.Process.myUserHandle());
+ if (badge == null) {
+ return null;
+ }
+ final int width = badge.getIntrinsicWidth();
+ final int height = badge.getIntrinsicHeight();
+ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+ badge.setBounds(0, 0, width, height);
+ badge.draw(canvas);
+ return bitmap;
+ }
+
private RemoteViews applyStandardTemplate(int resId, boolean fitIn1U) {
+ Bitmap profileIcon = getProfileBadge();
RemoteViews contentView = new RemoteViews(mContext.getPackageName(), resId);
boolean showLine3 = false;
boolean showLine2 = false;
@@ -2313,6 +2342,12 @@ public class Notification implements Parcelable
if (mPriority < PRIORITY_LOW) {
// TODO: Low priority presentation
}
+ if (profileIcon != null) {
+ contentView.setImageViewBitmap(R.id.profile_icon, profileIcon);
+ contentView.setViewVisibility(R.id.profile_icon, View.VISIBLE);
+ } else {
+ contentView.setViewVisibility(R.id.profile_icon, View.GONE);
+ }
if (mLargeIcon != null) {
contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
processLargeIcon(mLargeIcon, contentView);
@@ -2473,7 +2508,7 @@ public class Notification implements Parcelable
/**
* @return Whether we are currently building a notification from a legacy (an app that
- * doesn't create quantum notifications by itself) app.
+ * doesn't create material notifications by itself) app.
*/
private boolean isLegacy() {
return mColorUtil != null;
@@ -2531,7 +2566,7 @@ public class Notification implements Parcelable
R.id.icon,
true,
-1,
- mColor,
+ resolveColor(),
PorterDuff.Mode.SRC_ATOP,
-1);
}
@@ -2558,17 +2593,22 @@ public class Notification implements Parcelable
R.id.right_icon,
true,
-1,
- mColor,
+ resolveColor(),
PorterDuff.Mode.SRC_ATOP,
-1);
}
}
+ private int sanitizeColor() {
+ if (mColor != COLOR_DEFAULT) {
+ mColor |= 0xFF000000; // no alpha for custom colors
+ }
+ return mColor;
+ }
+
private int resolveColor() {
if (mColor == COLOR_DEFAULT) {
- mColor = mContext.getResources().getColor(R.color.notification_icon_bg_color);
- } else {
- mColor |= 0xFF000000; // no alpha for custom colors
+ return mContext.getResources().getColor(R.color.notification_icon_bg_color);
}
return mColor;
}
@@ -2584,7 +2624,7 @@ public class Notification implements Parcelable
n.iconLevel = mSmallIconLevel;
n.number = mNumber;
- n.color = resolveColor();
+ n.color = sanitizeColor();
n.contentView = makeContentView();
n.contentIntent = mContentIntent;
@@ -2693,31 +2733,31 @@ public class Notification implements Parcelable
private int getBaseLayoutResource() {
- return R.layout.notification_template_quantum_base;
+ return R.layout.notification_template_material_base;
}
private int getBigBaseLayoutResource() {
- return R.layout.notification_template_quantum_big_base;
+ return R.layout.notification_template_material_big_base;
}
private int getBigPictureLayoutResource() {
- return R.layout.notification_template_quantum_big_picture;
+ return R.layout.notification_template_material_big_picture;
}
private int getBigTextLayoutResource() {
- return R.layout.notification_template_quantum_big_text;
+ return R.layout.notification_template_material_big_text;
}
private int getInboxLayoutResource() {
- return R.layout.notification_template_quantum_inbox;
+ return R.layout.notification_template_material_inbox;
}
private int getActionLayoutResource() {
- return R.layout.notification_quantum_action;
+ return R.layout.notification_material_action;
}
private int getActionTombstoneLayoutResource() {
- return R.layout.notification_quantum_action_tombstone;
+ return R.layout.notification_material_action_tombstone;
}
}
@@ -3212,7 +3252,7 @@ public class Notification implements Parcelable
private RemoteViews generateMediaActionButton(Action action) {
final boolean tombstone = (action.actionIntent == null);
RemoteViews button = new RemoteViews(mBuilder.mContext.getPackageName(),
- R.layout.notification_quantum_media_action);
+ R.layout.notification_material_media_action);
button.setImageViewResource(R.id.action0, action.icon);
if (!tombstone) {
button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
@@ -3223,7 +3263,7 @@ public class Notification implements Parcelable
private RemoteViews makeMediaContentView() {
RemoteViews view = mBuilder.applyStandardTemplate(
- R.layout.notification_template_quantum_media, true /* 1U */);
+ R.layout.notification_template_material_media, true /* 1U */);
final int numActions = mBuilder.mActions.size();
final int N = mActionsToShowInCompact == null
@@ -3248,7 +3288,7 @@ public class Notification implements Parcelable
private RemoteViews makeMediaBigContentView() {
RemoteViews big = mBuilder.applyStandardTemplate(
- R.layout.notification_template_quantum_big_media, false);
+ R.layout.notification_template_material_big_media, false);
final int N = Math.min(mBuilder.mActions.size(), MAX_MEDIA_BUTTONS);
if (N > 0) {
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 33c34099b5f8..261b15d939e4 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -253,6 +253,7 @@ public class SearchManager
* for more information on these schemes.
*/
public final static String SUGGEST_COLUMN_ICON_1 = "suggest_icon_1";
+
/**
* Column name for suggestions cursor. <i>Optional.</i> If your cursor includes this column,
* then all suggestions will be provided in a format that includes space for two small icons,
@@ -269,6 +270,24 @@ public class SearchManager
* for more information on these schemes.
*/
public final static String SUGGEST_COLUMN_ICON_2 = "suggest_icon_2";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your cursor includes this column,
+ * then the image will be displayed when forming the suggestion. The suggested dimension for
+ * the image is 270x400 px for portrait mode and 400x225 px for landscape mode. The data in the
+ * column must be a resource ID of a drawable, or a URI in one of the following formats:
+ *
+ * <ul>
+ * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
+ * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})</li>
+ * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
+ * </ul>
+ *
+ * See {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String)}
+ * for more information on these schemes.
+ */
+ public final static String SUGGEST_COLUMN_RESULT_CARD_IMAGE = "suggest_result_card_image";
+
/**
* Column name for suggestions cursor. <i>Optional.</i> If this column exists <i>and</i>
* this element exists at the given row, this is the action that will be used when
@@ -279,6 +298,7 @@ public class SearchManager
* it from the cursor.
*/
public final static String SUGGEST_COLUMN_INTENT_ACTION = "suggest_intent_action";
+
/**
* Column name for suggestions cursor. <i>Optional.</i> If this column exists <i>and</i>
* this element exists at the given row, this is the data that will be used when
@@ -289,6 +309,7 @@ public class SearchManager
* it is more efficient to specify it using XML metadata and omit it from the cursor.
*/
public final static String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data";
+
/**
* Column name for suggestions cursor. <i>Optional.</i> If this column exists <i>and</i>
* this element exists at the given row, this is the data that will be used when
@@ -297,6 +318,7 @@ public class SearchManager
* an extra under the key {@link #EXTRA_DATA_KEY}.
*/
public final static String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data";
+
/**
* Column name for suggestions cursor. <i>Optional.</i> If this column exists <i>and</i>
* this element exists at the given row, then "/" and this value will be appended to the data
@@ -304,6 +326,7 @@ public class SearchManager
* appropriate base string.
*/
public final static String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id";
+
/**
* Column name for suggestions cursor. <i>Required if action is
* {@link android.content.Intent#ACTION_SEARCH ACTION_SEARCH}, optional otherwise.</i> If this
@@ -331,6 +354,89 @@ public class SearchManager
"suggest_spinner_while_refreshing";
/**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is media type, you
+ * should provide this column so search app could understand more about your content. The data
+ * in the column must specify the MIME type of the content.
+ */
+ public final static String SUGGEST_COLUMN_CONTENT_TYPE = "suggest_content_type";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is media type, you
+ * should provide this column to specify whether your content is live media such as live video
+ * or live audio. The value in the column is of integer type with value of either 0 indicating
+ * non-live content or 1 indicating live content.
+ */
+ public final static String SUGGEST_COLUMN_IS_LIVE = "suggest_is_live";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is video, you should
+ * provide this column to specify the number of vertical lines. The data in the column is of
+ * integer type.
+ */
+ public final static String SUGGEST_COLUMN_VIDEO_WIDTH = "suggest_video_width";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is video, you should
+ * provide this column to specify the number of horizontal lines. The data in the column is of
+ * integer type.
+ */
+ public final static String SUGGEST_COLUMN_VIDEO_HEIGHT = "suggest_video_height";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content contains audio, you
+ * should provide this column to specify the audio channel configuration. The data in the
+ * column is string with format like "channels.subchannels" such as "1.0" or "5.1".
+ */
+ public final static String SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG = "suggest_audio_channel_config";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is purchasable, you
+ * should provide this column to specify the displayable string representation of the purchase
+ * price of your content including the currency and the amount. If it's free, you should
+ * provide localized string to specify that it's free. This column can be omitted if the content
+ * is not applicable to purchase.
+ */
+ public final static String SUGGEST_COLUMN_PURCHASE_PRICE = "suggest_purchase_price";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is rentable, you
+ * should provide this column to specify the displayable string representation of the rental
+ * price of your content including the currency and the amount. If it's free, you should
+ * provide localized string to specify that it's free. This column can be ommitted if the
+ * content is not applicable to rent.
+ */
+ public final static String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content has a rating, you
+ * should provide this column to specify the rating style of your content. The data in the
+ * column must be one of the constant values specified in {@link android.media.Rating}
+ */
+ public final static String SUGGEST_COLUMN_RATING_STYLE = "suggest_rating_style";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content has a rating, you
+ * should provide this column to specify the rating score of your content. The data in the
+ * column is of float type. See {@link android.media.Rating} about valid rating scores for each
+ * rating style.
+ */
+ public final static String SUGGEST_COLUMN_RATING_SCORE = "suggest_rating_score";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is video or audio and
+ * has a known production year, you should provide this column to specify the production year
+ * of your content. The data in the column is of integer type.
+ */
+ public final static String SUGGEST_COLUMN_PRODUCTION_YEAR = "suggest_production_year";
+
+ /**
+ * Column name for suggestions cursor. <i>Optional.</i> If your content is video or audio, you
+ * should provide this column to specify the duration of your content in milliseconds. The data
+ * in the column is of long type.
+ */
+ public final static String SUGGEST_COLUMN_DURATION = "suggest_duration";
+
+ /**
* Column name for suggestions cursor. <i>Optional.</i> This column is used to specify
* additional flags per item. Multiple flags can be specified.
* <p>
diff --git a/core/java/android/app/TaskManagerImpl.java b/core/java/android/app/TaskManagerImpl.java
deleted file mode 100644
index f42839e36793..000000000000
--- a/core/java/android/app/TaskManagerImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-// in android.app so ContextImpl has package access
-package android.app;
-
-import android.app.task.ITaskManager;
-import android.app.task.Task;
-import android.app.task.TaskManager;
-
-import java.util.List;
-
-
-/**
- * Concrete implementation of the TaskManager interface
- * @hide
- */
-public class TaskManagerImpl extends TaskManager {
- ITaskManager mBinder;
-
- /* package */ TaskManagerImpl(ITaskManager binder) {
- mBinder = binder;
- }
-
- @Override
- public int schedule(Task task) {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public void cancel(int taskId) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void cancelAll() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public List<Task> getAllPendingTasks() {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
diff --git a/core/java/android/app/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java
index 85e970c25b84..0d94721716d1 100644
--- a/core/java/android/app/VoiceInteractor.java
+++ b/core/java/android/app/VoiceInteractor.java
@@ -293,7 +293,7 @@ public class VoiceInteractor {
IVoiceInteractorRequest submit(IVoiceInteractor interactor, String packageName,
IVoiceInteractorCallback callback) throws RemoteException {
- return interactor.startConfirmation(packageName, callback, mCommand, mArgs);
+ return interactor.startCommand(packageName, callback, mCommand, mArgs);
}
}
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index ee222a9c2dc4..101551477a4d 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -16,6 +16,7 @@
package android.app.admin;
+import android.accounts.AccountManager;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.Service;
@@ -165,12 +166,14 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
= "android.app.action.ACTION_PASSWORD_EXPIRING";
/**
- * Broadcast Action: This broadcast is sent to the newly created profile when
- * the provisioning of a managed profile has completed successfully. It is used in both the
- * Profile Owner and the Device Owner provisioning.
+ * Broadcast Action: This broadcast is sent to indicate that provisioning of a managed profile
+ * or managed device has completed successfully.
*
- * <p>The broadcast is limited to the DeviceAdminReceiver component specified in the message
- * that started the provisioning. It is also limited to the managed profile.
+ * <p>The broadcast is limited to the profile that will be managed by the application that
+ * requested provisioning. In the device owner case the profile is the primary user.
+ * The broadcast will also be limited to the {@link DeviceAdminReceiver} component
+ * specified in the original intent or NFC bump that started the provisioning process
+ * (@see DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE).
*
* <p>Input: Nothing.</p>
* <p>Output: Nothing</p>
@@ -307,18 +310,23 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
}
/**
- * Called on the new profile when managed profile provisioning has completed.
- * Managed profile provisioning is the process of setting up the device so that it has a
- * separate profile which is managed by the mobile device management(mdm) application that
- * triggered the provisioning.
+ * Called when provisioning of a managed profile or managed device has completed successfully.
*
- * <p>As part of provisioning a new profile is created, the mdm is moved to the new profile and
- * set as the owner of the profile so that it has full control over it.
- * This intent is only received by the mdm package that is set as profile owner during
- * provisioning.
+ * <p> As a prerequisit for the execution of this callback the (@link DeviceAdminReceiver} has
+ * to declare an intent filter for {@link #ACTION_PROFILE_PROVISIONING_COMPLETE}.
+ * Its component must also be specified in the {@link DevicePolicyManager#EXTRA_DEVICE_ADMIN}
+ * of the {@link DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE} intent that started the
+ * managed provisioning.
*
- * <p>Provisioning can be triggered via an intent with the action
- * android.managedprovisioning.ACTION_PROVISION_MANAGED_PROFILE.
+ * <p>When provisioning is complete, the managed profile is hidden until the profile owner
+ * calls {DevicePolicyManager#setProfileEnabled(ComponentName admin)}. Typically a profile
+ * owner will enable the profile when it has finished any additional setup such as adding an
+ * account by using the {@link AccountManager} and calling apis to bring the profile into the
+ * desired state.
+ *
+ * <p> Note that provisioning completes without waiting for any server interactions, so the
+ * profile owner needs to wait for data to be available if required (e.g android device ids or
+ * other data that is set as a result of server interactions).
*
* @param context The running context as per {@link #onReceive}.
* @param intent The received intent as per {@link #onReceive}.
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index d725873f5f79..157b8ecfb6b5 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -82,17 +82,25 @@ public class DevicePolicyManager {
/**
* Activity action: Starts the provisioning flow which sets up a managed profile.
- * This intent will typically be sent by a mobile device management application(mdm).
- * Managed profile provisioning creates a profile, moves the mdm to the profile,
- * sets the mdm as the profile owner and removes all non required applications from the profile.
- * As a profile owner the mdm than has full control over the managed profile.
*
- * <p>The intent must contain the extras {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME} and
- * {@link #EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME}.
+ * <p>A managed profile allows data separation for example for the usage of a
+ * device as a personal and corporate device. The user which provisioning is started from and
+ * the managed profile share a launcher.
+ *
+ * <p>This intent will typically be sent by a mobile device management application (mdm).
+ * Provisioning adds a managed profile and sets the mdm as the profile owner who has full
+ * control over the profile
+ *
+ * <p>This intent must contain the extras {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME}
+ * {@link #EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME} and {@link #EXTRA_DEVICE_ADMIN}.
*
* <p> When managed provisioning has completed, an intent of the type
* {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} is broadcasted to the
- * mdm app on the managed profile.
+ * managed profile. The intent is sent to the {@link DeviceAdminReceiver} specified in the
+ * {@link #EXTRA_DEVICE_ADMIN} exclusively.
+ *
+ * If provisioning fails, the managedProfile is removed so the device returns to its previous
+ * state.
*
* <p>Input: Nothing.</p>
* <p>Output: Nothing</p>
@@ -107,7 +115,7 @@ public class DevicePolicyManager {
* <p>Use with {@link #ACTION_PROVISION_MANAGED_PROFILE}.
*/
public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
- = "deviceAdminPackageName";
+ = "android.app.extra.deviceAdminPackageName";
/**
* A String extra holding the default name of the profile that is created during managed profile
@@ -115,7 +123,7 @@ public class DevicePolicyManager {
* <p>Use with {@link #ACTION_PROVISION_MANAGED_PROFILE}
*/
public static final String EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME
- = "defaultManagedProfileName";
+ = "android.app.extra.defaultManagedProfileName";
/**
* Activity action: ask the user to add a new device administrator to the system.
@@ -837,6 +845,9 @@ public class DevicePolicyManager {
* {@link DeviceAdminInfo#USES_POLICY_EXPIRE_PASSWORD} to be able to call this
* method; if it has not, a security exception will be thrown.
*
+ * <p> Note that setting the password will automatically reset the expiration time for all
+ * active admins. Active admins do not need to explicitly call this method in that case.
+ *
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
* @param timeout The limit (in ms) that a password can remain in effect. A value of 0
* means there is no restriction (unlimited).
diff --git a/core/java/android/app/task/ITaskCallback.aidl b/core/java/android/app/job/IJobCallback.aidl
index d8a32fd49b13..2d3948f6e85d 100644
--- a/core/java/android/app/task/ITaskCallback.aidl
+++ b/core/java/android/app/job/IJobCallback.aidl
@@ -14,43 +14,40 @@
* limitations under the License.
*/
-package android.app.task;
-
-import android.app.task.ITaskService;
-import android.app.task.TaskParams;
+package android.app.job;
/**
- * The server side of the TaskManager IPC protocols. The app-side implementation
+ * The server side of the JobScheduler IPC protocols. The app-side implementation
* invokes on this interface to indicate completion of the (asynchronous) instructions
* issued by the server.
*
* In all cases, the 'who' parameter is the caller's service binder, used to track
- * which Task Service instance is reporting.
+ * which Job Service instance is reporting.
*
* {@hide}
*/
-interface ITaskCallback {
+interface IJobCallback {
/**
* Immediate callback to the system after sending a start signal, used to quickly detect ANR.
*
- * @param taskId Unique integer used to identify this task.
- * @param ongoing True to indicate that the client is processing the task. False if the task is
+ * @param jobId Unique integer used to identify this job.
+ * @param ongoing True to indicate that the client is processing the job. False if the job is
* complete
*/
- void acknowledgeStartMessage(int taskId, boolean ongoing);
+ void acknowledgeStartMessage(int jobId, boolean ongoing);
/**
* Immediate callback to the system after sending a stop signal, used to quickly detect ANR.
*
- * @param taskId Unique integer used to identify this task.
- * @param rescheulde Whether or not to reschedule this task.
+ * @param jobId Unique integer used to identify this job.
+ * @param reschedule Whether or not to reschedule this job.
*/
- void acknowledgeStopMessage(int taskId, boolean reschedule);
+ void acknowledgeStopMessage(int jobId, boolean reschedule);
/*
- * Tell the task manager that the client is done with its execution, so that it can go on to
+ * Tell the job manager that the client is done with its execution, so that it can go on to
* the next one and stop attributing wakelock time to us etc.
*
- * @param taskId Unique integer used to identify this task.
- * @param reschedule Whether or not to reschedule this task.
+ * @param jobId Unique integer used to identify this job.
+ * @param reschedule Whether or not to reschedule this job.
*/
- void taskFinished(int taskId, boolean reschedule);
+ void jobFinished(int jobId, boolean reschedule);
}
diff --git a/core/java/android/app/task/ITaskManager.aidl b/core/java/android/app/job/IJobScheduler.aidl
index b56c78a5242e..f1258aeda221 100644
--- a/core/java/android/app/task/ITaskManager.aidl
+++ b/core/java/android/app/job/IJobScheduler.aidl
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package android.app.task;
+package android.app.job;
-import android.app.task.Task;
+import android.app.job.JobInfo;
/**
- * IPC interface that supports the app-facing {@link #TaskManager} api.
+ * IPC interface that supports the app-facing {@link #JobScheduler} api.
* {@hide}
*/
-interface ITaskManager {
- int schedule(in Task task);
- void cancel(int taskId);
+interface IJobScheduler {
+ int schedule(in JobInfo job);
+ void cancel(int jobId);
void cancelAll();
- List<Task> getAllPendingTasks();
+ List<JobInfo> getAllPendingJobs();
}
diff --git a/core/java/android/app/task/ITaskService.aidl b/core/java/android/app/job/IJobService.aidl
index 87b019198650..63f8b81cea77 100644
--- a/core/java/android/app/task/ITaskService.aidl
+++ b/core/java/android/app/job/IJobService.aidl
@@ -14,22 +14,19 @@
* limitations under the License.
*/
-package android.app.task;
+package android.app.job;
-import android.app.task.ITaskCallback;
-import android.app.task.TaskParams;
-
-import android.os.Bundle;
+import android.app.job.JobParameters;
/**
* Interface that the framework uses to communicate with application code that implements a
- * TaskService. End user code does not implement this interface directly; instead, the app's
- * service implementation will extend android.app.task.TaskService.
+ * JobService. End user code does not implement this interface directly; instead, the app's
+ * service implementation will extend android.app.job.JobService.
* {@hide}
*/
-oneway interface ITaskService {
- /** Begin execution of application's task. */
- void startTask(in TaskParams taskParams);
+oneway interface IJobService {
+ /** Begin execution of application's job. */
+ void startJob(in JobParameters jobParams);
/** Stop execution of application's task. */
- void stopTask(in TaskParams taskParams);
+ void stopJob(in JobParameters jobParams);
}
diff --git a/core/java/android/app/task/Task.aidl b/core/java/android/app/job/JobInfo.aidl
index 1f25439949e0..7b198a8ab14d 100644
--- a/core/java/android/app/task/Task.aidl
+++ b/core/java/android/app/job/JobInfo.aidl
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-package android.app.task;
+package android.app.job;
-parcelable Task;
- \ No newline at end of file
+parcelable JobInfo;
diff --git a/core/java/android/app/task/Task.java b/core/java/android/app/job/JobInfo.java
index 87d57fb41319..a22e4cd53109 100644
--- a/core/java/android/app/task/Task.java
+++ b/core/java/android/app/job/JobInfo.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package android.app.task;
+package android.app.job;
import android.content.ComponentName;
import android.os.Bundle;
@@ -23,22 +23,22 @@ import android.os.Parcelable;
import android.os.PersistableBundle;
/**
- * Container of data passed to the {@link android.app.task.TaskManager} fully encapsulating the
+ * Container of data passed to the {@link android.app.job.JobScheduler} fully encapsulating the
* parameters required to schedule work against the calling application. These are constructed
- * using the {@link Task.Builder}.
+ * using the {@link JobInfo.Builder}.
*/
-public class Task implements Parcelable {
+public class JobInfo implements Parcelable {
public interface NetworkType {
/** Default. */
public final int NONE = 0;
- /** This task requires network connectivity. */
+ /** This job requires network connectivity. */
public final int ANY = 1;
- /** This task requires network connectivity that is unmetered. */
+ /** This job requires network connectivity that is unmetered. */
public final int UNMETERED = 2;
}
/**
- * Amount of backoff a task has initially by default, in milliseconds.
+ * Amount of backoff a job has initially by default, in milliseconds.
* @hide.
*/
public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 5000L;
@@ -48,6 +48,11 @@ public class Task implements Parcelable {
* @hide
*/
public static final int DEFAULT_BACKOFF_POLICY = BackoffPolicy.EXPONENTIAL;
+ /**
+ * Maximum backoff we allow for a job, in milliseconds.
+ * @hide
+ */
+ public static final long MAX_BACKOFF_DELAY_MILLIS = 24 * 60 * 60 * 1000; // 24 hours.
/**
* Linear: retry_time(failure_time, t) = failure_time + initial_retry_delay * t, t >= 1
@@ -58,7 +63,7 @@ public class Task implements Parcelable {
public final int EXPONENTIAL = 1;
}
- private final int taskId;
+ private final int jobId;
// TODO: Change this to use PersistableBundle when that lands in master.
private final PersistableBundle extras;
private final ComponentName service;
@@ -75,10 +80,10 @@ public class Task implements Parcelable {
private final int backoffPolicy;
/**
- * Unique task id associated with this class. This is assigned to your task by the scheduler.
+ * Unique job id associated with this class. This is assigned to your job by the scheduler.
*/
public int getId() {
- return taskId;
+ return jobId;
}
/**
@@ -89,43 +94,43 @@ public class Task implements Parcelable {
}
/**
- * Name of the service endpoint that will be called back into by the TaskManager.
+ * Name of the service endpoint that will be called back into by the JobScheduler.
*/
public ComponentName getService() {
return service;
}
/**
- * Whether this task needs the device to be plugged in.
+ * Whether this job needs the device to be plugged in.
*/
public boolean isRequireCharging() {
return requireCharging;
}
/**
- * Whether this task needs the device to be in an Idle maintenance window.
+ * Whether this job needs the device to be in an Idle maintenance window.
*/
public boolean isRequireDeviceIdle() {
return requireDeviceIdle;
}
/**
- * See {@link android.app.task.Task.NetworkType} for a description of this value.
+ * See {@link android.app.job.JobInfo.NetworkType} for a description of this value.
*/
public int getNetworkCapabilities() {
return networkCapabilities;
}
/**
- * Set for a task that does not recur periodically, to specify a delay after which the task
- * will be eligible for execution. This value is not set if the task recurs periodically.
+ * Set for a job that does not recur periodically, to specify a delay after which the job
+ * will be eligible for execution. This value is not set if the job recurs periodically.
*/
public long getMinLatencyMillis() {
return minLatencyMillis;
}
/**
- * See {@link Builder#setOverrideDeadline(long)}. This value is not set if the task recurs
+ * See {@link Builder#setOverrideDeadline(long)}. This value is not set if the job recurs
* periodically.
*/
public long getMaxExecutionDelayMillis() {
@@ -133,23 +138,23 @@ public class Task implements Parcelable {
}
/**
- * Track whether this task will repeat with a given period.
+ * Track whether this job will repeat with a given period.
*/
public boolean isPeriodic() {
return isPeriodic;
}
/**
- * Set to the interval between occurrences of this task. This value is <b>not</b> set if the
- * task does not recur periodically.
+ * Set to the interval between occurrences of this job. This value is <b>not</b> set if the
+ * job does not recur periodically.
*/
public long getIntervalMillis() {
return intervalMillis;
}
/**
- * The amount of time the TaskManager will wait before rescheduling a failed task. This value
- * will be increased depending on the backoff policy specified at task creation time. Defaults
+ * The amount of time the JobScheduler will wait before rescheduling a failed job. This value
+ * will be increased depending on the backoff policy specified at job creation time. Defaults
* to 5 seconds.
*/
public long getInitialBackoffMillis() {
@@ -157,7 +162,7 @@ public class Task implements Parcelable {
}
/**
- * See {@link android.app.task.Task.BackoffPolicy} for an explanation of the values this field
+ * See {@link android.app.job.JobInfo.BackoffPolicy} for an explanation of the values this field
* can take. This defaults to exponential.
*/
public int getBackoffPolicy() {
@@ -182,10 +187,10 @@ public class Task implements Parcelable {
return hasLateConstraint;
}
- private Task(Parcel in) {
- taskId = in.readInt();
+ private JobInfo(Parcel in) {
+ jobId = in.readInt();
extras = in.readPersistableBundle();
- service = ComponentName.readFromParcel(in);
+ service = in.readParcelable(null);
requireCharging = in.readInt() == 1;
requireDeviceIdle = in.readInt() == 1;
networkCapabilities = in.readInt();
@@ -199,10 +204,10 @@ public class Task implements Parcelable {
hasLateConstraint = in.readInt() == 1;
}
- private Task(Task.Builder b) {
- taskId = b.mTaskId;
- extras = new PersistableBundle(b.mExtras);
- service = b.mTaskService;
+ private JobInfo(JobInfo.Builder b) {
+ jobId = b.mJobId;
+ extras = b.mExtras;
+ service = b.mJobService;
requireCharging = b.mRequiresCharging;
requireDeviceIdle = b.mRequiresDeviceIdle;
networkCapabilities = b.mNetworkCapabilities;
@@ -223,9 +228,9 @@ public class Task implements Parcelable {
@Override
public void writeToParcel(Parcel out, int flags) {
- out.writeInt(taskId);
+ out.writeInt(jobId);
out.writePersistableBundle(extras);
- ComponentName.writeToParcel(service, out);
+ out.writeParcelable(service, flags);
out.writeInt(requireCharging ? 1 : 0);
out.writeInt(requireDeviceIdle ? 1 : 0);
out.writeInt(networkCapabilities);
@@ -239,23 +244,23 @@ public class Task implements Parcelable {
out.writeInt(hasLateConstraint ? 1 : 0);
}
- public static final Creator<Task> CREATOR = new Creator<Task>() {
+ public static final Creator<JobInfo> CREATOR = new Creator<JobInfo>() {
@Override
- public Task createFromParcel(Parcel in) {
- return new Task(in);
+ public JobInfo createFromParcel(Parcel in) {
+ return new JobInfo(in);
}
@Override
- public Task[] newArray(int size) {
- return new Task[size];
+ public JobInfo[] newArray(int size) {
+ return new JobInfo[size];
}
};
- /** Builder class for constructing {@link Task} objects. */
+ /** Builder class for constructing {@link JobInfo} objects. */
public static final class Builder {
- private int mTaskId;
+ private int mJobId;
private PersistableBundle mExtras = PersistableBundle.EMPTY;
- private ComponentName mTaskService;
+ private ComponentName mJobService;
// Requirements.
private boolean mRequiresCharging;
private boolean mRequiresDeviceIdle;
@@ -275,15 +280,15 @@ public class Task implements Parcelable {
private boolean mBackoffPolicySet = false;
/**
- * @param taskId Application-provided id for this task. Subsequent calls to cancel, or
- * tasks created with the same taskId, will update the pre-existing task with
+ * @param jobId Application-provided id for this job. Subsequent calls to cancel, or
+ * jobs created with the same jobId, will update the pre-existing job with
* the same id.
- * @param taskService The endpoint that you implement that will receive the callback from the
- * TaskManager.
+ * @param jobService The endpoint that you implement that will receive the callback from the
+ * JobScheduler.
*/
- public Builder(int taskId, ComponentName taskService) {
- mTaskService = taskService;
- mTaskId = taskId;
+ public Builder(int jobId, ComponentName jobService) {
+ mJobService = jobService;
+ mJobId = jobId;
}
/**
@@ -297,10 +302,10 @@ public class Task implements Parcelable {
/**
* Set some description of the kind of network capabilities you would like to have. This
- * will be a parameter defined in {@link android.app.task.Task.NetworkType}.
+ * will be a parameter defined in {@link android.app.job.JobInfo.NetworkType}.
* Not calling this function means the network is not necessary.
* Bear in mind that calling this function defines network as a strict requirement for your
- * task if the network requested is not available your task will never run. See
+ * job if the network requested is not available your job will never run. See
* {@link #setOverrideDeadline(long)} to change this behaviour.
*/
public Builder setRequiredNetworkCapabilities(int networkCapabilities) {
@@ -308,10 +313,10 @@ public class Task implements Parcelable {
return this;
}
- /*
- * Specify that to run this task, the device needs to be plugged in. This defaults to
+ /**
+ * Specify that to run this job, the device needs to be plugged in. This defaults to
* false.
- * @param requireCharging Whether or not the device is plugged in.
+ * @param requiresCharging Whether or not the device is plugged in.
*/
public Builder setRequiresCharging(boolean requiresCharging) {
mRequiresCharging = requiresCharging;
@@ -319,11 +324,11 @@ public class Task implements Parcelable {
}
/**
- * Specify that to run, the task needs the device to be in idle mode. This defaults to
+ * Specify that to run, the job needs the device to be in idle mode. This defaults to
* false.
* <p>Idle mode is a loose definition provided by the system, which means that the device
* is not in use, and has not been in use for some time. As such, it is a good time to
- * perform resource heavy tasks. Bear in mind that battery usage will still be attributed
+ * perform resource heavy jobs. Bear in mind that battery usage will still be attributed
* to your application, and surfaced to the user in battery stats.</p>
* @param requiresDeviceIdle Whether or not the device need be within an idle maintenance
* window.
@@ -334,17 +339,17 @@ public class Task implements Parcelable {
}
/**
- * Specify that this task should recur with the provided interval, not more than once per
- * period. You have no control over when within this interval this task will be executed,
+ * Specify that this job should recur with the provided interval, not more than once per
+ * period. You have no control over when within this interval this job will be executed,
* only the guarantee that it will be executed at most once within this interval.
- * A periodic task will be repeated until the phone is turned off, however it will only be
+ * A periodic job will be repeated until the phone is turned off, however it will only be
* persisted beyond boot if the client app has declared the
* {@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission. You can schedule
- * periodic tasks without this permission, they simply will cease to exist after the phone
+ * periodic jobs without this permission, they simply will cease to exist after the phone
* restarts.
* Setting this function on the builder with {@link #setMinimumLatency(long)} or
* {@link #setOverrideDeadline(long)} will result in an error.
- * @param intervalMillis Millisecond interval for which this task will repeat.
+ * @param intervalMillis Millisecond interval for which this job will repeat.
*/
public Builder setPeriodic(long intervalMillis) {
mIsPeriodic = true;
@@ -354,11 +359,11 @@ public class Task implements Parcelable {
}
/**
- * Specify that this task should be delayed by the provided amount of time.
- * Because it doesn't make sense setting this property on a periodic task, doing so will
+ * Specify that this job should be delayed by the provided amount of time.
+ * Because it doesn't make sense setting this property on a periodic job, doing so will
* throw an {@link java.lang.IllegalArgumentException} when
- * {@link android.app.task.Task.Builder#build()} is called.
- * @param minLatencyMillis Milliseconds before which this task will not be considered for
+ * {@link android.app.job.JobInfo.Builder#build()} is called.
+ * @param minLatencyMillis Milliseconds before which this job will not be considered for
* execution.
*/
public Builder setMinimumLatency(long minLatencyMillis) {
@@ -368,11 +373,11 @@ public class Task implements Parcelable {
}
/**
- * Set deadline which is the maximum scheduling latency. The task will be run by this
+ * Set deadline which is the maximum scheduling latency. The job will be run by this
* deadline even if other requirements are not met. Because it doesn't make sense setting
- * this property on a periodic task, doing so will throw an
+ * this property on a periodic job, doing so will throw an
* {@link java.lang.IllegalArgumentException} when
- * {@link android.app.task.Task.Builder#build()} is called.
+ * {@link android.app.job.JobInfo.Builder#build()} is called.
*/
public Builder setOverrideDeadline(long maxExecutionDelayMillis) {
mMaxExecutionDelayMillis = maxExecutionDelayMillis;
@@ -384,13 +389,13 @@ public class Task implements Parcelable {
* Set up the back-off/retry policy.
* This defaults to some respectable values: {5 seconds, Exponential}. We cap back-off at
* 1hr.
- * Note that trying to set a backoff criteria for a task with
+ * Note that trying to set a backoff criteria for a job with
* {@link #setRequiresDeviceIdle(boolean)} will throw an exception when you call build().
- * This is because back-off typically does not make sense for these types of tasks. See
- * {@link android.app.task.TaskService#taskFinished(android.app.task.TaskParams, boolean)}
- * for more description of the return value for the case of a task executing while in idle
+ * This is because back-off typically does not make sense for these types of jobs. See
+ * {@link android.app.job.JobService#jobFinished(android.app.job.JobParameters, boolean)}
+ * for more description of the return value for the case of a job executing while in idle
* mode.
- * @param initialBackoffMillis Millisecond time interval to wait initially when task has
+ * @param initialBackoffMillis Millisecond time interval to wait initially when job has
* failed.
* @param backoffPolicy is one of {@link BackoffPolicy}
*/
@@ -402,25 +407,25 @@ public class Task implements Parcelable {
}
/**
- * @return The task object to hand to the TaskManager. This object is immutable.
+ * @return The job object to hand to the JobScheduler. This object is immutable.
*/
- public Task build() {
+ public JobInfo build() {
mExtras = new PersistableBundle(mExtras); // Make our own copy.
- // Check that a deadline was not set on a periodic task.
+ // Check that a deadline was not set on a periodic job.
if (mIsPeriodic && (mMaxExecutionDelayMillis != 0L)) {
throw new IllegalArgumentException("Can't call setOverrideDeadline() on a " +
- "periodic task.");
+ "periodic job.");
}
if (mIsPeriodic && (mMinLatencyMillis != 0L)) {
throw new IllegalArgumentException("Can't call setMinimumLatency() on a " +
- "periodic task");
+ "periodic job");
}
if (mBackoffPolicySet && mRequiresDeviceIdle) {
- throw new IllegalArgumentException("An idle mode task will not respect any" +
+ throw new IllegalArgumentException("An idle mode job will not respect any" +
" back-off policy, so calling setBackoffCriteria with" +
" setRequiresDeviceIdle is an error.");
}
- return new Task(this);
+ return new JobInfo(this);
}
}
diff --git a/core/java/android/app/task/TaskParams.aidl b/core/java/android/app/job/JobParameters.aidl
index 9b2585581160..e7551b9ab9f2 100644
--- a/core/java/android/app/task/TaskParams.aidl
+++ b/core/java/android/app/job/JobParameters.aidl
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.app.task;
+package android.app.job;
-parcelable TaskParams; \ No newline at end of file
+parcelable JobParameters;
diff --git a/core/java/android/app/task/TaskParams.java b/core/java/android/app/job/JobParameters.java
index f4908c664f20..724856ad3d4e 100644
--- a/core/java/android/app/task/TaskParams.java
+++ b/core/java/android/app/job/JobParameters.java
@@ -14,40 +14,42 @@
* limitations under the License
*/
-package android.app.task;
+package android.app.job;
+import android.app.job.IJobCallback;
+import android.app.job.IJobCallback.Stub;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
/**
- * Contains the parameters used to configure/identify your task. You do not create this object
+ * Contains the parameters used to configure/identify your job. You do not create this object
* yourself, instead it is handed in to your application by the System.
*/
-public class TaskParams implements Parcelable {
+public class JobParameters implements Parcelable {
- private final int taskId;
+ private final int jobId;
private final PersistableBundle extras;
private final IBinder callback;
/** @hide */
- public TaskParams(int taskId, PersistableBundle extras, IBinder callback) {
- this.taskId = taskId;
+ public JobParameters(int jobId, PersistableBundle extras, IBinder callback) {
+ this.jobId = jobId;
this.extras = extras;
this.callback = callback;
}
/**
- * @return The unique id of this task, specified at creation time.
+ * @return The unique id of this job, specified at creation time.
*/
- public int getTaskId() {
- return taskId;
+ public int getJobId() {
+ return jobId;
}
/**
- * @return The extras you passed in when constructing this task with
- * {@link android.app.task.Task.Builder#setExtras(android.os.PersistableBundle)}. This will
+ * @return The extras you passed in when constructing this job with
+ * {@link android.app.job.JobInfo.Builder#setExtras(android.os.PersistableBundle)}. This will
* never be null. If you did not set any extras this will be an empty bundle.
*/
public PersistableBundle getExtras() {
@@ -55,12 +57,12 @@ public class TaskParams implements Parcelable {
}
/** @hide */
- public ITaskCallback getCallback() {
- return ITaskCallback.Stub.asInterface(callback);
+ public IJobCallback getCallback() {
+ return IJobCallback.Stub.asInterface(callback);
}
- private TaskParams(Parcel in) {
- taskId = in.readInt();
+ private JobParameters(Parcel in) {
+ jobId = in.readInt();
extras = in.readPersistableBundle();
callback = in.readStrongBinder();
}
@@ -72,20 +74,20 @@ public class TaskParams implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(taskId);
+ dest.writeInt(jobId);
dest.writePersistableBundle(extras);
dest.writeStrongBinder(callback);
}
- public static final Creator<TaskParams> CREATOR = new Creator<TaskParams>() {
+ public static final Creator<JobParameters> CREATOR = new Creator<JobParameters>() {
@Override
- public TaskParams createFromParcel(Parcel in) {
- return new TaskParams(in);
+ public JobParameters createFromParcel(Parcel in) {
+ return new JobParameters(in);
}
@Override
- public TaskParams[] newArray(int size) {
- return new TaskParams[size];
+ public JobParameters[] newArray(int size) {
+ return new JobParameters[size];
}
};
}
diff --git a/core/java/android/app/job/JobScheduler.java b/core/java/android/app/job/JobScheduler.java
new file mode 100644
index 000000000000..7fe192c0b472
--- /dev/null
+++ b/core/java/android/app/job/JobScheduler.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.app.job;
+
+import java.util.List;
+
+import android.content.Context;
+
+/**
+ * Class for scheduling various types of jobs with the scheduling framework on the device.
+ *
+ * <p>You do not
+ * instantiate this class directly; instead, retrieve it through
+ * {@link android.content.Context#getSystemService
+ * Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)}.
+ */
+public abstract class JobScheduler {
+ /**
+ * Returned from {@link #schedule(JobInfo)} when an invalid parameter was supplied. This can occur
+ * if the run-time for your job is too short, or perhaps the system can't resolve the
+ * requisite {@link JobService} in your package.
+ */
+ public static final int RESULT_FAILURE = 0;
+ /**
+ * Returned from {@link #schedule(JobInfo)} if this application has made too many requests for
+ * work over too short a time.
+ */
+ // TODO: Determine if this is necessary.
+ public static final int RESULT_SUCCESS = 1;
+
+ /**
+ * @param job The job you wish scheduled. See
+ * {@link android.app.job.JobInfo.Builder JobInfo.Builder} for more detail on the sorts of jobs
+ * you can schedule.
+ * @return If >0, this int returns the jobId of the successfully scheduled job.
+ * Otherwise you have to compare the return value to the error codes defined in this class.
+ */
+ public abstract int schedule(JobInfo job);
+
+ /**
+ * Cancel a job that is pending in the JobScheduler.
+ * @param jobId unique identifier for this job. Obtain this value from the jobs returned by
+ * {@link #getAllPendingJobs()}.
+ * @return
+ */
+ public abstract void cancel(int jobId);
+
+ /**
+ * Cancel all jobs that have been registered with the JobScheduler by this package.
+ */
+ public abstract void cancelAll();
+
+ /**
+ * @return a list of all the jobs registered by this package that have not yet been executed.
+ */
+ public abstract List<JobInfo> getAllPendingJobs();
+
+}
diff --git a/core/java/android/app/task/TaskService.java b/core/java/android/app/job/JobService.java
index 8ce4484a83ba..eea02686549b 100644
--- a/core/java/android/app/task/TaskService.java
+++ b/core/java/android/app/job/JobService.java
@@ -14,9 +14,12 @@
* limitations under the License
*/
-package android.app.task;
+package android.app.job;
import android.app.Service;
+import android.app.job.IJobCallback;
+import android.app.job.IJobService;
+import android.app.job.IJobService.Stub;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
@@ -28,72 +31,72 @@ import android.util.Log;
import com.android.internal.annotations.GuardedBy;
/**
- * <p>Entry point for the callback from the {@link android.app.task.TaskManager}.</p>
+ * <p>Entry point for the callback from the {@link android.app.job.JobScheduler}.</p>
* <p>This is the base class that handles asynchronous requests that were previously scheduled. You
- * are responsible for overriding {@link TaskService#onStartTask(TaskParams)}, which is where
- * you will implement your task logic.</p>
- * <p>This service executes each incoming task on a {@link android.os.Handler} running on your
+ * are responsible for overriding {@link JobService#onStartJob(JobParameters)}, which is where
+ * you will implement your job logic.</p>
+ * <p>This service executes each incoming job on a {@link android.os.Handler} running on your
* application's main thread. This means that you <b>must</b> offload your execution logic to
* another thread/handler/{@link android.os.AsyncTask} of your choosing. Not doing so will result
- * in blocking any future callbacks from the TaskManager - specifically
- * {@link #onStopTask(android.app.task.TaskParams)}, which is meant to inform you that the
+ * in blocking any future callbacks from the JobManager - specifically
+ * {@link #onStopJob(android.app.job.JobParameters)}, which is meant to inform you that the
* scheduling requirements are no longer being met.</p>
*/
-public abstract class TaskService extends Service {
- private static final String TAG = "TaskService";
+public abstract class JobService extends Service {
+ private static final String TAG = "JobService";
/**
- * Task services must be protected with this permission:
+ * Job services must be protected with this permission:
*
* <pre class="prettyprint">
- * <service android:name="MyTaskService"
- * android:permission="android.permission.BIND_TASK_SERVICE" >
+ * <service android:name="MyJobService"
+ * android:permission="android.permission.BIND_JOB_SERVICE" >
* ...
* </service>
* </pre>
*
- * <p>If a task service is declared in the manifest but not protected with this
+ * <p>If a job service is declared in the manifest but not protected with this
* permission, that service will be ignored by the OS.
*/
public static final String PERMISSION_BIND =
- "android.permission.BIND_TASK_SERVICE";
+ "android.permission.BIND_JOB_SERVICE";
/**
* Identifier for a message that will result in a call to
- * {@link #onStartTask(android.app.task.TaskParams)}.
+ * {@link #onStartJob(android.app.job.JobParameters)}.
*/
- private final int MSG_EXECUTE_TASK = 0;
+ private final int MSG_EXECUTE_JOB = 0;
/**
- * Message that will result in a call to {@link #onStopTask(android.app.task.TaskParams)}.
+ * Message that will result in a call to {@link #onStopJob(android.app.job.JobParameters)}.
*/
- private final int MSG_STOP_TASK = 1;
+ private final int MSG_STOP_JOB = 1;
/**
- * Message that the client has completed execution of this task.
+ * Message that the client has completed execution of this job.
*/
- private final int MSG_TASK_FINISHED = 2;
+ private final int MSG_JOB_FINISHED = 2;
/** Lock object for {@link #mHandler}. */
private final Object mHandlerLock = new Object();
/**
- * Handler we post tasks to. Responsible for calling into the client logic, and handling the
+ * Handler we post jobs to. Responsible for calling into the client logic, and handling the
* callback to the system.
*/
@GuardedBy("mHandlerLock")
- TaskHandler mHandler;
+ JobHandler mHandler;
/** Binder for this service. */
- ITaskService mBinder = new ITaskService.Stub() {
+ IJobService mBinder = new IJobService.Stub() {
@Override
- public void startTask(TaskParams taskParams) {
+ public void startJob(JobParameters jobParams) {
ensureHandler();
- Message m = Message.obtain(mHandler, MSG_EXECUTE_TASK, taskParams);
+ Message m = Message.obtain(mHandler, MSG_EXECUTE_JOB, jobParams);
m.sendToTarget();
}
@Override
- public void stopTask(TaskParams taskParams) {
+ public void stopJob(JobParameters jobParams) {
ensureHandler();
- Message m = Message.obtain(mHandler, MSG_STOP_TASK, taskParams);
+ Message m = Message.obtain(mHandler, MSG_STOP_JOB, jobParams);
m.sendToTarget();
}
};
@@ -102,7 +105,7 @@ public abstract class TaskService extends Service {
void ensureHandler() {
synchronized (mHandlerLock) {
if (mHandler == null) {
- mHandler = new TaskHandler(getMainLooper());
+ mHandler = new JobHandler(getMainLooper());
}
}
}
@@ -112,45 +115,45 @@ public abstract class TaskService extends Service {
* (app-specified) mechanism.
* @hide
*/
- class TaskHandler extends Handler {
- TaskHandler(Looper looper) {
+ class JobHandler extends Handler {
+ JobHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
- final TaskParams params = (TaskParams) msg.obj;
+ final JobParameters params = (JobParameters) msg.obj;
switch (msg.what) {
- case MSG_EXECUTE_TASK:
+ case MSG_EXECUTE_JOB:
try {
- boolean workOngoing = TaskService.this.onStartTask(params);
+ boolean workOngoing = JobService.this.onStartJob(params);
ackStartMessage(params, workOngoing);
} catch (Exception e) {
- Log.e(TAG, "Error while executing task: " + params.getTaskId());
+ Log.e(TAG, "Error while executing job: " + params.getJobId());
throw new RuntimeException(e);
}
break;
- case MSG_STOP_TASK:
+ case MSG_STOP_JOB:
try {
- boolean ret = TaskService.this.onStopTask(params);
+ boolean ret = JobService.this.onStopJob(params);
ackStopMessage(params, ret);
} catch (Exception e) {
- Log.e(TAG, "Application unable to handle onStopTask.", e);
+ Log.e(TAG, "Application unable to handle onStopJob.", e);
throw new RuntimeException(e);
}
break;
- case MSG_TASK_FINISHED:
+ case MSG_JOB_FINISHED:
final boolean needsReschedule = (msg.arg2 == 1);
- ITaskCallback callback = params.getCallback();
+ IJobCallback callback = params.getCallback();
if (callback != null) {
try {
- callback.taskFinished(params.getTaskId(), needsReschedule);
+ callback.jobFinished(params.getJobId(), needsReschedule);
} catch (RemoteException e) {
- Log.e(TAG, "Error reporting task finish to system: binder has gone" +
+ Log.e(TAG, "Error reporting job finish to system: binder has gone" +
"away.");
}
} else {
- Log.e(TAG, "finishTask() called for a nonexistent task id.");
+ Log.e(TAG, "finishJob() called for a nonexistent job id.");
}
break;
default:
@@ -159,34 +162,34 @@ public abstract class TaskService extends Service {
}
}
- private void ackStartMessage(TaskParams params, boolean workOngoing) {
- final ITaskCallback callback = params.getCallback();
- final int taskId = params.getTaskId();
+ private void ackStartMessage(JobParameters params, boolean workOngoing) {
+ final IJobCallback callback = params.getCallback();
+ final int jobId = params.getJobId();
if (callback != null) {
try {
- callback.acknowledgeStartMessage(taskId, workOngoing);
+ callback.acknowledgeStartMessage(jobId, workOngoing);
} catch(RemoteException e) {
- Log.e(TAG, "System unreachable for starting task.");
+ Log.e(TAG, "System unreachable for starting job.");
}
} else {
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Attempting to ack a task that has already been processed.");
+ Log.d(TAG, "Attempting to ack a job that has already been processed.");
}
}
}
- private void ackStopMessage(TaskParams params, boolean reschedule) {
- final ITaskCallback callback = params.getCallback();
- final int taskId = params.getTaskId();
+ private void ackStopMessage(JobParameters params, boolean reschedule) {
+ final IJobCallback callback = params.getCallback();
+ final int jobId = params.getJobId();
if (callback != null) {
try {
- callback.acknowledgeStopMessage(taskId, reschedule);
+ callback.acknowledgeStopMessage(jobId, reschedule);
} catch(RemoteException e) {
- Log.e(TAG, "System unreachable for stopping task.");
+ Log.e(TAG, "System unreachable for stopping job.");
}
} else {
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Attempting to ack a task that has already been processed.");
+ Log.d(TAG, "Attempting to ack a job that has already been processed.");
}
}
}
@@ -198,59 +201,59 @@ public abstract class TaskService extends Service {
}
/**
- * Override this method with the callback logic for your task. Any such logic needs to be
+ * Override this method with the callback logic for your job. Any such logic needs to be
* performed on a separate thread, as this function is executed on your application's main
* thread.
*
- * @param params Parameters specifying info about this task, including the extras bundle you
- * optionally provided at task-creation time.
+ * @param params Parameters specifying info about this job, including the extras bundle you
+ * optionally provided at job-creation time.
* @return True if your service needs to process the work (on a separate thread). False if
- * there's no more work to be done for this task.
+ * there's no more work to be done for this job.
*/
- public abstract boolean onStartTask(TaskParams params);
+ public abstract boolean onStartJob(JobParameters params);
/**
- * This method is called if the system has determined that you must stop execution of your task
- * even before you've had a chance to call {@link #taskFinished(TaskParams, boolean)}.
+ * This method is called if the system has determined that you must stop execution of your job
+ * even before you've had a chance to call {@link #jobFinished(JobParameters, boolean)}.
*
* <p>This will happen if the requirements specified at schedule time are no longer met. For
* example you may have requested WiFi with
- * {@link android.app.task.Task.Builder#setRequiredNetworkCapabilities(int)}, yet while your
- * task was executing the user toggled WiFi. Another example is if you had specified
- * {@link android.app.task.Task.Builder#setRequiresDeviceIdle(boolean)}, and the phone left its
+ * {@link android.app.job.JobInfo.Builder#setRequiredNetworkCapabilities(int)}, yet while your
+ * job was executing the user toggled WiFi. Another example is if you had specified
+ * {@link android.app.job.JobInfo.Builder#setRequiresDeviceIdle(boolean)}, and the phone left its
* idle maintenance window. You are solely responsible for the behaviour of your application
* upon receipt of this message; your app will likely start to misbehave if you ignore it. One
* immediate repercussion is that the system will cease holding a wakelock for you.</p>
*
- * @param params Parameters specifying info about this task.
- * @return True to indicate to the TaskManager whether you'd like to reschedule this task based
- * on the retry criteria provided at task creation-time. False to drop the task. Regardless of
- * the value returned, your task must stop executing.
+ * @param params Parameters specifying info about this job.
+ * @return True to indicate to the JobManager whether you'd like to reschedule this job based
+ * on the retry criteria provided at job creation-time. False to drop the job. Regardless of
+ * the value returned, your job must stop executing.
*/
- public abstract boolean onStopTask(TaskParams params);
+ public abstract boolean onStopJob(JobParameters params);
/**
- * Callback to inform the TaskManager you've finished executing. This can be called from any
+ * Callback to inform the JobManager you've finished executing. This can be called from any
* thread, as it will ultimately be run on your application's main thread. When the system
* receives this message it will release the wakelock being held.
* <p>
* You can specify post-execution behaviour to the scheduler here with
- * <code>needsReschedule </code>. This will apply a back-off timer to your task based on
+ * <code>needsReschedule </code>. This will apply a back-off timer to your job based on
* the default, or what was set with
- * {@link android.app.task.Task.Builder#setBackoffCriteria(long, int)}. The original
- * requirements are always honoured even for a backed-off task. Note that a task running in
- * idle mode will not be backed-off. Instead what will happen is the task will be re-added
+ * {@link android.app.job.JobInfo.Builder#setBackoffCriteria(long, int)}. The original
+ * requirements are always honoured even for a backed-off job. Note that a job running in
+ * idle mode will not be backed-off. Instead what will happen is the job will be re-added
* to the queue and re-executed within a future idle maintenance window.
* </p>
*
- * @param params Parameters specifying system-provided info about this task, this was given to
- * your application in {@link #onStartTask(TaskParams)}.
- * @param needsReschedule True if this task is complete, false if you want the TaskManager to
+ * @param params Parameters specifying system-provided info about this job, this was given to
+ * your application in {@link #onStartJob(JobParameters)}.
+ * @param needsReschedule True if this job is complete, false if you want the JobManager to
* reschedule you.
*/
- public final void taskFinished(TaskParams params, boolean needsReschedule) {
+ public final void jobFinished(JobParameters params, boolean needsReschedule) {
ensureHandler();
- Message m = Message.obtain(mHandler, MSG_TASK_FINISHED, params);
+ Message m = Message.obtain(mHandler, MSG_JOB_FINISHED, params);
m.arg2 = needsReschedule ? 1 : 0;
m.sendToTarget();
}
diff --git a/core/java/android/app/maintenance/package.html b/core/java/android/app/maintenance/package.html
new file mode 100644
index 000000000000..1c9bf9dad835
--- /dev/null
+++ b/core/java/android/app/maintenance/package.html
@@ -0,0 +1,5 @@
+<html>
+<body>
+ {@hide}
+</body>
+</html>
diff --git a/core/java/android/app/task/TaskManager.java b/core/java/android/app/task/TaskManager.java
deleted file mode 100644
index 00f57dac76d6..000000000000
--- a/core/java/android/app/task/TaskManager.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package android.app.task;
-
-import java.util.List;
-
-import android.content.Context;
-
-/**
- * Class for scheduling various types of tasks with the scheduling framework on the device.
- *
- * <p>You do not
- * instantiate this class directly; instead, retrieve it through
- * {@link android.content.Context#getSystemService
- * Context.getSystemService(Context.TASK_SERVICE)}.
- */
-public abstract class TaskManager {
- /*
- * Returned from {@link #schedule(Task)} when an invalid parameter was supplied. This can occur
- * if the run-time for your task is too short, or perhaps the system can't resolve the
- * requisite {@link TaskService} in your package.
- */
- public static final int RESULT_FAILURE = 0;
- /**
- * Returned from {@link #schedule(Task)} if this application has made too many requests for
- * work over too short a time.
- */
- // TODO: Determine if this is necessary.
- public static final int RESULT_SUCCESS = 1;
-
- /**
- * @param task The task you wish scheduled. See
- * {@link android.app.task.Task.Builder Task.Builder} for more detail on the sorts of tasks
- * you can schedule.
- * @return If >0, this int returns the taskId of the successfully scheduled task.
- * Otherwise you have to compare the return value to the error codes defined in this class.
- */
- public abstract int schedule(Task task);
-
- /**
- * Cancel a task that is pending in the TaskManager.
- * @param taskId unique identifier for this task. Obtain this value from the tasks returned by
- * {@link #getAllPendingTasks()}.
- * @return
- */
- public abstract void cancel(int taskId);
-
- /**
- * Cancel all tasks that have been registered with the TaskManager by this package.
- */
- public abstract void cancelAll();
-
- /**
- * @return a list of all the tasks registered by this package that have not yet been executed.
- */
- public abstract List<Task> getAllPendingTasks();
-
-}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index e8885bfd8139..cdcfd2ec5733 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
+import android.annotation.SystemApi;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
@@ -2058,7 +2059,7 @@ public abstract class Context {
PRINT_SERVICE,
MEDIA_SESSION_SERVICE,
BATTERY_SERVICE,
- TASK_SERVICE,
+ JOB_SCHEDULER_SERVICE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ServiceName {}
@@ -2115,8 +2116,8 @@ public abstract class Context {
* <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
* <dt> {@link #BATTERY_SERVICE} ("batterymanager")
* <dd> A {@link android.os.BatteryManager} for managing battery state
- * <dt> {@link #TASK_SERVICE} ("taskmanager")
- * <dd> A {@link android.app.task.TaskManager} for managing scheduled tasks
+ * <dt> {@link #JOB_SCHEDULER_SERVICE} ("taskmanager")
+ * <dd> A {@link android.app.job.JobScheduler} for managing scheduled tasks
* </dl>
*
* <p>Note: System services obtained via this API may be closely associated with
@@ -2148,8 +2149,6 @@ public abstract class Context {
* @see android.app.SearchManager
* @see #SENSOR_SERVICE
* @see android.hardware.SensorManager
- * @see #HDMI_CEC_SERVICE
- * @see android.hardware.hdmi.HdmiCecManager
* @see #STORAGE_SERVICE
* @see android.os.storage.StorageManager
* @see #VIBRATOR_SERVICE
@@ -2172,8 +2171,8 @@ public abstract class Context {
* @see android.app.DownloadManager
* @see #BATTERY_SERVICE
* @see android.os.BatteryManager
- * @see #TASK_SERVICE
- * @see android.app.task.TaskManager
+ * @see #JOB_SCHEDULER_SERVICE
+ * @see android.app.job.JobScheduler
*/
public abstract Object getSystemService(@ServiceName @NonNull String name);
@@ -2461,6 +2460,7 @@ public abstract class Context {
*
* @see #getSystemService
* @see android.app.FingerprintManager
+ * @hide
*/
public static final String FINGERPRINT_SERVICE = "fingerprint";
@@ -2637,23 +2637,14 @@ public abstract class Context {
/**
* Use with {@link #getSystemService} to retrieve a
- * {@link android.hardware.hdmi.HdmiCecManager} for controlling and managing
- * HDMI-CEC protocol.
- *
- * @see #getSystemService
- * @see android.hardware.hdmi.HdmiCecManager
- */
- // TODO: Remove this once HdmiControlService is ready.
- public static final String HDMI_CEC_SERVICE = "hdmi_cec";
-
- /**
- * Use with {@link #getSystemService} to retrieve a
* {@link android.hardware.hdmi.HdmiControlManager} for controlling and managing
* HDMI-CEC protocol.
*
* @see #getSystemService
* @see android.hardware.hdmi.HdmiControlManager
+ * @hide
*/
+ @SystemApi
public static final String HDMI_CONTROL_SERVICE = "hdmi_control";
/**
@@ -2770,12 +2761,12 @@ public abstract class Context {
/**
* Use with {@link #getSystemService} to retrieve a {@link
- * android.app.task.TaskManager} instance for managing occasional
+ * android.app.job.JobScheduler} instance for managing occasional
* background tasks.
* @see #getSystemService
- * @see android.app.task.TaskManager
+ * @see android.app.job.JobScheduler
*/
- public static final String TASK_SERVICE = "task";
+ public static final String JOB_SCHEDULER_SERVICE = "jobscheduler";
/**
* Determine whether the given permission is allowed for a particular
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index bd07470ee583..6e53a6fb5969 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2656,7 +2656,9 @@ public class Intent implements Parcelable, Cloneable {
/**
* Broadcast sent to the primary user when an associated managed profile is added (the profile
* was created and is ready to be used). Carries an extra {@link #EXTRA_USER} that specifies
- * the UserHandle of the profile that was added. This is only sent to registered receivers,
+ * the UserHandle of the profile that was added. Only applications (for example Launchers)
+ * that need to display merged content across both primary and managed profiles need to
+ * worry about this broadcast. This is only sent to registered receivers,
* not manifest receivers.
*/
public static final String ACTION_MANAGED_PROFILE_ADDED =
@@ -2664,8 +2666,10 @@ public class Intent implements Parcelable, Cloneable {
/**
* Broadcast sent to the primary user when an associated managed profile is removed. Carries an
- * extra {@link #EXTRA_USER} that specifies the UserHandle of the profile that was removed. This
- * is only sent to registered receivers, not manifest receivers.
+ * extra {@link #EXTRA_USER} that specifies the UserHandle of the profile that was removed.
+ * Only applications (for example Launchers) that need to display merged content across both
+ * primary and managed profiles need to worry about this broadcast. This is only sent to
+ * registered receivers, not manifest receivers.
*/
public static final String ACTION_MANAGED_PROFILE_REMOVED =
"android.intent.action.MANAGED_PROFILE_REMOVED";
@@ -2731,6 +2735,7 @@ public class Intent implements Parcelable, Cloneable {
* returned in {@link #getClipData()}.
*
* @see DocumentsContract
+ * @see #ACTION_OPEN_DOCUMENT_TREE
* @see #ACTION_CREATE_DOCUMENT
* @see #FLAG_GRANT_PERSISTABLE_URI_PERMISSION
*/
@@ -2765,28 +2770,30 @@ public class Intent implements Parcelable, Cloneable {
*
* @see DocumentsContract
* @see #ACTION_OPEN_DOCUMENT
+ * @see #ACTION_OPEN_DOCUMENT_TREE
* @see #FLAG_GRANT_PERSISTABLE_URI_PERMISSION
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
/**
- * Activity Action: Allow the user to pick a directory. When invoked, the
- * system will display the various {@link DocumentsProvider} instances
- * installed on the device, letting the user navigate through them. Apps can
- * fully manage documents within the returned directory.
+ * Activity Action: Allow the user to pick a directory subtree. When
+ * invoked, the system will display the various {@link DocumentsProvider}
+ * instances installed on the device, letting the user navigate through
+ * them. Apps can fully manage documents within the returned directory.
* <p>
* To gain access to descendant (child, grandchild, etc) documents, use
- * {@link DocumentsContract#buildDocumentViaUri(Uri, String)} and
- * {@link DocumentsContract#buildChildDocumentsViaUri(Uri, String)} using
- * the returned directory URI.
+ * {@link DocumentsContract#buildDocumentUriUsingTree(Uri, String)} and
+ * {@link DocumentsContract#buildChildDocumentsUriUsingTree(Uri, String)}
+ * with the returned URI.
* <p>
- * Output: The URI representing the selected directory.
+ * Output: The URI representing the selected directory tree.
*
* @see DocumentsContract
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
- public static final String ACTION_PICK_DIRECTORY = "android.intent.action.PICK_DIRECTORY";
+ public static final String
+ ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
@@ -2976,14 +2983,6 @@ public class Intent implements Parcelable, Cloneable {
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE";
- /**
- * An activity that provides a user interface for adjusting notification preferences for its
- * containing application. Optional but recommended for apps that post
- * {@link android.app.Notification Notifications}.
- */
- @SdkConstant(SdkConstantType.INTENT_CATEGORY)
- public static final String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
-
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Application launch intent categories (see addCategory()).
@@ -3373,8 +3372,8 @@ public class Intent implements Parcelable, Cloneable {
*
* @see #ACTION_GET_CONTENT
* @see #ACTION_OPEN_DOCUMENT
+ * @see #ACTION_OPEN_DOCUMENT_TREE
* @see #ACTION_CREATE_DOCUMENT
- * @see #ACTION_PICK_DIRECTORY
*/
public static final String EXTRA_LOCAL_ONLY =
"android.intent.extra.LOCAL_ONLY";
@@ -3712,30 +3711,8 @@ public class Intent implements Parcelable, Cloneable {
*/
public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 0x00100000;
/**
- * If set, this marks a point in the task's activity stack that should
- * be cleared when the task is reset. That is, the next time the task
- * is brought to the foreground with
- * {@link #FLAG_ACTIVITY_RESET_TASK_IF_NEEDED} (typically as a result of
- * the user re-launching it from home), this activity and all on top of
- * it will be finished so that the user does not return to them, but
- * instead returns to whatever activity preceeded it.
- *
- * <p>When this flag is assigned to the root activity all activities up
- * to, but not including the root activity, will be cleared. This prevents
- * this flag from being used to finish all activities in a task and thereby
- * ending the task.
- *
- * <p>This is useful for cases where you have a logical break in your
- * application. For example, an e-mail application may have a command
- * to view an attachment, which launches an image view activity to
- * display it. This activity should be part of the e-mail application's
- * task, since it is a part of the task the user is involved in. However,
- * if the user leaves that task, and later selects the e-mail app from
- * home, we may like them to return to the conversation they were
- * viewing, not the picture attachment, since that is confusing. By
- * setting this flag when launching the image viewer, that viewer and
- * any activities it starts will be removed the next time the user returns
- * to mail.
+ * @deprecated As of API 21 this performs identically to
+ * {@link #FLAG_ACTIVITY_NEW_DOCUMENT} which should be used instead of this.
*/
public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 0x00080000;
/**
@@ -3762,8 +3739,7 @@ public class Intent implements Parcelable, Cloneable {
* @see android.R.attr#documentLaunchMode
* @see #FLAG_ACTIVITY_MULTIPLE_TASK
*/
- public static final int FLAG_ACTIVITY_NEW_DOCUMENT =
- FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | FLAG_ACTIVITY_NEW_TASK;
+ public static final int FLAG_ACTIVITY_NEW_DOCUMENT = FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
/**
* If set, this flag will prevent the normal {@link android.app.Activity#onUserLeaveHint}
* callback from occurring on the current frontmost activity before it is
diff --git a/core/java/android/content/SyncRequest.java b/core/java/android/content/SyncRequest.java
index 869f85c900c5..7619c6d53bd4 100644
--- a/core/java/android/content/SyncRequest.java
+++ b/core/java/android/content/SyncRequest.java
@@ -21,6 +21,11 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
+/**
+ * Convenience class to construct sync requests. See {@link android.content.SyncRequest.Builder}
+ * for an explanation of the various functions. The resulting object is passed through to the
+ * framework via {@link android.content.ContentResolver#requestSync(SyncRequest)}.
+ */
public class SyncRequest implements Parcelable {
private static final String TAG = "SyncRequest";
/** Account to pass to the sync adapter. Can be null. */
@@ -57,6 +62,10 @@ public class SyncRequest implements Parcelable {
return mIsPeriodic;
}
+ /**
+ * {@hide}
+ * @return whether this sync is expedited.
+ */
public boolean isExpedited() {
return mIsExpedited;
}
@@ -199,14 +208,8 @@ public class SyncRequest implements Parcelable {
* discriminate between equivalent syncs.
*/
private Bundle mSyncConfigExtras;
- /** Expected upload transfer in bytes. */
- private long mTxBytes = -1L;
- /** Expected download transfer in bytes. */
- private long mRxBytes = -1L;
/** Whether or not this sync can occur on metered networks. Default false. */
private boolean mDisallowMetered;
- /** Priority of this sync relative to others from calling app [-2, 2]. Default 0. */
- private int mPriority = 0;
/**
* Whether this builder is building a periodic sync, or a one-time sync.
*/
@@ -314,7 +317,6 @@ public class SyncRequest implements Parcelable {
return this;
}
- /** {@hide} */
private void setupInterval(long at, long before) {
if (before > at) {
throw new IllegalArgumentException("Specified run time for the sync must be" +
@@ -477,18 +479,6 @@ public class SyncRequest implements Parcelable {
}
/**
- * @param priority the priority of this request among all requests from the calling app.
- * Range of [-2,2] similar to how this is done with notifications.
- */
- public Builder setPriority(int priority) {
- if (priority < -2 || priority > 2) {
- throw new IllegalArgumentException("Priority must be within range [-2, 2]");
- }
- mPriority = priority;
- return this;
- }
-
- /**
* Performs validation over the request and throws the runtime exception
* <code>IllegalArgumentException</code> if this validation fails.
*
@@ -522,9 +512,6 @@ public class SyncRequest implements Parcelable {
mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, true);
mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, true);
}
- mSyncConfigExtras.putLong(ContentResolver.SYNC_EXTRAS_EXPECTED_UPLOAD, mTxBytes);
- mSyncConfigExtras.putLong(ContentResolver.SYNC_EXTRAS_EXPECTED_DOWNLOAD, mRxBytes);
- mSyncConfigExtras.putInt(ContentResolver.SYNC_EXTRAS_PRIORITY, mPriority);
if (mSyncType == SYNC_TYPE_PERIODIC) {
// If this is a periodic sync ensure than invalid extras were not set.
if (ContentResolver.invalidPeriodicExtras(mCustomExtras) ||
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index c2fe3a2fcddf..791e5aa46c7f 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -84,6 +84,11 @@ public class ActivityInfo extends ComponentInfo
*/
public static final int DOCUMENT_LAUNCH_ALWAYS = 2;
/**
+ * Constant corresponding to <code>never</code> in
+ * the {@link android.R.attr#documentLaunchMode} attribute.
+ */
+ public static final int DOCUMENT_LAUNCH_NEVER = 3;
+ /**
* The document launch mode style requested by the activity. From the
* {@link android.R.attr#documentLaunchMode} attribute, one of
* {@link #DOCUMENT_LAUNCH_NONE}, {@link #DOCUMENT_LAUNCH_INTO_EXISTING},
@@ -99,6 +104,12 @@ public class ActivityInfo extends ComponentInfo
public int documentLaunchMode;
/**
+ * The maximum number of tasks rooted at this activity that can be in the recent task list.
+ * Refer to {@link android.R.attr#maxRecents}.
+ */
+ public int maxRecents;
+
+ /**
* Optional name of a permission required to be able to access this
* Activity. From the "permission" attribute.
*/
diff --git a/core/java/android/content/pm/ContainerEncryptionParams.java b/core/java/android/content/pm/ContainerEncryptionParams.java
index dd1332bd4745..ab3aa27cfeb6 100644
--- a/core/java/android/content/pm/ContainerEncryptionParams.java
+++ b/core/java/android/content/pm/ContainerEncryptionParams.java
@@ -16,7 +16,7 @@
package android.content.pm;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -35,7 +35,7 @@ import javax.crypto.spec.IvParameterSpec;
* @deprecated encrypted containers are legacy.
* @hide
*/
-@PrivateApi
+@SystemApi
@Deprecated
public class ContainerEncryptionParams implements Parcelable {
protected static final String TAG = "ContainerEncryptionParams";
diff --git a/core/java/android/content/pm/ManifestDigest.java b/core/java/android/content/pm/ManifestDigest.java
index 943534fdec59..1fbef7a5d3c7 100644
--- a/core/java/android/content/pm/ManifestDigest.java
+++ b/core/java/android/content/pm/ManifestDigest.java
@@ -16,7 +16,7 @@
package android.content.pm;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Slog;
@@ -37,7 +37,7 @@ import libcore.io.IoUtils;
*
* @hide
*/
-@PrivateApi
+@SystemApi
public class ManifestDigest implements Parcelable {
private static final String TAG = "ManifestDigest";
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 35bcc027bd0f..0ba7180f28fe 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -17,7 +17,7 @@
package android.content.pm;
import android.annotation.IntDef;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.PackageInstallObserver;
@@ -370,7 +370,7 @@ public abstract class PackageManager {
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} on success.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_SUCCEEDED = 1;
/**
@@ -379,7 +379,7 @@ public abstract class PackageManager {
* already installed.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
/**
@@ -388,7 +388,7 @@ public abstract class PackageManager {
* file is invalid.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_INVALID_APK = -2;
/**
@@ -397,7 +397,7 @@ public abstract class PackageManager {
* is invalid.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_INVALID_URI = -3;
/**
@@ -406,7 +406,7 @@ public abstract class PackageManager {
* service found that the device didn't have enough storage space to install the app.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
/**
@@ -415,7 +415,7 @@ public abstract class PackageManager {
* package is already installed with the same name.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
/**
@@ -424,7 +424,7 @@ public abstract class PackageManager {
* the requested shared user does not exist.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
/**
@@ -434,7 +434,7 @@ public abstract class PackageManager {
* than the new package (and the old package's data was not removed).
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
/**
@@ -444,7 +444,7 @@ public abstract class PackageManager {
* device and does not have matching signature.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
/**
@@ -453,7 +453,7 @@ public abstract class PackageManager {
* the new package uses a shared library that is not available.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
/**
@@ -462,7 +462,7 @@ public abstract class PackageManager {
* the new package uses a shared library that is not available.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
/**
@@ -472,7 +472,7 @@ public abstract class PackageManager {
* either because there was not enough storage or the validation failed.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_DEXOPT = -11;
/**
@@ -482,7 +482,7 @@ public abstract class PackageManager {
* that required by the package.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_OLDER_SDK = -12;
/**
@@ -492,7 +492,7 @@ public abstract class PackageManager {
* same authority as a provider already installed in the system.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
/**
@@ -502,7 +502,7 @@ public abstract class PackageManager {
* that required by the package.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_NEWER_SDK = -14;
/**
@@ -513,7 +513,7 @@ public abstract class PackageManager {
* flag.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_TEST_ONLY = -15;
/**
@@ -523,7 +523,7 @@ public abstract class PackageManager {
* compatible with the the device's CPU_ABI.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
/**
@@ -532,7 +532,7 @@ public abstract class PackageManager {
* the new package uses a feature that is not available.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
// ------ Errors related to sdcard
@@ -542,7 +542,7 @@ public abstract class PackageManager {
* a secure container mount point couldn't be accessed on external media.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
/**
@@ -552,7 +552,7 @@ public abstract class PackageManager {
* location.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
/**
@@ -562,7 +562,7 @@ public abstract class PackageManager {
* location because the media is not available.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
/**
@@ -571,7 +571,7 @@ public abstract class PackageManager {
* the new package couldn't be installed because the verification timed out.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
/**
@@ -580,7 +580,7 @@ public abstract class PackageManager {
* the new package couldn't be installed because the verification did not succeed.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
/**
@@ -589,7 +589,7 @@ public abstract class PackageManager {
* the package changed from what the calling program expected.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
/**
@@ -615,7 +615,7 @@ public abstract class PackageManager {
* '.apk' extension.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
/**
@@ -624,7 +624,7 @@ public abstract class PackageManager {
* if the parser was unable to retrieve the AndroidManifest.xml file.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
/**
@@ -633,7 +633,7 @@ public abstract class PackageManager {
* if the parser encountered an unexpected exception.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
/**
@@ -642,7 +642,7 @@ public abstract class PackageManager {
* if the parser did not find any certificates in the .apk.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
/**
@@ -651,7 +651,7 @@ public abstract class PackageManager {
* if the parser found inconsistent certificates on the files in the .apk.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
/**
@@ -661,7 +661,7 @@ public abstract class PackageManager {
* files in the .apk.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
/**
@@ -670,7 +670,7 @@ public abstract class PackageManager {
* if the parser encountered a bad or missing package name in the manifest.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
/**
@@ -679,7 +679,7 @@ public abstract class PackageManager {
* if the parser encountered a bad shared user id name in the manifest.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
/**
@@ -688,7 +688,7 @@ public abstract class PackageManager {
* if the parser encountered some structural problem in the manifest.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
/**
@@ -698,7 +698,7 @@ public abstract class PackageManager {
* in the manifest.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
/**
@@ -707,7 +707,7 @@ public abstract class PackageManager {
* if the system failed to install the package because of system issues.
* @hide
*/
- @PrivateApi
+ @SystemApi
public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
/**
@@ -1402,7 +1402,7 @@ public abstract class PackageManager {
* The device supports managed profiles for enterprise users.
*/
@SdkConstant(SdkConstantType.FEATURE)
- public static final String FEATURE_MANAGEDPROFILES = "android.software.managedprofiles";
+ public static final String FEATURE_MANAGED_PROFILES = "android.software.managed_profiles";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
@@ -2907,7 +2907,7 @@ public abstract class PackageManager {
* instead. This method will continue to be supported but the older observer interface
* will not get additional failure details.
*/
- // @PrivateApi
+ // @SystemApi
public abstract void installPackage(
Uri packageURI, IPackageInstallObserver observer, int flags,
String installerPackageName);
@@ -2942,7 +2942,7 @@ public abstract class PackageManager {
* continue to be supported but the older observer interface will not get additional failure
* details.
*/
- // @PrivateApi
+ // @SystemApi
public abstract void installPackageWithVerification(Uri packageURI,
IPackageInstallObserver observer, int flags, String installerPackageName,
Uri verificationURI, ManifestDigest manifestDigest,
@@ -3071,7 +3071,7 @@ public abstract class PackageManager {
* on the system for other users, also install it for the calling user.
* @hide
*/
- // @PrivateApi
+ // @SystemApi
public abstract int installExistingPackage(String packageName)
throws NameNotFoundException;
@@ -3161,7 +3161,7 @@ public abstract class PackageManager {
*
* @hide
*/
- // @PrivateApi
+ // @SystemApi
public abstract void deletePackage(
String packageName, IPackageDeleteObserver observer, int flags);
@@ -3230,7 +3230,7 @@ public abstract class PackageManager {
*
* @hide
*/
- // @PrivateApi
+ // @SystemApi
public abstract void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);
/**
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 1c838c36fd1c..8965faa30b04 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2512,6 +2512,9 @@ public class PackageParser {
a.info.documentLaunchMode = sa.getInt(
com.android.internal.R.styleable.AndroidManifestActivity_documentLaunchMode,
ActivityInfo.DOCUMENT_LAUNCH_NONE);
+ a.info.maxRecents = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestActivity_maxRecents,
+ 15);
a.info.screenOrientation = sa.getInt(
com.android.internal.R.styleable.AndroidManifestActivity_screenOrientation,
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index 86208fc96229..c593e9ef19e9 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -613,6 +613,7 @@ public final class Sensor {
}
/**
+ * @hide
* @return The permission required to access this sensor. If empty, no permission is required.
*/
public String getRequiredPermission() {
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index 5fd0f9b6f54e..d98bdc24e026 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -29,19 +29,19 @@ import java.util.List;
*
* <p>Creating a session is an expensive operation and can take several hundred milliseconds, since
* it requires configuring the camera device's internal pipelines and allocating memory buffers for
- * sending images to the desired targets. While
- * {@link CameraDevice#createCaptureSession createCaptureSession} will provide a
- * CameraCaptureSession object immediately, configuration won't be complete until the
- * {@link CameraCaptureSession.StateListener#onConfigured onConfigured} callback is called for the
- * first time. If configuration cannot be completed, then the
+ * sending images to the desired targets. Therefore the setup is done asynchronously, and
+ * {@link CameraDevice#createCaptureSession createCaptureSession} will send the ready-to-use
+ * CameraCaptureSession to the provided listener's
+ * {@link CameraCaptureSession.StateListener#onConfigured onConfigured} callback. If configuration
+ * cannot be completed, then the
* {@link CameraCaptureSession.StateListener#onConfigureFailed onConfigureFailed} is called, and the
* session will not become active.</p>
- *
+ *<!--
* <p>Any capture requests (repeating or non-repeating) submitted before the session is ready will
* be queued up and will begin capture once the session becomes ready. In case the session cannot be
* configured and {@link StateListener#onConfigureFailed onConfigureFailed} is called, all queued
* capture requests are discarded.</p>
- *
+ *-->
* <p>If a new session is created by the camera device, then the previous session is closed, and its
* associated {@link StateListener#onClosed onClosed} callback will be invoked. All
* of the session methods will throw an IllegalStateException if called once the session is
@@ -166,10 +166,6 @@ public abstract class CameraCaptureSession implements AutoCloseable {
* capture request will be processed before any further repeating
* requests are processed.<p>
*
- * <p>Repeating requests are a simple way for an application to maintain a
- * preview or other continuous stream of frames, without having to submit
- * requests through {@link #capture} at video rates.</p>
- *
* <p>To stop the repeating capture, call {@link #stopRepeating}. Calling
* {@link #abortCaptures} will also clear the request.</p>
*
@@ -323,7 +319,7 @@ public abstract class CameraCaptureSession implements AutoCloseable {
*
* @see #setRepeatingRequest
* @see #setRepeatingBurst
- * @see #configureOutputs
+ * @see CameraDevice#createCaptureSession
*/
public abstract void abortCaptures() throws CameraAccessException;
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 222374a0e72a..9eea5454b843 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -30,7 +30,7 @@ import java.util.List;
*
* <p>These properties are fixed for a given CameraDevice, and can be queried
* through the {@link CameraManager CameraManager}
- * interface in addition to through the CameraDevice interface.</p>
+ * interface with {@link CameraManager#getCameraCharacteristics}.</p>
*
* <p>{@link CameraCharacteristics} objects are immutable.</p>
*
@@ -320,7 +320,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>List of frame rate ranges supported by the
- * AE algorithm/hardware</p>
+ * auto-exposure (AE) algorithm/hardware</p>
*/
public static final Key<android.util.Range<Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES =
new Key<android.util.Range<Integer>[]>("android.control.aeAvailableTargetFpsRanges", new TypeReference<android.util.Range<Integer>[]>() {{ }});
@@ -343,7 +343,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<Rational>("android.control.aeCompensationStep", Rational.class);
/**
- * <p>List of AF modes that can be
+ * <p>List of auto-focus (AF) modes that can be
* selected with {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
* <p>Not all the auto-focus modes may be supported by a
* given camera device. This entry lists the valid modes for
@@ -496,7 +496,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<int[]>("android.hotPixel.availableHotPixelModes", int[].class);
/**
- * <p>Supported resolutions for the JPEG thumbnail</p>
+ * <p>Supported resolutions for the JPEG thumbnail.</p>
* <p>Below condiditions will be satisfied for this size list:</p>
* <ul>
* <li>The sizes will be sorted by increasing pixel area (width x height).
@@ -555,7 +555,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <p>List containing a subset of the optical image
* stabilization (OIS) modes specified in
* {@link CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE android.lens.opticalStabilizationMode}.</p>
- * <p>If OIS is not implemented for a given camera device, this should
+ * <p>If OIS is not implemented for a given camera device, this will
* contain only OFF.</p>
*
* @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
@@ -612,7 +612,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>Direction the camera faces relative to
- * device screen</p>
+ * device screen.</p>
* @see #LENS_FACING_FRONT
* @see #LENS_FACING_BACK
*/
@@ -622,7 +622,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>The set of noise reduction modes supported by this camera device.</p>
* <p>This tag lists the valid modes for {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}.</p>
- * <p>Full-capability camera devices must laways support OFF and FAST.</p>
+ * <p>Full-capability camera devices must always support OFF and FAST.</p>
*
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
@@ -751,6 +751,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <p>For example, for Zero Shutter Lag (ZSL) still capture use case, the input
* stream image format will be RAW_OPAQUE, the associated output stream image format
* should be JPEG.</p>
+ * @hide
*/
public static final Key<Integer> REQUEST_MAX_NUM_INPUT_STREAMS =
new Key<Integer>("android.request.maxNumInputStreams", int.class);
@@ -777,17 +778,20 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<Byte>("android.request.pipelineMaxDepth", byte.class);
/**
- * <p>Optional. Defaults to 1. Defines how many sub-components
+ * <p>Defines how many sub-components
* a result will be composed of.</p>
* <p>In order to combat the pipeline latency, partial results
* may be delivered to the application layer from the camera device as
* soon as they are available.</p>
- * <p>A value of 1 means that partial results are not supported.</p>
- * <p>A typical use case for this might be: after requesting an AF lock the
- * new AF state might be available 50% of the way through the pipeline.
- * The camera device could then immediately dispatch this state via a
- * partial result to the framework/application layer, and the rest of
- * the metadata via later partial results.</p>
+ * <p>Optional; defaults to 1. A value of 1 means that partial
+ * results are not supported, and only the final TotalCaptureResult will
+ * be produced by the camera device.</p>
+ * <p>A typical use case for this might be: after requesting an
+ * auto-focus (AF) lock the new AF state might be available 50%
+ * of the way through the pipeline. The camera device could
+ * then immediately dispatch this state via a partial result to
+ * the application, and the rest of the metadata via later
+ * partial results.</p>
*/
public static final Key<Integer> REQUEST_PARTIAL_RESULT_COUNT =
new Key<Integer>("android.request.partialResultCount", int.class);
@@ -804,8 +808,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* to do this query each of android.request.availableRequestKeys,
* android.request.availableResultKeys,
* android.request.availableCharacteristicsKeys.</p>
- * <p>XX: Maybe these should go into {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel}
- * as a table instead?</p>
* <p>The following capabilities are guaranteed to be available on
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} <code>==</code> FULL devices:</p>
* <ul>
@@ -813,14 +815,11 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <li>MANUAL_POST_PROCESSING</li>
* </ul>
* <p>Other capabilities may be available on either FULL or LIMITED
- * devices, but the app. should query this field to be sure.</p>
+ * devices, but the application should query this field to be sure.</p>
*
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
- * @see #REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
- * @see #REQUEST_AVAILABLE_CAPABILITIES_OPTIONAL
* @see #REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
* @see #REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING
- * @see #REQUEST_AVAILABLE_CAPABILITIES_ZSL
* @see #REQUEST_AVAILABLE_CAPABILITIES_DNG
*/
public static final Key<int[]> REQUEST_AVAILABLE_CAPABILITIES =
@@ -836,7 +835,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* at a more granular level than capabilities. This is especially
* important for optional keys that are not listed under any capability
* in {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}.</p>
- * <p>TODO: This should be used by #getAvailableCaptureRequestKeys.</p>
*
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @hide
@@ -861,7 +859,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* at a more granular level than capabilities. This is especially
* important for optional keys that are not listed under any capability
* in {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}.</p>
- * <p>TODO: This should be used by #getAvailableCaptureResultKeys.</p>
*
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
@@ -877,7 +874,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* android.request.availableResultKeys (except that it applies for
* CameraCharacteristics instead of CaptureResult). See above for more
* details.</p>
- * <p>TODO: This should be used by CameraCharacteristics#getKeys.</p>
* @hide
*/
public static final Key<int[]> REQUEST_AVAILABLE_CHARACTERISTICS_KEYS =
@@ -925,10 +921,15 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<android.util.Size[]>("android.scaler.availableJpegSizes", android.util.Size[].class);
/**
- * <p>The maximum ratio between active area width
- * and crop region width, or between active area height and
- * crop region height, if the crop region height is larger
- * than width</p>
+ * <p>The maximum ratio between both active area width
+ * and crop region width, and active area height and
+ * crop region height.</p>
+ * <p>This represents the maximum amount of zooming possible by
+ * the camera device, or equivalently, the minimum cropping
+ * window size.</p>
+ * <p>Crop regions that have a width or height that is smaller
+ * than this ratio allows will be rounded up to the minimum
+ * allowed size by the camera device.</p>
*/
public static final Key<Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM =
new Key<Float>("android.scaler.availableMaxDigitalZoom", float.class);
@@ -974,7 +975,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <p>The mapping of image formats that are supported by this
* camera device for input streams, to their corresponding output formats.</p>
* <p>All camera devices with at least 1
- * {@link CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS android.request.maxNumInputStreams} will have at least one
+ * android.request.maxNumInputStreams will have at least one
* available input format.</p>
* <p>The camera device will support the following map of formats,
* if its dependent capability is supported:</p>
@@ -1021,8 +1022,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <p>Attempting to configure an input stream with output streams not
* listed as available in this map is not valid.</p>
* <p>TODO: typedef to ReprocessFormatMap</p>
- *
- * @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
* @hide
*/
public static final Key<int[]> SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP =
@@ -1327,15 +1326,21 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<android.graphics.Rect>("android.sensor.info.activeArraySize", android.graphics.Rect.class);
/**
- * <p>Range of valid sensitivities</p>
+ * <p>Range of valid sensitivities.</p>
+ * <p>The minimum and maximum valid values for the
+ * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} control.</p>
+ * <p>The values are the standard ISO sensitivity values,
+ * as defined in ISO 12232:2006.</p>
+ *
+ * @see CaptureRequest#SENSOR_SENSITIVITY
*/
public static final Key<android.util.Range<Integer>> SENSOR_INFO_SENSITIVITY_RANGE =
new Key<android.util.Range<Integer>>("android.sensor.info.sensitivityRange", new TypeReference<android.util.Range<Integer>>() {{ }});
/**
- * <p>Arrangement of color filters on sensor;
+ * <p>The arrangement of color filters on sensor;
* represents the colors in the top-left 2x2 section of
- * the sensor, in reading order</p>
+ * the sensor, in reading order.</p>
* @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB
* @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG
* @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG
@@ -1373,8 +1378,11 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>The physical dimensions of the full pixel
- * array</p>
- * <p>Needed for FOV calculation for old API</p>
+ * array.</p>
+ * <p>This is the physical size of the sensor pixel
+ * array defined by {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</p>
+ *
+ * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
*/
public static final Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE =
new Key<android.util.SizeF>("android.sensor.info.physicalSize", android.util.SizeF.class);
@@ -1382,9 +1390,17 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>Dimensions of full pixel array, possibly
* including black calibration pixels.</p>
- * <p>Maximum output resolution for raw format must
- * match this in
- * android.scaler.availableStreamConfigurations.</p>
+ * <p>The pixel count of the full pixel array,
+ * which covers {@link CameraCharacteristics#SENSOR_INFO_PHYSICAL_SIZE android.sensor.info.physicalSize} area.</p>
+ * <p>If a camera device supports raw sensor formats, either this
+ * or {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} is the maximum output
+ * raw size listed in {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}.
+ * If a size corresponding to pixelArraySize is listed, the resulting
+ * raw sensor image will include black pixels.</p>
+ *
+ * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+ * @see CameraCharacteristics#SENSOR_INFO_PHYSICAL_SIZE
*/
public static final Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE =
new Key<android.util.Size>("android.sensor.info.pixelArraySize", android.util.Size.class);
@@ -1639,8 +1655,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<Integer>("android.sensor.orientation", int.class);
/**
- * <p>Optional. Defaults to [OFF]. Lists the supported test
- * pattern modes for {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}.</p>
+ * <p>Lists the supported sensor test pattern modes for {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}.</p>
+ * <p>Optional. Defaults to [OFF].</p>
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
@@ -1649,10 +1665,9 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<int[]>("android.sensor.availableTestPatternModes", int[].class);
/**
- * <p>Which face detection modes are available,
- * if any</p>
- * <p>OFF means face detection is disabled, it must
- * be included in the list.</p>
+ * <p>The face detection modes that are available
+ * for this camera device.</p>
+ * <p>OFF is always supported.</p>
* <p>SIMPLE means the device supports the
* android.statistics.faceRectangles and
* android.statistics.faceScores outputs.</p>
@@ -1664,8 +1679,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
new Key<int[]>("android.statistics.info.availableFaceDetectModes", int[].class);
/**
- * <p>Maximum number of simultaneously detectable
- * faces</p>
+ * <p>The maximum number of simultaneously detectable
+ * faces.</p>
*/
public static final Key<Integer> STATISTICS_INFO_MAX_FACE_COUNT =
new Key<Integer>("android.statistics.info.maxFaceCount", int.class);
@@ -1674,7 +1689,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <p>The set of hot pixel map output modes supported by this camera device.</p>
* <p>This tag lists valid output modes for {@link CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE android.statistics.hotPixelMapMode}.</p>
* <p>If no hotpixel map is available for this camera device, this will contain
- * only OFF. If the hotpixel map is available, this should include both
+ * only OFF. If the hotpixel map is available, this will include both
* the ON and OFF options.</p>
*
* @see CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index e9213c5b8cb8..68f4d6419e3b 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -52,7 +52,7 @@ public abstract class CameraDevice implements AutoCloseable {
* Create a request suitable for a camera preview window. Specifically, this
* means that high frame rate is given priority over the highest-quality
* post-processing. These requests would normally be used with the
- * {@link #setRepeatingRequest} method.
+ * {@link CameraCaptureSession#setRepeatingRequest} method.
*
* @see #createCaptureRequest
*/
@@ -61,7 +61,7 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* Create a request suitable for still image capture. Specifically, this
* means prioritizing image quality over frame rate. These requests would
- * commonly be used with the {@link #capture} method.
+ * commonly be used with the {@link CameraCaptureSession#capture} method.
*
* @see #createCaptureRequest
*/
@@ -71,7 +71,7 @@ public abstract class CameraDevice implements AutoCloseable {
* Create a request suitable for video recording. Specifically, this means
* that a stable frame rate is used, and post-processing is set for
* recording quality. These requests would commonly be used with the
- * {@link #setRepeatingRequest} method.
+ * {@link CameraCaptureSession#setRepeatingRequest} method.
*
* @see #createCaptureRequest
*/
@@ -81,8 +81,8 @@ public abstract class CameraDevice implements AutoCloseable {
* Create a request suitable for still image capture while recording
* video. Specifically, this means maximizing image quality without
* disrupting the ongoing recording. These requests would commonly be used
- * with the {@link #capture} method while a request based on
- * {@link #TEMPLATE_RECORD} is is in use with {@link #setRepeatingRequest}.
+ * with the {@link CameraCaptureSession#capture} method while a request based on
+ * {@link #TEMPLATE_RECORD} is is in use with {@link CameraCaptureSession#setRepeatingRequest}.
*
* @see #createCaptureRequest
*/
@@ -132,116 +132,6 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* <p>Set up a new output set of Surfaces for the camera device.</p>
*
- * <p>The configuration determines the set of potential output Surfaces for
- * the camera device for each capture request. A given request may use all
- * or a only some of the outputs. This method must be called before requests
- * can be submitted to the camera with {@link #capture capture},
- * {@link #captureBurst captureBurst},
- * {@link #setRepeatingRequest setRepeatingRequest}, or
- * {@link #setRepeatingBurst setRepeatingBurst}.</p>
- *
- * <p>Surfaces suitable for inclusion as a camera output can be created for
- * various use cases and targets:</p>
- *
- * <ul>
- *
- * <li>For drawing to a {@link android.view.SurfaceView SurfaceView}: Set
- * the size of the Surface with
- * {@link android.view.SurfaceHolder#setFixedSize} to be one of the
- * supported
- * {@link StreamConfigurationMap#getOutputSizes(Class) processed sizes}
- * before calling {@link android.view.SurfaceHolder#getSurface}.</li>
- *
- * <li>For accessing through an OpenGL texture via a
- * {@link android.graphics.SurfaceTexture SurfaceTexture}: Set the size of
- * the SurfaceTexture with
- * {@link android.graphics.SurfaceTexture#setDefaultBufferSize} to be one
- * of the supported
- * {@link StreamConfigurationMap#getOutputSizes(Class) processed sizes}
- * before creating a Surface from the SurfaceTexture with
- * {@link Surface#Surface}.</li>
- *
- * <li>For recording with {@link android.media.MediaCodec}: Call
- * {@link android.media.MediaCodec#createInputSurface} after configuring
- * the media codec to use one of the
- * {@link StreamConfigurationMap#getOutputSizes(Class) processed sizes}
- * </li>
- *
- * <li>For recording with {@link android.media.MediaRecorder}: TODO</li>
- *
- * <li>For efficient YUV processing with {@link android.renderscript}:
- * Create a RenderScript
- * {@link android.renderscript.Allocation Allocation} with a supported YUV
- * type, the IO_INPUT flag, and one of the supported
- * {@link StreamConfigurationMap#getOutputSizes(int) processed sizes}. Then
- * obtain the Surface with
- * {@link android.renderscript.Allocation#getSurface}.</li>
- *
- * <li>For access to uncompressed or {@link ImageFormat#JPEG JPEG} data in the application:
- * Create a {@link android.media.ImageReader} object with the desired
- * {@link StreamConfigurationMap#getOutputFormats() image format}, and a size from the matching
- * {@link StreamConfigurationMap#getOutputSizes(int) processed size} and {@code format}.
- * Then obtain a {@link Surface} from it.</li>
- * </ul>
- *
- * </p>
- *
- * <p>This function can take several hundred milliseconds to execute, since
- * camera hardware may need to be powered on or reconfigured.</p>
- *
- * <p>The camera device will query each Surface's size and formats upon this
- * call, so they must be set to a valid setting at this time (in particular:
- * if the format is user-visible, it must be one of
- * {@link StreamConfigurationMap#getOutputFormats}; and the size must be one of
- * {@link StreamConfigurationMap#getOutputSizes(int)}).</p>
- *
- * <p>When this method is called with valid Surfaces, the device will transition to the {@link
- * StateListener#onBusy busy state}. Once configuration is complete, the device will transition
- * into the {@link StateListener#onIdle idle state}. Capture requests using the newly-configured
- * Surfaces may then be submitted with {@link #capture}, {@link #captureBurst}, {@link
- * #setRepeatingRequest}, or {@link #setRepeatingBurst}.</p>
- *
- * <p>If this method is called while the camera device is still actively processing previously
- * submitted captures, then the following sequence of events occurs: The device transitions to
- * the busy state and calls the {@link StateListener#onBusy} callback. Second, if a repeating
- * request is set it is cleared. Third, the device finishes up all in-flight and pending
- * requests. Finally, once the device is idle, it then reconfigures its outputs, and calls the
- * {@link StateListener#onIdle} method once it is again ready to accept capture
- * requests. Therefore, no submitted work is discarded. To idle as fast as possible, use {@link
- * #flush} and wait for the idle callback before calling configureOutputs. This will discard
- * work, but reaches the new configuration sooner.</p>
- *
- * <p>Using larger resolution outputs, or more outputs, can result in slower
- * output rate from the device.</p>
- *
- * <p>Configuring the outputs with an empty or null list will transition the camera into an
- * {@link StateListener#onUnconfigured unconfigured state} instead of the {@link
- * StateListener#onIdle idle state}. </p>
- *
- * <p>Calling configureOutputs with the same arguments as the last call to
- * configureOutputs has no effect, and the {@link StateListener#onBusy busy}
- * and {@link StateListener#onIdle idle} state transitions will happen
- * immediately.</p>
- *
- * @param outputs The new set of Surfaces that should be made available as
- * targets for captured image data.
- *
- * @throws IllegalArgumentException if the set of output Surfaces do not
- * meet the requirements
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera device is not idle, or
- * if the camera device has been closed
- *
- * @see StateListener#onBusy
- * @see StateListener#onIdle
- * @see StateListener#onActive
- * @see StateListener#onUnconfigured
- * @see #stopRepeating
- * @see #flush
- * @see StreamConfigurationMap#getOutputFormats()
- * @see StreamConfigurationMap#getOutputSizes(int)
- * @see StreamConfigurationMap#getOutputSizes(Class)
* @deprecated Use {@link #createCaptureSession} instead
*/
@Deprecated
@@ -342,10 +232,7 @@ public abstract class CameraDevice implements AutoCloseable {
* @param listener The listener to notify about the status of the new capture session.
* @param handler The handler on which the listener should be invoked, or {@code null} to use
* the current thread's {@link android.os.Looper looper}.
- * <!--
- * @return A new camera capture session to use, or null if an empty/null set of Surfaces is
- * provided.
- * -->
+ *
* @throws IllegalArgumentException if the set of output Surfaces do not meet the requirements,
* the listener is null, or the handler is null but the current
* thread has no looper.
@@ -393,92 +280,16 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* <p>Submit a request for an image to be captured by this CameraDevice.</p>
*
- * <p>The request defines all the parameters for capturing the single image,
- * including sensor, lens, flash, and post-processing settings.</p>
- *
- * <p>Each request will produce one {@link CaptureResult} and produce new
- * frames for one or more target Surfaces, set with the CaptureRequest
- * builder's {@link CaptureRequest.Builder#addTarget} method. The target
- * surfaces must be configured as active outputs with
- * {@link #configureOutputs} before calling this method.</p>
- *
- * <p>Multiple requests can be in progress at once. They are processed in
- * first-in, first-out order, with minimal delays between each
- * capture. Requests submitted through this method have higher priority than
- * those submitted through {@link #setRepeatingRequest} or
- * {@link #setRepeatingBurst}, and will be processed as soon as the current
- * repeat/repeatBurst processing completes.</p>
- *
- * @param request the settings for this capture
- * @param listener The callback object to notify once this request has been
- * processed. If null, no metadata will be produced for this capture,
- * although image data will still be produced.
- * @param handler the handler on which the listener should be invoked, or
- * {@code null} to use the current thread's {@link android.os.Looper
- * looper}.
- *
- * @return int A unique capture sequence ID used by
- * {@link CaptureListener#onCaptureSequenceCompleted}.
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is currently busy or unconfigured,
- * or the camera device has been closed.
- * @throws IllegalArgumentException If the request targets Surfaces not
- * currently configured as outputs. Or if the handler is null, the listener
- * is not null, and the calling thread has no looper.
- *
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#capture} instead
*/
@Deprecated
public abstract int capture(CaptureRequest request, CaptureListener listener, Handler handler)
throws CameraAccessException;
/**
- * Submit a list of requests to be captured in sequence as a burst. The
- * burst will be captured in the minimum amount of time possible, and will
- * not be interleaved with requests submitted by other capture or repeat
- * calls.
- *
- * <p>The requests will be captured in order, each capture producing one
- * {@link CaptureResult} and image buffers for one or more target
- * {@link android.view.Surface surfaces}. The target surfaces for each
- * request (set with {@link CaptureRequest.Builder#addTarget}) must be
- * configured as active outputs with {@link #configureOutputs} before
- * calling this method.</p>
- *
- * <p>The main difference between this method and simply calling
- * {@link #capture} repeatedly is that this method guarantees that no
- * other requests will be interspersed with the burst.</p>
+ * Submit a list of requests to be captured in sequence as a burst.
*
- * @param requests the list of settings for this burst capture
- * @param listener The callback object to notify each time one of the
- * requests in the burst has been processed. If null, no metadata will be
- * produced for any requests in this burst, although image data will still
- * be produced.
- * @param handler the handler on which the listener should be invoked, or
- * {@code null} to use the current thread's {@link android.os.Looper
- * looper}.
- *
- * @return int A unique capture sequence ID used by
- * {@link CaptureListener#onCaptureSequenceCompleted}.
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is currently busy or unconfigured,
- * or the camera device has been closed.
- * @throws IllegalArgumentException If the requests target Surfaces not
- * currently configured as outputs. Or if the handler is null, the listener
- * is not null, and the calling thread has no looper. Or if no requests were
- * passed in.
- *
- * @see #capture
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#captureBurst} instead
*/
@Deprecated
public abstract int captureBurst(List<CaptureRequest> requests, CaptureListener listener,
@@ -487,58 +298,7 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* Request endlessly repeating capture of images by this CameraDevice.
*
- * <p>With this method, the CameraDevice will continually capture images
- * using the settings in the provided {@link CaptureRequest}, at the maximum
- * rate possible.</p>
- *
- * <p>Repeating requests are a simple way for an application to maintain a
- * preview or other continuous stream of frames, without having to
- * continually submit identical requests through {@link #capture}.</p>
- *
- * <p>Repeat requests have lower priority than those submitted
- * through {@link #capture} or {@link #captureBurst}, so if
- * {@link #capture} is called when a repeating request is active, the
- * capture request will be processed before any further repeating
- * requests are processed.<p>
- *
- * <p>Repeating requests are a simple way for an application to maintain a
- * preview or other continuous stream of frames, without having to submit
- * requests through {@link #capture} at video rates.</p>
- *
- * <p>To stop the repeating capture, call {@link #stopRepeating}. Calling
- * {@link #flush} will also clear the request.</p>
- *
- * <p>Calling this method will replace any earlier repeating request or
- * burst set up by this method or {@link #setRepeatingBurst}, although any
- * in-progress burst will be completed before the new repeat request will be
- * used.</p>
- *
- * @param request the request to repeat indefinitely
- * @param listener The callback object to notify every time the
- * request finishes processing. If null, no metadata will be
- * produced for this stream of requests, although image data will
- * still be produced.
- * @param handler the handler on which the listener should be invoked, or
- * {@code null} to use the current thread's {@link android.os.Looper
- * looper}.
- *
- * @return int A unique capture sequence ID used by
- * {@link CaptureListener#onCaptureSequenceCompleted}.
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is currently busy or unconfigured,
- * or the camera device has been closed.
- * @throws IllegalArgumentException If the requests reference Surfaces not
- * currently configured as outputs. Or if the handler is null, the listener
- * is not null, and the calling thread has no looper.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingBurst
- * @see #stopRepeating
- * @see #flush
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#setRepeatingRequest} instead
*/
@Deprecated
public abstract int setRepeatingRequest(CaptureRequest request, CaptureListener listener,
@@ -548,58 +308,7 @@ public abstract class CameraDevice implements AutoCloseable {
* <p>Request endlessly repeating capture of a sequence of images by this
* CameraDevice.</p>
*
- * <p>With this method, the CameraDevice will continually capture images,
- * cycling through the settings in the provided list of
- * {@link CaptureRequest CaptureRequests}, at the maximum rate possible.</p>
- *
- * <p>If a request is submitted through {@link #capture} or
- * {@link #captureBurst}, the current repetition of the request list will be
- * completed before the higher-priority request is handled. This guarantees
- * that the application always receives a complete repeat burst captured in
- * minimal time, instead of bursts interleaved with higher-priority
- * captures, or incomplete captures.</p>
- *
- * <p>Repeating burst requests are a simple way for an application to
- * maintain a preview or other continuous stream of frames where each
- * request is different in a predicatable way, without having to continually
- * submit requests through {@link #captureBurst} .</p>
- *
- * <p>To stop the repeating capture, call {@link #stopRepeating}. Any
- * ongoing burst will still be completed, however. Calling
- * {@link #flush} will also clear the request.</p>
- *
- * <p>Calling this method will replace a previously-set repeating request or
- * burst set up by this method or {@link #setRepeatingRequest}, although any
- * in-progress burst will be completed before the new repeat burst will be
- * used.</p>
- *
- * @param requests the list of requests to cycle through indefinitely
- * @param listener The callback object to notify each time one of the
- * requests in the repeating bursts has finished processing. If null, no
- * metadata will be produced for this stream of requests, although image
- * data will still be produced.
- * @param handler the handler on which the listener should be invoked, or
- * {@code null} to use the current thread's {@link android.os.Looper
- * looper}.
- *
- * @return int A unique capture sequence ID used by
- * {@link CaptureListener#onCaptureSequenceCompleted}.
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is currently busy or unconfigured,
- * or the camera device has been closed.
- * @throws IllegalArgumentException If the requests reference Surfaces not
- * currently configured as outputs. Or if the handler is null, the listener
- * is not null, and the calling thread has no looper. Or if no requests were
- * passed in.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #stopRepeating
- * @see #flush
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#setRepeatingBurst} instead
*/
@Deprecated
public abstract int setRepeatingBurst(List<CaptureRequest> requests, CaptureListener listener,
@@ -608,24 +317,9 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* <p>Cancel any ongoing repeating capture set by either
* {@link #setRepeatingRequest setRepeatingRequest} or
- * {@link #setRepeatingBurst}. Has no effect on requests submitted through
- * {@link #capture capture} or {@link #captureBurst captureBurst}.</p>
+ * {@link #setRepeatingBurst}.
*
- * <p>Any currently in-flight captures will still complete, as will any
- * burst that is mid-capture. To ensure that the device has finished
- * processing all of its capture requests and is in idle state, wait for the
- * {@link StateListener#onIdle} callback after calling this
- * method..</p>
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is currently busy or unconfigured,
- * or the camera device has been closed.
- *
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- * @see StateListener#onIdle
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#stopRepeating} instead
*/
@Deprecated
public abstract void stopRepeating() throws CameraAccessException;
@@ -634,36 +328,7 @@ public abstract class CameraDevice implements AutoCloseable {
* Flush all captures currently pending and in-progress as fast as
* possible.
*
- * <p>The camera device will discard all of its current work as fast as
- * possible. Some in-flight captures may complete successfully and call
- * {@link CaptureListener#onCaptureCompleted}, while others will trigger
- * their {@link CaptureListener#onCaptureFailed} callbacks. If a repeating
- * request or a repeating burst is set, it will be cleared by the flush.</p>
- *
- * <p>This method is the fastest way to idle the camera device for
- * reconfiguration with {@link #configureOutputs}, at the cost of discarding
- * in-progress work. Once the flush is complete, the idle callback will be
- * called.</p>
- *
- * <p>Flushing will introduce at least a brief pause in the stream of data
- * from the camera device, since once the flush is complete, the first new
- * request has to make it through the entire camera pipeline before new
- * output buffers are produced.</p>
- *
- * <p>This means that using {@code flush()} to simply remove pending
- * requests is not recommended; it's best used for quickly switching output
- * configurations, or for cancelling long in-progress requests (such as a
- * multi-second capture).</p>
- *
- * @throws CameraAccessException if the camera device is no longer connected or has
- * encountered a fatal error
- * @throws IllegalStateException if the camera is not idle/active,
- * or the camera device has been closed.
- *
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- * @see #configureOutputs
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession#abortCaptures} instead
*/
@Deprecated
public abstract void flush() throws CameraAccessException;
@@ -690,15 +355,7 @@ public abstract class CameraDevice implements AutoCloseable {
* <p>A listener for tracking the progress of a {@link CaptureRequest}
* submitted to the camera device.</p>
*
- * <p>This listener is called when a request triggers a capture to start,
- * and when the capture is complete. In case on an error capturing an image,
- * the error method is triggered instead of the completion method.</p>
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- * @deprecated Use {@link CameraCaptureSession} instead
+ * @deprecated Use {@link CameraCaptureSession.CaptureListener} instead
*/
@Deprecated
public static abstract class CaptureListener {
@@ -715,29 +372,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called when the camera device has started capturing
* the output image for the request, at the beginning of image exposure.
*
- * <p>This callback is invoked right as the capture of a frame begins,
- * so it is the most appropriate time for playing a shutter sound,
- * or triggering UI indicators of capture.</p>
- *
- * <p>The request that is being used for this capture is provided, along
- * with the actual timestamp for the start of exposure. This timestamp
- * matches the timestamp that will be included in
- * {@link CaptureResult#SENSOR_TIMESTAMP the result timestamp field},
- * and in the buffers sent to each output Surface. These buffer
- * timestamps are accessible through, for example,
- * {@link android.media.Image#getTimestamp() Image.getTimestamp()} or
- * {@link android.graphics.SurfaceTexture#getTimestamp()}.</p>
- *
- * <p>For the simplest way to play a shutter sound camera shutter or a
- * video recording start/stop sound, see the
- * {@link android.media.MediaActionSound} class.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera the CameraDevice sending the callback
- * @param request the request for the capture that just begun
- * @param timestamp the timestamp at start of capture, in nanoseconds.
- *
* @see android.media.MediaActionSound
*/
public void onCaptureStarted(CameraDevice camera,
@@ -749,25 +383,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called when some results from an image capture are
* available.
*
- * <p>The result provided here will contain some subset of the fields of
- * a full result. Multiple onCapturePartial calls may happen per
- * capture; a given result field will only be present in one partial
- * capture at most. The final onCaptureCompleted call will always
- * contain all the fields, whether onCapturePartial was called or
- * not.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera The CameraDevice sending the callback.
- * @param request The request that was given to the CameraDevice
- * @param result The partial output metadata from the capture, which
- * includes a subset of the CaptureResult fields.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
- *
* @hide
*/
public void onCapturePartial(CameraDevice camera,
@@ -779,37 +394,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called when an image capture makes partial forward progress; some
* (but not all) results from an image capture are available.
*
- * <p>The result provided here will contain some subset of the fields of
- * a full result. Multiple {@link #onCaptureProgressed} calls may happen per
- * capture; a given result field will only be present in one partial
- * capture at most. The final {@link #onCaptureCompleted} call will always
- * contain all the fields (in particular, the union of all the fields of all
- * the partial results composing the total result).</p>
- *
- * <p>For each request, some result data might be available earlier than others. The typical
- * delay between each partial result (per request) is a single frame interval.
- * For performance-oriented use-cases, applications should query the metadata they need
- * to make forward progress from the partial results and avoid waiting for the completed
- * result.</p>
- *
- * <p>Each request will generate at least {@code 1} partial results, and at most
- * {@link CameraCharacteristics#REQUEST_PARTIAL_RESULT_COUNT} partial results.</p>
- *
- * <p>Depending on the request settings, the number of partial results per request
- * will vary, although typically the partial count could be the same as long as the
- * camera device subsystems enabled stay the same.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera The CameraDevice sending the callback.
- * @param request The request that was given to the CameraDevice
- * @param partialResult The partial output metadata from the capture, which
- * includes a subset of the {@link TotalCaptureResult} fields.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
*/
public void onCaptureProgressed(CameraDevice camera,
CaptureRequest request, CaptureResult partialResult) {
@@ -819,26 +403,6 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* This method is called when an image capture has fully completed and all the
* result metadata is available.
- *
- * <p>This callback will always fire after the last {@link #onCaptureProgressed};
- * in other words, no more partial results will be delivered once the completed result
- * is available.</p>
- *
- * <p>For performance-intensive use-cases where latency is a factor, consider
- * using {@link #onCaptureProgressed} instead.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera The CameraDevice sending the callback.
- * @param request The request that was given to the CameraDevice
- * @param result The total output metadata from the capture, including the
- * final capture parameters and the state of the camera system during
- * capture.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
*/
public void onCaptureCompleted(CameraDevice camera,
CaptureRequest request, TotalCaptureResult result) {
@@ -849,29 +413,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called instead of {@link #onCaptureCompleted} when the
* camera device failed to produce a {@link CaptureResult} for the
* request.
- *
- * <p>Other requests are unaffected, and some or all image buffers from
- * the capture may have been pushed to their respective output
- * streams.</p>
- *
- * <p>Some partial results may have been delivered before the capture fails;
- * however after this callback fires, no more partial results will be delivered by
- * {@link #onCaptureProgressed}.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera
- * The CameraDevice sending the callback.
- * @param request
- * The request that was given to the CameraDevice
- * @param failure
- * The output failure from the capture, including the failure reason
- * and the frame number.
- *
- * @see #capture
- * @see #captureBurst
- * @see #setRepeatingRequest
- * @see #setRepeatingBurst
*/
public void onCaptureFailed(CameraDevice camera,
CaptureRequest request, CaptureFailure failure) {
@@ -882,26 +423,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called independently of the others in CaptureListener,
* when a capture sequence finishes and all {@link CaptureResult}
* or {@link CaptureFailure} for it have been returned via this listener.
- *
- * <p>In total, there will be at least one result/failure returned by this listener
- * before this callback is invoked. If the capture sequence is aborted before any
- * requests have been processed, {@link #onCaptureSequenceAborted} is invoked instead.</p>
- *
- * <p>The default implementation does nothing.</p>
- *
- * @param camera
- * The CameraDevice sending the callback.
- * @param sequenceId
- * A sequence ID returned by the {@link #capture} family of functions.
- * @param frameNumber
- * The last frame number (returned by {@link CaptureResult#getFrameNumber}
- * or {@link CaptureFailure#getFrameNumber}) in the capture sequence.
- *
- * @see CaptureResult#getFrameNumber()
- * @see CaptureFailure#getFrameNumber()
- * @see CaptureResult#getSequenceId()
- * @see CaptureFailure#getSequenceId()
- * @see #onCaptureSequenceAborted
*/
public void onCaptureSequenceCompleted(CameraDevice camera,
int sequenceId, long frameNumber) {
@@ -912,25 +433,6 @@ public abstract class CameraDevice implements AutoCloseable {
* This method is called independently of the others in CaptureListener,
* when a capture sequence aborts before any {@link CaptureResult}
* or {@link CaptureFailure} for it have been returned via this listener.
- *
- * <p>Due to the asynchronous nature of the camera device, not all submitted captures
- * are immediately processed. It is possible to clear out the pending requests
- * by a variety of operations such as {@link CameraDevice#stopRepeating} or
- * {@link CameraDevice#flush}. When such an event happens,
- * {@link #onCaptureSequenceCompleted} will not be called.</p>
- *
- * <p>The default implementation does nothing.</p>
- *
- * @param camera
- * The CameraDevice sending the callback.
- * @param sequenceId
- * A sequence ID returned by the {@link #capture} family of functions.
- *
- * @see CaptureResult#getFrameNumber()
- * @see CaptureFailure#getFrameNumber()
- * @see CaptureResult#getSequenceId()
- * @see CaptureFailure#getSequenceId()
- * @see #onCaptureSequenceCompleted
*/
public void onCaptureSequenceAborted(CameraDevice camera,
int sequenceId) {
@@ -945,14 +447,14 @@ public abstract class CameraDevice implements AutoCloseable {
* <p>A listener must be provided to the {@link CameraManager#openCamera}
* method to open a camera device.</p>
*
- * <p>These events include notifications about the device becoming idle (
- * allowing for {@link #configureOutputs} to be called), about device
- * disconnection, and about unexpected device errors.</p>
+ * <p>These events include notifications about the device completing startup (
+ * allowing for {@link #createCaptureSession} to be called), about device
+ * disconnection or closure, and about unexpected device errors.</p>
*
- * <p>Events about the progress of specific {@link CaptureRequest
- * CaptureRequests} are provided through a {@link CaptureListener} given to
- * the {@link #capture}, {@link #captureBurst}, {@link
- * #setRepeatingRequest}, or {@link #setRepeatingBurst} methods.
+ * <p>Events about the progress of specific {@link CaptureRequest CaptureRequests} are provided
+ * through a {@link CameraCaptureSession.CaptureListener} given to the
+ * {@link CameraCaptureSession#capture}, {@link CameraCaptureSession#captureBurst},
+ * {@link CameraCaptureSession#setRepeatingRequest}, or {@link CameraCaptureSession#setRepeatingBurst} methods.
*
* @see CameraManager#openCamera
*/
@@ -1026,8 +528,9 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* The method called when a camera device has finished opening.
*
- * <p>An opened camera will immediately afterwards transition into
- * {@link #onUnconfigured}.</p>
+ * <p>At this point, the camera device is ready to use, and
+ * {@link CameraDevice#createCaptureSession} can be called to set up the first capture
+ * session.</p>
*
* @param camera the camera device that has become opened
*/
@@ -1036,21 +539,7 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* The method called when a camera device has no outputs configured.
*
- * <p>An unconfigured camera device needs to be configured with
- * {@link CameraDevice#configureOutputs} before being able to
- * submit any capture request.</p>
- *
- * <p>This state may be entered by a newly opened camera or by
- * calling {@link CameraDevice#configureOutputs} with a null/empty
- * list of Surfaces when idle.</p>
- *
- * <p>Any attempts to submit a capture request while in this state
- * will result in an {@link IllegalStateException} being thrown.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera the camera device has that become unconfigured
- * @deprecated Use {@link CameraCaptureSession.StateListener} instead.
+ * @deprecated Use {@link #onOpened} instead.
*/
@Deprecated
public void onUnconfigured(CameraDevice camera) {
@@ -1061,27 +550,7 @@ public abstract class CameraDevice implements AutoCloseable {
* The method called when a camera device begins processing
* {@link CaptureRequest capture requests}.
*
- * <p>A camera may not be re-configured while in this state. The camera
- * will transition to the idle state once all pending captures have
- * completed. If a repeating request is set, the camera will remain active
- * until it is cleared and the remaining requests finish processing. To
- * transition to the idle state as quickly as possible, call {@link #flush()},
- * which will idle the camera device as quickly as possible, likely canceling
- * most in-progress captures.</p>
- *
- * <p>All calls except for {@link CameraDevice#configureOutputs} are
- * legal while in this state.
- * </p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera the camera device that has become active
- *
- * @see CameraDevice#capture
- * @see CameraDevice#captureBurst
- * @see CameraDevice#setRepeatingBurst
- * @see CameraDevice#setRepeatingRequest
- * @deprecated Use {@link CameraCaptureSession.StateListener} instead.
+ * @deprecated Use {@link CameraCaptureSession.StateListener#onActive} instead.
*/
@Deprecated
public void onActive(CameraDevice camera) {
@@ -1091,32 +560,7 @@ public abstract class CameraDevice implements AutoCloseable {
/**
* The method called when a camera device is busy.
*
- * <p>A camera becomes busy while it's outputs are being configured
- * (after a call to {@link CameraDevice#configureOutputs} or while it's
- * being flushed (after a call to {@link CameraDevice#flush}.</p>
- *
- * <p>Once the on-going operations are complete, the camera will automatically
- * transition into {@link #onIdle} if there is at least one configured output,
- * or {@link #onUnconfigured} otherwise.</p>
- *
- * <p>Any attempts to manipulate the camera while its is busy
- * will result in an {@link IllegalStateException} being thrown.</p>
- *
- * <p>Only the following methods are valid to call while in this state:
- * <ul>
- * <li>{@link CameraDevice#getId}</li>
- * <li>{@link CameraDevice#createCaptureRequest}</li>
- * <li>{@link CameraDevice#close}</li>
- * </ul>
- * </p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera the camera device that has become busy
- *
- * @see CameraDevice#configureOutputs
- * @see CameraDevice#flush
- * @deprecated Use {@link CameraCaptureSession.StateListener} instead.
+ * @deprecated Use {@link CameraCaptureSession.StateListener#onConfigured} instead.
*/
@Deprecated
public void onBusy(CameraDevice camera) {
@@ -1142,30 +586,7 @@ public abstract class CameraDevice implements AutoCloseable {
* The method called when a camera device has finished processing all
* submitted capture requests and has reached an idle state.
*
- * <p>An idle camera device can have its outputs changed by calling {@link
- * CameraDevice#configureOutputs}, which will transition it into the busy state.</p>
- *
- * <p>To idle and reconfigure outputs without canceling any submitted
- * capture requests, the application needs to clear its repeating
- * request/burst, if set, with {@link CameraDevice#stopRepeating}, and
- * then wait for this callback to be called before calling {@link
- * CameraDevice#configureOutputs}.</p>
- *
- * <p>To idle and reconfigure a camera device as fast as possible, the
- * {@link CameraDevice#flush} method can be used, which will discard all
- * pending and in-progress capture requests. Once the {@link
- * CameraDevice#flush} method is called, the application must wait for
- * this callback to fire before calling {@link
- * CameraDevice#configureOutputs}.</p>
- *
- * <p>The default implementation of this method does nothing.</p>
- *
- * @param camera the camera device that has become idle
- *
- * @see CameraDevice#configureOutputs
- * @see CameraDevice#stopRepeating
- * @see CameraDevice#flush
- * @deprecated Use {@link CameraCaptureSession.StateListener} instead.
+ * @deprecated Use {@link CameraCaptureSession.StateListener#onReady} instead.
*/
@Deprecated
public void onIdle(CameraDevice camera) {
@@ -1221,7 +642,7 @@ public abstract class CameraDevice implements AutoCloseable {
*
* @param camera The device reporting the error
* @param error The error code, one of the
- * {@code CameraDeviceListener.ERROR_*} values.
+ * {@code StateListener.ERROR_*} values.
*
* @see #ERROR_CAMERA_DEVICE
* @see #ERROR_CAMERA_SERVICE
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 9046b136e3c1..a69a813cb85b 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -35,7 +35,7 @@ import android.util.ArrayMap;
import java.util.ArrayList;
/**
- * <p>An interface for iterating, listing, and connecting to
+ * <p>A system service manager for detecting, characterizing, and connecting to
* {@link CameraDevice CameraDevices}.</p>
*
* <p>You can get an instance of this class by calling
@@ -244,11 +244,7 @@ public final class CameraManager {
USE_CALLING_UID, holder);
cameraUser = ICameraDeviceUser.Stub.asInterface(holder.getBinder());
} catch (CameraRuntimeException e) {
- if (e.getReason() == CameraAccessException.CAMERA_DEPRECATED_HAL) {
- // Use legacy camera implementation for HAL1 devices
- Log.i(TAG, "Using legacy camera HAL.");
- cameraUser = CameraDeviceUserShim.connectBinderShim(callbacks, id);
- } else if (e.getReason() == CameraAccessException.CAMERA_IN_USE ||
+ if (e.getReason() == CameraAccessException.CAMERA_IN_USE ||
e.getReason() == CameraAccessException.MAX_CAMERAS_IN_USE ||
e.getReason() == CameraAccessException.CAMERA_DISABLED ||
e.getReason() == CameraAccessException.CAMERA_DISCONNECTED ||
@@ -358,14 +354,18 @@ public final class CameraManager {
}
/**
- * Interface for listening to camera devices becoming available or
- * unavailable.
+ * A listener for camera devices becoming available or
+ * unavailable to open.
*
* <p>Cameras become available when they are no longer in use, or when a new
* removable camera is connected. They become unavailable when some
* application or service starts using a camera, or when a removable camera
* is disconnected.</p>
*
+ * <p>Extend this listener and pass an instance of the subclass to
+ * {@link CameraManager#addAvailabilityListener} to be notified of such availability
+ * changes.</p>
+ *
* @see addAvailabilityListener
*/
public static abstract class AvailabilityListener {
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index b3e165e793eb..33e19150934f 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -157,8 +157,8 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>The lens focus distance is not accurate, and the units used for
- * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} do not correspond to any physical units.
- * Setting the lens to the same focus distance on separate occasions may
+ * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} do not correspond to any physical units.</p>
+ * <p>Setting the lens to the same focus distance on separate occasions may
* result in a different real focus distance, depending on factors such
* as the orientation of the device, the age of the focusing mechanism,
* and the device temperature. The focus distance value will still be
@@ -172,20 +172,24 @@ public abstract class CameraMetadata<TKey> {
public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0;
/**
- * <p>The lens focus distance is measured in diopters. However, setting the lens
- * to the same focus distance on separate occasions may result in a
- * different real focus distance, depending on factors such as the
- * orientation of the device, the age of the focusing mechanism, and
- * the device temperature.</p>
+ * <p>The lens focus distance is measured in diopters.</p>
+ * <p>However, setting the lens to the same focus distance
+ * on separate occasions may result in a different real
+ * focus distance, depending on factors such as the
+ * orientation of the device, the age of the focusing
+ * mechanism, and the device temperature.</p>
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1;
/**
- * <p>The lens focus distance is measured in diopters. The lens mechanism is
- * calibrated so that setting the same focus distance is repeatable on
- * multiple occasions with good accuracy, and the focus distance corresponds
- * to the real physical distance to the plane of best focus.</p>
+ * <p>The lens focus distance is measured in diopters, and
+ * is calibrated.</p>
+ * <p>The lens mechanism is calibrated so that setting the
+ * same focus distance is repeatable on multiple
+ * occasions with good accuracy, and the focus distance
+ * corresponds to the real physical distance to the plane
+ * of best focus.</p>
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2;
@@ -195,11 +199,13 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>The camera device faces the same direction as the device's screen.</p>
* @see CameraCharacteristics#LENS_FACING
*/
public static final int LENS_FACING_FRONT = 0;
/**
+ * <p>The camera device faces the opposite direction as the device's screen.</p>
* @see CameraCharacteristics#LENS_FACING
*/
public static final int LENS_FACING_BACK = 1;
@@ -215,11 +221,10 @@ public abstract class CameraMetadata<TKey> {
* <p>The full set of features supported by this capability makes
* the camera2 api backwards compatible with the camera1
* (android.hardware.Camera) API.</p>
- * <p>TODO: @hide this. Doesn't really mean anything except
- * act as a catch-all for all the 'base' functionality.</p>
*
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+ * @hide
*/
public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0;
@@ -228,15 +233,14 @@ public abstract class CameraMetadata<TKey> {
* tags or functionality not encapsulated by one of the other
* capabilities.</p>
* <p>A typical example is all tags marked 'optional'.</p>
- * <p>TODO: @hide. We may not need this if we @hide all the optional
- * tags not belonging to a capability.</p>
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+ * @hide
*/
public static final int REQUEST_AVAILABLE_CAPABILITIES_OPTIONAL = 1;
/**
* <p>The camera device can be manually controlled (3A algorithms such
- * as auto exposure, and auto focus can be bypassed).
+ * as auto-exposure, and auto-focus can be bypassed).
* The camera device supports basic manual control of the sensor image
* acquisition related stages. This means the following controls are
* guaranteed to be supported:</p>
@@ -257,11 +261,11 @@ public abstract class CameraMetadata<TKey> {
* <li>{@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</li>
* </ul>
* </li>
- * <li>Manual lens control<ul>
+ * <li>Manual lens control (if the lens is adjustable)<ul>
* <li>android.lens.*</li>
* </ul>
* </li>
- * <li>Manual flash control<ul>
+ * <li>Manual flash control (if a flash unit is present)<ul>
* <li>android.flash.*</li>
* </ul>
* </li>
@@ -312,8 +316,6 @@ public abstract class CameraMetadata<TKey> {
* </ul>
* <p>If auto white balance is enabled, then the camera device
* will accurately report the values applied by AWB in the result.</p>
- * <p>The camera device will also support everything in MANUAL_SENSOR
- * except manual lens control and manual flash control.</p>
* <p>A given camera device may also support additional post-processing
* controls, but this capability only covers the above list of controls.</p>
*
@@ -341,6 +343,7 @@ public abstract class CameraMetadata<TKey> {
* resolution of JPEG streams.</li>
* </ul>
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+ * @hide
*/
public static final int REQUEST_AVAILABLE_CAPABILITIES_ZSL = 4;
@@ -354,12 +357,14 @@ public abstract class CameraMetadata<TKey> {
* <li>RAW16 is reprocessable into both YUV_420_888 and JPEG
* formats.</li>
* <li>The maximum available resolution for RAW16 streams (both
- * input/output) will match the value in
- * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</li>
+ * input/output) will match either the value in
+ * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize} or
+ * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</li>
* <li>All DNG-related optional metadata entries are provided
* by the camera device.</li>
* </ul>
*
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@@ -370,13 +375,13 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>The camera device will only support centered crop regions.</p>
+ * <p>The camera device only supports centered crop regions.</p>
* @see CameraCharacteristics#SCALER_CROPPING_TYPE
*/
public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0;
/**
- * <p>The camera device will support arbitrarily chosen crop regions.</p>
+ * <p>The camera device supports arbitrarily chosen crop regions.</p>
* @see CameraCharacteristics#SCALER_CROPPING_TYPE
*/
public static final int SCALER_CROPPING_TYPE_FREEFORM = 1;
@@ -522,7 +527,7 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>android.led.transmit control is used</p>
+ * <p>android.led.transmit control is used.</p>
* @see CameraCharacteristics#LED_AVAILABLE_LEDS
* @hide
*/
@@ -533,11 +538,14 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>This camera device has only limited capabilities.</p>
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0;
/**
+ * <p>This camera device is capable of supporting advanced imaging
+ * applications.</p>
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1;
@@ -547,9 +555,9 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>Every frame has the requests immediately applied.
- * (and furthermore for all results,
- * <code>android.sync.frameNumber == android.request.frameCount</code>)</p>
+ * <p>Every frame has the requests immediately applied.</p>
+ * <p>Furthermore for all results,
+ * <code>android.sync.frameNumber == android.request.frameCount</code></p>
* <p>Changing controls over multiple requests one after another will
* produce results that have those controls applied atomically
* each frame.</p>
@@ -589,8 +597,8 @@ public abstract class CameraMetadata<TKey> {
public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0;
/**
- * <p>Must not slow down capture rate relative to sensor raw
- * output.</p>
+ * <p>Color correction processing must not slow down
+ * capture rate relative to sensor raw output.</p>
* <p>Advanced white balance adjustments above and beyond
* the specified white balance pipeline may be applied.</p>
* <p>If AWB is enabled with <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != OFF</code>, then
@@ -603,8 +611,9 @@ public abstract class CameraMetadata<TKey> {
public static final int COLOR_CORRECTION_MODE_FAST = 1;
/**
- * <p>Capture rate (relative to sensor raw output)
- * may be reduced by high quality.</p>
+ * <p>Color correction processing operates at improved
+ * quality but reduced capture rate (relative to sensor raw
+ * output).</p>
* <p>Advanced white balance adjustments above and beyond
* the specified white balance pipeline may be applied.</p>
* <p>If AWB is enabled with <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != OFF</code>, then
@@ -655,8 +664,8 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>The camera device's autoexposure routine is disabled;
- * the application-selected {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+ * <p>The camera device's autoexposure routine is disabled.</p>
+ * <p>The application-selected {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
* {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} and
* {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are used by the camera
* device, along with android.flash.* fields, if there's
@@ -671,7 +680,8 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>The camera device's autoexposure routine is active,
- * with no flash control. The application's values for
+ * with no flash control.</p>
+ * <p>The application's values for
* {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
* {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
* {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are ignored. The
@@ -688,10 +698,10 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>Like ON, except that the camera device also controls
* the camera's flash unit, firing it in low-light
- * conditions. The flash may be fired during a
- * precapture sequence (triggered by
- * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and may be fired
- * for captures for which the
+ * conditions.</p>
+ * <p>The flash may be fired during a precapture sequence
+ * (triggered by {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and
+ * may be fired for captures for which the
* {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
* STILL_CAPTURE</p>
*
@@ -704,10 +714,10 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>Like ON, except that the camera device also controls
* the camera's flash unit, always firing it for still
- * captures. The flash may be fired during a precapture
- * sequence (triggered by
- * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and will always
- * be fired for captures for which the
+ * captures.</p>
+ * <p>The flash may be fired during a precapture sequence
+ * (triggered by {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and
+ * will always be fired for captures for which the
* {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
* STILL_CAPTURE</p>
*
@@ -719,9 +729,10 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>Like ON_AUTO_FLASH, but with automatic red eye
- * reduction. If deemed necessary by the camera device,
- * a red eye reduction flash will fire during the
- * precapture sequence.</p>
+ * reduction.</p>
+ * <p>If deemed necessary by the camera device, a red eye
+ * reduction flash will fire during the precapture
+ * sequence.</p>
* @see CaptureRequest#CONTROL_AE_MODE
*/
public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4;
@@ -738,8 +749,9 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>The precapture metering sequence will be started
- * by the camera device. The exact effect of the precapture
- * trigger depends on the current AE mode and state.</p>
+ * by the camera device.</p>
+ * <p>The exact effect of the precapture trigger depends on
+ * the current AE mode and state.</p>
* @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
*/
public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1;
@@ -751,7 +763,7 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>The auto-focus routine does not control the lens;
* {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} is controlled by the
- * application</p>
+ * application.</p>
*
* @see CaptureRequest#LENS_FOCUS_DISTANCE
* @see CaptureRequest#CONTROL_AF_MODE
@@ -759,12 +771,14 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_AF_MODE_OFF = 0;
/**
- * <p>If lens is not fixed focus.</p>
- * <p>Use {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} to determine if lens
- * is fixed-focus. In this mode, the lens does not move unless
+ * <p>Basic automatic focus mode.</p>
+ * <p>In this mode, the lens does not move unless
* the autofocus trigger action is called. When that trigger
- * is activated, AF must transition to ACTIVE_SCAN, then to
+ * is activated, AF will transition to ACTIVE_SCAN, then to
* the outcome of the scan (FOCUSED or NOT_FOCUSED).</p>
+ * <p>Always supported if lens is not fixed focus.</p>
+ * <p>Use {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} to determine if lens
+ * is fixed-focus.</p>
* <p>Triggering AF_CANCEL resets the lens position to default,
* and sets the AF state to INACTIVE.</p>
*
@@ -774,11 +788,16 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_AF_MODE_AUTO = 1;
/**
+ * <p>Close-up focusing mode.</p>
* <p>In this mode, the lens does not move unless the
- * autofocus trigger action is called.</p>
- * <p>When that trigger is activated, AF must transition to
+ * autofocus trigger action is called. When that trigger is
+ * activated, AF will transition to ACTIVE_SCAN, then to
+ * the outcome of the scan (FOCUSED or NOT_FOCUSED). This
+ * mode is optimized for focusing on objects very close to
+ * the camera.</p>
+ * <p>When that trigger is activated, AF will transition to
* ACTIVE_SCAN, then to the outcome of the scan (FOCUSED or
- * NOT_FOCUSED). Triggering cancel AF resets the lens
+ * NOT_FOCUSED). Triggering cancel AF resets the lens
* position to default, and sets the AF state to
* INACTIVE.</p>
* @see CaptureRequest#CONTROL_AF_MODE
@@ -829,8 +848,11 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4;
/**
- * <p>Extended depth of field (digital focus). AF
- * trigger is ignored, AF state should always be
+ * <p>Extended depth of field (digital focus) mode.</p>
+ * <p>The camera device will produce images with an extended
+ * depth of field automatically; no special focusing
+ * operations need to be done before taking a picture.</p>
+ * <p>AF triggers are ignored, and the AF state will always be
* INACTIVE.</p>
* @see CaptureRequest#CONTROL_AF_MODE
*/
@@ -864,8 +886,8 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>The camera device's auto white balance routine is disabled;
- * the application-selected color transform matrix
+ * <p>The camera device's auto-white balance routine is disabled.</p>
+ * <p>The application-selected color transform matrix
* ({@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}) and gains
* ({@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}) are used by the camera
* device for manual white balance control.</p>
@@ -877,9 +899,12 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_AWB_MODE_OFF = 0;
/**
- * <p>The camera device's auto white balance routine is active;
- * the application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
- * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.</p>
+ * <p>The camera device's auto-white balance routine is active.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
*
* @see CaptureRequest#COLOR_CORRECTION_GAINS
* @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
@@ -888,65 +913,125 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_AWB_MODE_AUTO = 1;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses incandescent light as the assumed scene
- * illumination for white balance. While the exact white balance
- * transforms are up to the camera device, they will approximately
- * match the CIE standard illuminant A.</p>
+ * illumination for white balance.</p>
+ * <p>While the exact white balance transforms are up to the
+ * camera device, they will approximately match the CIE
+ * standard illuminant A.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_INCANDESCENT = 2;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses fluorescent light as the assumed scene
- * illumination for white balance. While the exact white balance
- * transforms are up to the camera device, they will approximately
- * match the CIE standard illuminant F2.</p>
+ * illumination for white balance.</p>
+ * <p>While the exact white balance transforms are up to the
+ * camera device, they will approximately match the CIE
+ * standard illuminant F2.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_FLUORESCENT = 3;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses warm fluorescent light as the assumed scene
- * illumination for white balance. While the exact white balance
- * transforms are up to the camera device, they will approximately
- * match the CIE standard illuminant F4.</p>
+ * illumination for white balance.</p>
+ * <p>While the exact white balance transforms are up to the
+ * camera device, they will approximately match the CIE
+ * standard illuminant F4.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses daylight light as the assumed scene
- * illumination for white balance. While the exact white balance
- * transforms are up to the camera device, they will approximately
- * match the CIE standard illuminant D65.</p>
+ * illumination for white balance.</p>
+ * <p>While the exact white balance transforms are up to the
+ * camera device, they will approximately match the CIE
+ * standard illuminant D65.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_DAYLIGHT = 5;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses cloudy daylight light as the assumed scene
* illumination for white balance.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses twilight light as the assumed scene
* illumination for white balance.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_TWILIGHT = 7;
/**
- * <p>The camera device's auto white balance routine is disabled;
+ * <p>The camera device's auto-white balance routine is disabled;
* the camera device uses shade light as the assumed scene
* illumination for white balance.</p>
+ * <p>The application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+ * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.
+ * For devices that support the MANUAL_POST_PROCESSING capability, the
+ * values used by the camera device for the transform and gains
+ * will be available in the capture result for this request.</p>
+ *
+ * @see CaptureRequest#COLOR_CORRECTION_GAINS
+ * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
* @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final int CONTROL_AWB_MODE_SHADE = 8;
@@ -956,38 +1041,43 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>This request doesn't fall into the other
- * categories. Default to preview-like
+ * <p>The goal of this request doesn't fall into the other
+ * categories. The camera device will default to preview-like
* behavior.</p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0;
/**
- * <p>This request is for a preview-like usecase. The
- * precapture trigger may be used to start off a metering
- * w/flash sequence</p>
+ * <p>This request is for a preview-like use case.</p>
+ * <p>The precapture trigger may be used to start off a metering
+ * w/flash sequence.</p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1;
/**
* <p>This request is for a still capture-type
- * usecase.</p>
+ * use case.</p>
+ * <p>If the flash unit is under automatic control, it may fire as needed.</p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2;
/**
* <p>This request is for a video recording
- * usecase.</p>
+ * use case.</p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3;
/**
* <p>This request is for a video snapshot (still
- * image while recording video) usecase</p>
+ * image while recording video) use case.</p>
+ * <p>The camera device should take the highest-quality image
+ * possible (given the other settings) without disrupting the
+ * frame rate of video recording.<br />
+ * </p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4;
@@ -996,15 +1086,16 @@ public abstract class CameraMetadata<TKey> {
* <p>This request is for a ZSL usecase; the
* application will stream full-resolution images and
* reprocess one or several later for a final
- * capture</p>
+ * capture.</p>
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
*/
public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5;
/**
* <p>This request is for manual capture use case where
- * the applications want to directly control the capture parameters
- * (e.g. {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}, {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} etc.).</p>
+ * the applications want to directly control the capture parameters.</p>
+ * <p>For example, the application may wish to manually control
+ * {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}, {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, etc.</p>
*
* @see CaptureRequest#SENSOR_EXPOSURE_TIME
* @see CaptureRequest#SENSOR_SENSITIVITY
@@ -1024,7 +1115,8 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>A "monocolor" effect where the image is mapped into
- * a single color. This will typically be grayscale.</p>
+ * a single color.</p>
+ * <p>This will typically be grayscale.</p>
* @see CaptureRequest#CONTROL_EFFECT_MODE
*/
public static final int CONTROL_EFFECT_MODE_MONO = 1;
@@ -1084,31 +1176,42 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>Full application control of pipeline. All 3A
- * routines are disabled, no other settings in
- * android.control.* have any effect</p>
+ * <p>Full application control of pipeline.</p>
+ * <p>All control by the device's metering and focusing (3A)
+ * routines is disabled, and no other settings in
+ * android.control.* have any effect, except that
+ * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} may be used by the camera
+ * device to select post-processing values for processing
+ * blocks that do not allow for manual control, or are not
+ * exposed by the camera API.</p>
+ * <p>However, the camera device's 3A routines may continue to
+ * collect statistics and update their internal state so that
+ * when control is switched to AUTO mode, good control values
+ * can be immediately applied.</p>
+ *
+ * @see CaptureRequest#CONTROL_CAPTURE_INTENT
* @see CaptureRequest#CONTROL_MODE
*/
public static final int CONTROL_MODE_OFF = 0;
/**
- * <p>Use settings for each individual 3A routine.
- * Manual control of capture parameters is disabled. All
+ * <p>Use settings for each individual 3A routine.</p>
+ * <p>Manual control of capture parameters is disabled. All
* controls in android.control.* besides sceneMode take
- * effect</p>
+ * effect.</p>
* @see CaptureRequest#CONTROL_MODE
*/
public static final int CONTROL_MODE_AUTO = 1;
/**
- * <p>Use specific scene mode. Enabling this disables
- * control.aeMode, control.awbMode and control.afMode
- * controls; the camera device will ignore those settings while
- * USE_SCENE_MODE is active (except for FACE_PRIORITY
- * scene mode). Other control entries are still active.
- * This setting can only be used if scene mode is supported
- * (i.e. {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes} contain some modes
- * other than DISABLED).</p>
+ * <p>Use a specific scene mode.</p>
+ * <p>Enabling this disables control.aeMode, control.awbMode and
+ * control.afMode controls; the camera device will ignore
+ * those settings while USE_SCENE_MODE is active (except for
+ * FACE_PRIORITY scene mode). Other control entries are still
+ * active. This setting can only be used if scene mode is
+ * supported (i.e. {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}
+ * contain some modes other than DISABLED).</p>
*
* @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES
* @see CaptureRequest#CONTROL_MODE
@@ -1118,7 +1221,12 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>Same as OFF mode, except that this capture will not be
* used by camera device background auto-exposure, auto-white balance and
- * auto-focus algorithms to update their statistics.</p>
+ * auto-focus algorithms (3A) to update their statistics.</p>
+ * <p>Specifically, the 3A routines are locked to the last
+ * values set from a request with AUTO, OFF, or
+ * USE_SCENE_MODE, and any statistics or state updates
+ * collected from manual captures with OFF_KEEP_STATE will be
+ * discarded by the camera device.</p>
* @see CaptureRequest#CONTROL_MODE
*/
public static final int CONTROL_MODE_OFF_KEEP_STATE = 3;
@@ -1136,8 +1244,9 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>If face detection support exists, use face
* detection data for auto-focus, auto-white balance, and
- * auto-exposure routines. If face detection statistics are
- * disabled (i.e. {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} is set to OFF),
+ * auto-exposure routines.</p>
+ * <p>If face detection statistics are disabled
+ * (i.e. {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} is set to OFF),
* this should still operate correctly (but will not return
* face detection statistics to the framework).</p>
* <p>Unlike the other scene modes, {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode},
@@ -1153,8 +1262,8 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1;
/**
- * <p>Optimized for photos of quickly moving objects.
- * Similar to SPORTS.</p>
+ * <p>Optimized for photos of quickly moving objects.</p>
+ * <p>Similar to SPORTS.</p>
* @see CaptureRequest#CONTROL_SCENE_MODE
*/
public static final int CONTROL_SCENE_MODE_ACTION = 2;
@@ -1223,8 +1332,8 @@ public abstract class CameraMetadata<TKey> {
public static final int CONTROL_SCENE_MODE_FIREWORKS = 12;
/**
- * <p>Optimized for photos of quickly moving people.
- * Similar to ACTION.</p>
+ * <p>Optimized for photos of quickly moving people.</p>
+ * <p>Similar to ACTION.</p>
* @see CaptureRequest#CONTROL_SCENE_MODE
*/
public static final int CONTROL_SCENE_MODE_SPORTS = 13;
@@ -1256,11 +1365,13 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>Video stabilization is disabled.</p>
* @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
*/
public static final int CONTROL_VIDEO_STABILIZATION_MODE_OFF = 0;
/**
+ * <p>Video stabilization is enabled.</p>
* @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
*/
public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1;
@@ -1270,21 +1381,20 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>No edge enhancement is applied</p>
+ * <p>No edge enhancement is applied.</p>
* @see CaptureRequest#EDGE_MODE
*/
public static final int EDGE_MODE_OFF = 0;
/**
- * <p>Must not slow down frame rate relative to sensor
+ * <p>Apply edge enhancement at a quality level that does not slow down frame rate relative to sensor
* output</p>
* @see CaptureRequest#EDGE_MODE
*/
public static final int EDGE_MODE_FAST = 1;
/**
- * <p>Frame rate may be reduced by high
- * quality</p>
+ * <p>Apply high-quality edge enhancement, at a cost of reducing output frame rate.</p>
* @see CaptureRequest#EDGE_MODE
*/
public static final int EDGE_MODE_HIGH_QUALITY = 2;
@@ -1317,10 +1427,10 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>No hot pixel correction is applied.</p>
* <p>The frame rate must not be reduced relative to sensor raw output
* for this option.</p>
- * <p>No hot pixel correction is applied.
- * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+ * <p>The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CaptureRequest#HOT_PIXEL_MODE
@@ -1328,10 +1438,9 @@ public abstract class CameraMetadata<TKey> {
public static final int HOT_PIXEL_MODE_OFF = 0;
/**
- * <p>The frame rate must not be reduced relative to sensor raw output
- * for this option.</p>
- * <p>Hot pixel correction is applied.
- * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+ * <p>Hot pixel correction is applied, without reducing frame
+ * rate relative to sensor raw output.</p>
+ * <p>The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CaptureRequest#HOT_PIXEL_MODE
@@ -1339,10 +1448,9 @@ public abstract class CameraMetadata<TKey> {
public static final int HOT_PIXEL_MODE_FAST = 1;
/**
- * <p>The frame rate may be reduced relative to sensor raw output
- * for this option.</p>
- * <p>A high-quality hot pixel correction is applied.
- * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+ * <p>High-quality hot pixel correction is applied, at a cost
+ * of reducing frame rate relative to sensor raw output.</p>
+ * <p>The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CaptureRequest#HOT_PIXEL_MODE
@@ -1370,21 +1478,21 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>No noise reduction is applied</p>
+ * <p>No noise reduction is applied.</p>
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
public static final int NOISE_REDUCTION_MODE_OFF = 0;
/**
- * <p>Must not slow down frame rate relative to sensor
- * output</p>
+ * <p>Noise reduction is applied without reducing frame rate relative to sensor
+ * output.</p>
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
public static final int NOISE_REDUCTION_MODE_FAST = 1;
/**
- * <p>May slow down frame rate to provide highest
- * quality</p>
+ * <p>High-quality noise reduction is applied, at the cost of reducing frame rate
+ * relative to sensor output.</p>
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2;
@@ -1394,8 +1502,9 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>Default. No test pattern mode is used, and the camera
+ * <p>No test pattern mode is used, and the camera
* device returns captures from the image sensor.</p>
+ * <p>This is the default if the key is not set.</p>
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0;
@@ -1499,19 +1608,21 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>No lens shading correction is applied</p>
+ * <p>No lens shading correction is applied.</p>
* @see CaptureRequest#SHADING_MODE
*/
public static final int SHADING_MODE_OFF = 0;
/**
- * <p>Must not slow down frame rate relative to sensor raw output</p>
+ * <p>Apply lens shading corrections, without slowing
+ * frame rate relative to sensor raw output</p>
* @see CaptureRequest#SHADING_MODE
*/
public static final int SHADING_MODE_FAST = 1;
/**
- * <p>Frame rate may be reduced by high quality</p>
+ * <p>Apply high-quality lens shading correction, at the
+ * cost of reduced frame rate.</p>
* @see CaptureRequest#SHADING_MODE
*/
public static final int SHADING_MODE_HIGH_QUALITY = 2;
@@ -1521,20 +1632,28 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>Do not include face detection statistics in capture
+ * results.</p>
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0;
/**
- * <p>Optional Return rectangle and confidence
- * only</p>
+ * <p>Return face rectangle and confidence values only.</p>
+ * <p>In this mode, only android.statistics.faceRectangles and
+ * android.statistics.faceScores outputs are valid.</p>
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1;
/**
- * <p>Optional Return all face
- * metadata</p>
+ * <p>Return all face
+ * metadata.</p>
+ * <p>In this mode,
+ * android.statistics.faceRectangles,
+ * android.statistics.faceScores,
+ * android.statistics.faceIds, and
+ * android.statistics.faceLandmarks outputs are valid.</p>
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2;
@@ -1544,11 +1663,13 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>Do not include a lens shading map in the capture result.</p>
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
*/
public static final int STATISTICS_LENS_SHADING_MAP_MODE_OFF = 0;
/**
+ * <p>Include a lens shading map in the capture result.</p>
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
*/
public static final int STATISTICS_LENS_SHADING_MAP_MODE_ON = 1;
@@ -1572,15 +1693,15 @@ public abstract class CameraMetadata<TKey> {
public static final int TONEMAP_MODE_CONTRAST_CURVE = 0;
/**
- * <p>Advanced gamma mapping and color enhancement may be applied.</p>
- * <p>Should not slow down frame rate relative to raw sensor output.</p>
+ * <p>Advanced gamma mapping and color enhancement may be applied, without
+ * reducing frame rate compared to raw sensor output.</p>
* @see CaptureRequest#TONEMAP_MODE
*/
public static final int TONEMAP_MODE_FAST = 1;
/**
- * <p>Advanced gamma mapping and color enhancement may be applied.</p>
- * <p>May slow down frame rate relative to raw sensor output.</p>
+ * <p>High-quality gamma mapping and color enhancement will be applied, at
+ * the cost of reduced frame rate compared to raw sensor output.</p>
* @see CaptureRequest#TONEMAP_MODE
*/
public static final int TONEMAP_MODE_HIGH_QUALITY = 2;
@@ -1590,7 +1711,8 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>AE is off or recently reset. When a camera device is opened, it starts in
+ * <p>AE is off or recently reset.</p>
+ * <p>When a camera device is opened, it starts in
* this state. This is a transient state, the camera device may skip reporting
* this state in capture result.</p>
* @see CaptureResult#CONTROL_AE_STATE
@@ -1599,7 +1721,8 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>AE doesn't yet have a good set of control values
- * for the current scene. This is a transient state, the camera device may skip
+ * for the current scene.</p>
+ * <p>This is a transient state, the camera device may skip
* reporting this state in capture result.</p>
* @see CaptureResult#CONTROL_AE_STATE
*/
@@ -1628,11 +1751,13 @@ public abstract class CameraMetadata<TKey> {
/**
* <p>AE has been asked to do a precapture sequence
- * (through the {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} START),
- * and is currently executing it. Once PRECAPTURE
- * completes, AE will transition to CONVERGED or
- * FLASH_REQUIRED as appropriate. This is a transient state, the
- * camera device may skip reporting this state in capture result.</p>
+ * and is currently executing it.</p>
+ * <p>Precapture can be triggered through setting
+ * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} to START.</p>
+ * <p>Once PRECAPTURE completes, AE will transition to CONVERGED
+ * or FLASH_REQUIRED as appropriate. This is a transient
+ * state, the camera device may skip reporting this state in
+ * capture result.</p>
*
* @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
* @see CaptureResult#CONTROL_AE_STATE
@@ -1644,61 +1769,78 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>AF off or has not yet tried to scan/been asked
- * to scan. When a camera device is opened, it starts in
- * this state. This is a transient state, the camera device may
- * skip reporting this state in capture result.</p>
+ * <p>AF is off or has not yet tried to scan/been asked
+ * to scan.</p>
+ * <p>When a camera device is opened, it starts in this
+ * state. This is a transient state, the camera device may
+ * skip reporting this state in capture
+ * result.</p>
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_INACTIVE = 0;
/**
- * <p>if CONTINUOUS_* modes are supported. AF is
- * currently doing an AF scan initiated by a continuous
- * autofocus mode. This is a transient state, the camera device may
- * skip reporting this state in capture result.</p>
+ * <p>AF is currently performing an AF scan initiated the
+ * camera device in a continuous autofocus mode.</p>
+ * <p>Only used by CONTINUOUS_* AF modes. This is a transient
+ * state, the camera device may skip reporting this state in
+ * capture result.</p>
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1;
/**
- * <p>if CONTINUOUS_* modes are supported. AF currently
- * believes it is in focus, but may restart scanning at
- * any time. This is a transient state, the camera device may skip
- * reporting this state in capture result.</p>
+ * <p>AF currently believes it is in focus, but may
+ * restart scanning at any time.</p>
+ * <p>Only used by CONTINUOUS_* AF modes. This is a transient
+ * state, the camera device may skip reporting this state in
+ * capture result.</p>
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2;
/**
- * <p>if AUTO or MACRO modes are supported. AF is doing
- * an AF scan because it was triggered by AF trigger. This is a
- * transient state, the camera device may skip reporting
- * this state in capture result.</p>
+ * <p>AF is performing an AF scan because it was
+ * triggered by AF trigger.</p>
+ * <p>Only used by AUTO or MACRO AF modes. This is a transient
+ * state, the camera device may skip reporting this state in
+ * capture result.</p>
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3;
/**
- * <p>if any AF mode besides OFF is supported. AF
- * believes it is focused correctly and is
- * locked.</p>
+ * <p>AF believes it is focused correctly and has locked
+ * focus.</p>
+ * <p>This state is reached only after an explicit START AF trigger has been
+ * sent ({@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger}), when good focus has been obtained.</p>
+ * <p>The lens will remain stationary until the AF mode ({@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}) is changed or
+ * a new AF trigger is sent to the camera device ({@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger}).</p>
+ *
+ * @see CaptureRequest#CONTROL_AF_MODE
+ * @see CaptureRequest#CONTROL_AF_TRIGGER
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4;
/**
- * <p>if any AF mode besides OFF is supported. AF has
- * failed to focus successfully and is
- * locked.</p>
+ * <p>AF has failed to focus successfully and has locked
+ * focus.</p>
+ * <p>This state is reached only after an explicit START AF trigger has been
+ * sent ({@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger}), when good focus cannot be obtained.</p>
+ * <p>The lens will remain stationary until the AF mode ({@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}) is changed or
+ * a new AF trigger is sent to the camera device ({@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger}).</p>
+ *
+ * @see CaptureRequest#CONTROL_AF_MODE
+ * @see CaptureRequest#CONTROL_AF_TRIGGER
* @see CaptureResult#CONTROL_AF_STATE
*/
public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5;
/**
- * <p>if CONTINUOUS_* modes are supported. AF finished a
- * passive scan without finding focus, and may restart
- * scanning at any time. This is a transient state, the camera
+ * <p>AF finished a passive scan without finding focus,
+ * and may restart scanning at any time.</p>
+ * <p>Only used by CONTINUOUS_* AF modes. This is a transient state, the camera
* device may skip reporting this state in capture result.</p>
* @see CaptureResult#CONTROL_AF_STATE
*/
@@ -1709,16 +1851,19 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>AWB is not in auto mode. When a camera device is opened, it
- * starts in this state. This is a transient state, the camera device may
- * skip reporting this state in capture result.</p>
+ * <p>AWB is not in auto mode, or has not yet started metering.</p>
+ * <p>When a camera device is opened, it starts in this
+ * state. This is a transient state, the camera device may
+ * skip reporting this state in capture
+ * result.</p>
* @see CaptureResult#CONTROL_AWB_STATE
*/
public static final int CONTROL_AWB_STATE_INACTIVE = 0;
/**
* <p>AWB doesn't yet have a good set of control
- * values for the current scene. This is a transient state, the camera device
+ * values for the current scene.</p>
+ * <p>This is a transient state, the camera device
* may skip reporting this state in capture result.</p>
* @see CaptureResult#CONTROL_AWB_STATE
*/
@@ -1766,8 +1911,9 @@ public abstract class CameraMetadata<TKey> {
public static final int FLASH_STATE_FIRED = 3;
/**
- * <p>Flash partially illuminated this frame. This is usually due to the next
- * or previous frame having the flash fire, and the flash spilling into this capture
+ * <p>Flash partially illuminated this frame.</p>
+ * <p>This is usually due to the next or previous frame having
+ * the flash fire, and the flash spilling into this capture
* due to hardware limitations.</p>
* @see CaptureResult#FLASH_STATE
*/
@@ -1790,8 +1936,10 @@ public abstract class CameraMetadata<TKey> {
public static final int LENS_STATE_STATIONARY = 0;
/**
- * <p>Any of the lens parameters ({@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
- * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} or {@link CaptureRequest#LENS_APERTURE android.lens.aperture}) is changing.</p>
+ * <p>One or several of the lens parameters
+ * ({@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
+ * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} or {@link CaptureRequest#LENS_APERTURE android.lens.aperture}) is
+ * currently changing.</p>
*
* @see CaptureRequest#LENS_APERTURE
* @see CaptureRequest#LENS_FILTER_DENSITY
@@ -1806,16 +1954,22 @@ public abstract class CameraMetadata<TKey> {
//
/**
+ * <p>The camera device does not detect any flickering illumination
+ * in the current scene.</p>
* @see CaptureResult#STATISTICS_SCENE_FLICKER
*/
public static final int STATISTICS_SCENE_FLICKER_NONE = 0;
/**
+ * <p>The camera device detects illumination flickering at 50Hz
+ * in the current scene.</p>
* @see CaptureResult#STATISTICS_SCENE_FLICKER
*/
public static final int STATISTICS_SCENE_FLICKER_50HZ = 1;
/**
+ * <p>The camera device detects illumination flickering at 60Hz
+ * in the current scene.</p>
* @see CaptureResult#STATISTICS_SCENE_FLICKER
*/
public static final int STATISTICS_SCENE_FLICKER_60HZ = 2;
@@ -1825,8 +1979,8 @@ public abstract class CameraMetadata<TKey> {
//
/**
- * <p>The current result is not yet fully synchronized to any request.
- * Synchronization is in progress, and reading metadata from this
+ * <p>The current result is not yet fully synchronized to any request.</p>
+ * <p>Synchronization is in progress, and reading metadata from this
* result may include a mix of data that have taken effect since the
* last synchronization time.</p>
* <p>In some future result, within {@link CameraCharacteristics#SYNC_MAX_LATENCY android.sync.maxLatency} frames,
@@ -1841,10 +1995,10 @@ public abstract class CameraMetadata<TKey> {
public static final int SYNC_FRAME_NUMBER_CONVERGING = -1;
/**
- * <p>The current result's synchronization status is unknown. The
- * result may have already converged, or it may be in progress.
- * Reading from this result may include some mix of settings from
- * past requests.</p>
+ * <p>The current result's synchronization status is unknown.</p>
+ * <p>The result may have already converged, or it may be in
+ * progress. Reading from this result may include some mix
+ * of settings from past requests.</p>
* <p>After a settings change, the new settings will eventually all
* take effect for the output buffers and results. However, this
* value will not change when that happens. Altering settings
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index d4dfdd58c836..bf7bd37c90a2 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -43,14 +43,14 @@ import java.util.Objects;
* <p>CaptureRequests can be created by using a {@link Builder} instance,
* obtained by calling {@link CameraDevice#createCaptureRequest}</p>
*
- * <p>CaptureRequests are given to {@link CameraDevice#capture} or
- * {@link CameraDevice#setRepeatingRequest} to capture images from a camera.</p>
+ * <p>CaptureRequests are given to {@link CameraCaptureSession#capture} or
+ * {@link CameraCaptureSession#setRepeatingRequest} to capture images from a camera.</p>
*
* <p>Each request can specify a different subset of target Surfaces for the
* camera to send the captured data to. All the surfaces used in a request must
* be part of the surface list given to the last call to
- * {@link CameraDevice#configureOutputs}, when the request is submitted to the
- * camera device.</p>
+ * {@link CameraDevice#createCaptureSession}, when the request is submitted to the
+ * session.</p>
*
* <p>For example, a request meant for repeating preview might only include the
* Surface for the preview SurfaceView or SurfaceTexture, while a
@@ -357,11 +357,11 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* request fields to one of the templates defined in {@link CameraDevice}.
*
* @see CameraDevice#createCaptureRequest
- * @see #TEMPLATE_PREVIEW
- * @see #TEMPLATE_RECORD
- * @see #TEMPLATE_STILL_CAPTURE
- * @see #TEMPLATE_VIDEO_SNAPSHOT
- * @see #TEMPLATE_MANUAL
+ * @see CameraDevice#TEMPLATE_PREVIEW
+ * @see CameraDevice#TEMPLATE_RECORD
+ * @see CameraDevice#TEMPLATE_STILL_CAPTURE
+ * @see CameraDevice#TEMPLATE_VIDEO_SNAPSHOT
+ * @see CameraDevice#TEMPLATE_MANUAL
*/
public final static class Builder {
@@ -381,7 +381,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* <p>Add a surface to the list of targets for this request</p>
*
* <p>The Surface added must be one of the surfaces included in the most
- * recent call to {@link CameraDevice#configureOutputs}, when the
+ * recent call to {@link CameraDevice#createCaptureSession}, when the
* request is given to the camera device.</p>
*
* <p>Adding a target more than once has no effect.</p>
@@ -473,7 +473,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>The mode control selects how the image data is converted from the
* sensor's native color into linear sRGB color.</p>
- * <p>When auto-white balance is enabled with {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, this
+ * <p>When auto-white balance (AWB) is enabled with {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, this
* control is overridden by the AWB routine. When AWB is disabled, the
* application controls how the color mapping is performed.</p>
* <p>We define the expected processing pipeline below. For consistency
@@ -524,7 +524,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>A color transform matrix to use to transform
- * from sensor RGB color space to output linear sRGB color space</p>
+ * from sensor RGB color space to output linear sRGB color space.</p>
* <p>This matrix is either set by the camera device when the request
* {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
* directly by the application in the request when the
@@ -600,13 +600,17 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.control.aeAntibandingMode", int.class);
/**
- * <p>Adjustment to AE target image
- * brightness</p>
- * <p>For example, if EV step is 0.333, '6' will mean an
- * exposure compensation of +2 EV; -3 will mean an exposure
- * compensation of -1 EV. Note that this control will only be effective
- * if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF. This control will take effect even when
- * {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} <code>== true</code>.</p>
+ * <p>Adjustment to auto-exposure (AE) target image
+ * brightness.</p>
+ * <p>The adjustment is measured as a count of steps, with the
+ * step size defined by {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP android.control.aeCompensationStep} and the
+ * allowed range by {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE android.control.aeCompensationRange}.</p>
+ * <p>For example, if the exposure value (EV) step is 0.333, '6'
+ * will mean an exposure compensation of +2 EV; -3 will mean an
+ * exposure compensation of -1 EV. One EV represents a doubling
+ * of image brightness. Note that this control will only be
+ * effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF. This control
+ * will take effect even when {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} <code>== true</code>.</p>
* <p>In the event of exposure compensation value being changed, camera device
* may take several frames to reach the newly requested exposure target.
* During that time, {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} field will be in the SEARCHING
@@ -614,6 +618,8 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* change from SEARCHING to either CONVERGED, LOCKED (if AE lock is enabled), or
* FLASH_REQUIRED (if the scene is too dark for still capture).</p>
*
+ * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE
+ * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
* @see CaptureRequest#CONTROL_AE_LOCK
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureResult#CONTROL_AE_STATE
@@ -622,7 +628,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.control.aeExposureCompensation", int.class);
/**
- * <p>Whether AE is currently locked to its latest
+ * <p>Whether auto-exposure (AE) is currently locked to its latest
* calculated values.</p>
* <p>Note that even when AE is locked, the flash may be
* fired if the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is ON_AUTO_FLASH / ON_ALWAYS_FLASH /
@@ -711,9 +717,9 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Range over which fps can be adjusted to
- * maintain exposure</p>
- * <p>Only constrains AE algorithm, not manual control
- * of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
+ * maintain exposure.</p>
+ * <p>Only constrains auto-exposure (AE) algorithm, not
+ * manual control of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
*
* @see CaptureRequest#SENSOR_EXPOSURE_TIME
*/
@@ -727,9 +733,18 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* included at all in the request settings. When included and
* set to START, the camera device will trigger the autoexposure
* precapture metering sequence.</p>
- * <p>The effect of AE precapture trigger depends on the current
- * AE mode and state; see {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture
- * state transition details.</p>
+ * <p>The precapture sequence should triggered before starting a
+ * high-quality still capture for final metering decisions to
+ * be made, and for firing pre-capture flash pulses to estimate
+ * scene brightness and required final capture flash power, when
+ * the flash is enabled.</p>
+ * <p>Normally, this entry should be set to START for only a
+ * single request, and the application should wait until the
+ * sequence completes before starting a new one.</p>
+ * <p>The exact effect of auto-exposure (AE) precapture trigger
+ * depends on the current AE mode and state; see
+ * {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture state transition
+ * details.</p>
*
* @see CaptureResult#CONTROL_AE_STATE
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_IDLE
@@ -739,8 +754,8 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
/**
- * <p>Whether AF is currently enabled, and what
- * mode it is set to</p>
+ * <p>Whether auto-focus (AF) is currently enabled, and what
+ * mode it is set to.</p>
* <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus
* (i.e. <code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} &gt; 0</code>).</p>
* <p>If the lens is controlled by the camera device auto-focus algorithm,
@@ -793,7 +808,11 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* autofocus algorithm. If autofocus is disabled, this trigger has no effect.</p>
* <p>When set to CANCEL, the camera device will cancel any active trigger,
* and return to its initial AF state.</p>
- * <p>See {@link CaptureResult#CONTROL_AF_STATE android.control.afState} for what that means for each AF mode.</p>
+ * <p>Generally, applications should set this entry to START or CANCEL for only a
+ * single capture, and then return it to IDLE (or not set at all). Specifying
+ * START for multiple captures in a row means restarting the AF operation over
+ * and over again.</p>
+ * <p>See {@link CaptureResult#CONTROL_AF_STATE android.control.afState} for what the trigger means for each AF mode.</p>
*
* @see CaptureResult#CONTROL_AF_STATE
* @see #CONTROL_AF_TRIGGER_IDLE
@@ -804,31 +823,37 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.control.afTrigger", int.class);
/**
- * <p>Whether AWB is currently locked to its
+ * <p>Whether auto-white balance (AWB) is currently locked to its
* latest calculated values.</p>
- * <p>Note that AWB lock is only meaningful for AUTO
- * mode; in other modes, AWB is already fixed to a specific
- * setting.</p>
+ * <p>Note that AWB lock is only meaningful when
+ * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} is in the AUTO mode; in other modes,
+ * AWB is already fixed to a specific setting.</p>
+ *
+ * @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
/**
- * <p>Whether AWB is currently setting the color
+ * <p>Whether auto-white balance (AWB) is currently setting the color
* transform fields, and what its illumination target
* is.</p>
* <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is AUTO.</p>
- * <p>When set to the ON mode, the camera device's auto white balance
+ * <p>When set to the ON mode, the camera device's auto-white balance
* routine is enabled, overriding the application's selected
* {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
* {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
- * <p>When set to the OFF mode, the camera device's auto white balance
+ * <p>When set to the OFF mode, the camera device's auto-white balance
* routine is disabled. The application manually controls the white
* balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}
* and {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
- * <p>When set to any other modes, the camera device's auto white balance
- * routine is disabled. The camera device uses each particular illumination
- * target for white balance adjustment.</p>
+ * <p>When set to any other modes, the camera device's auto-white
+ * balance routine is disabled. The camera device uses each
+ * particular illumination target for white balance
+ * adjustment. The application's values for
+ * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform},
+ * {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
+ * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} are ignored.</p>
*
* @see CaptureRequest#COLOR_CORRECTION_GAINS
* @see CaptureRequest#COLOR_CORRECTION_MODE
@@ -879,8 +904,8 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* strategy.</p>
* <p>This control (except for MANUAL) is only effective if
* <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF</code> and any 3A routine is active.</p>
- * <p>ZERO_SHUTTER_LAG must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
- * contains ZSL. MANUAL must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+ * <p>ZERO_SHUTTER_LAG will be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+ * contains ZSL. MANUAL will be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
* contains MANUAL_SENSOR.</p>
*
* @see CaptureRequest#CONTROL_MODE
@@ -955,7 +980,9 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* <p>This is the mode that that is active when
* <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code>. Aside from FACE_PRIORITY,
* these modes will disable {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode},
- * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} while in use.</p>
+ * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} while in use.
+ * The scene modes available for a given camera device are listed in
+ * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}.</p>
* <p>The interpretation and implementation of these scene modes is left
* to the implementor of the camera device. Their behavior will not be
* consistent across all devices, and any given device may only implement
@@ -963,6 +990,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_AF_MODE
+ * @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES
* @see CaptureRequest#CONTROL_AWB_MODE
* @see CaptureRequest#CONTROL_MODE
* @see #CONTROL_SCENE_MODE_DISABLED
@@ -988,7 +1016,9 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Whether video stabilization is
- * active</p>
+ * active.</p>
+ * <p>Video stabilization automatically translates and scales images from the camera
+ * in order to stabilize motion between consecutive frames.</p>
* <p>If enabled, video stabilization can modify the
* {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} to keep the video stream
* stabilized</p>
@@ -1030,7 +1060,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* <p>When set to OFF, the camera device will not fire flash for this capture.</p>
* <p>When set to SINGLE, the camera device will fire flash regardless of the camera
* device's auto-exposure routine's result. When used in still capture case, this
- * control should be used along with AE precapture metering sequence
+ * control should be used along with auto-exposure (AE) precapture metering sequence
* ({@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}), otherwise, the image may be incorrectly exposed.</p>
* <p>When set to TORCH, the flash will be on continuously. This mode can be used
* for use cases such as preview, auto-focus assist, still capture, or video recording.</p>
@@ -1102,21 +1132,21 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Compression quality of the final JPEG
- * image</p>
- * <p>85-95 is typical usage range</p>
+ * image.</p>
+ * <p>85-95 is typical usage range.</p>
*/
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
/**
* <p>Compression quality of JPEG
- * thumbnail</p>
+ * thumbnail.</p>
*/
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
/**
- * <p>Resolution of embedded JPEG thumbnail</p>
+ * <p>Resolution of embedded JPEG thumbnail.</p>
* <p>When set to (0, 0) value, the JPEG EXIF will not contain thumbnail,
* but the captured JPEG will still be a valid image.</p>
* <p>When a jpeg image capture is issued, the thumbnail size selected should have
@@ -1204,7 +1234,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Distance to plane of sharpest focus,
- * measured from frontmost surface of the lens</p>
+ * measured from frontmost surface of the lens.</p>
* <p>0 means infinity focus. Used value will be clamped
* to [0, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}].</p>
* <p>Like {@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, this setting won't be applied
@@ -1222,12 +1252,18 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Sets whether the camera device uses optical image stabilization (OIS)
* when capturing images.</p>
- * <p>OIS is used to compensate for motion blur due to small movements of
- * the camera during capture. Unlike digital image stabilization, OIS makes
- * use of mechanical elements to stabilize the camera sensor, and thus
- * allows for longer exposure times before camera shake becomes
- * apparent.</p>
- * <p>This is not expected to be supported on most devices.</p>
+ * <p>OIS is used to compensate for motion blur due to small
+ * movements of the camera during capture. Unlike digital image
+ * stabilization ({@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE android.control.videoStabilizationMode}), OIS
+ * makes use of mechanical elements to stabilize the camera
+ * sensor, and thus allows for longer exposure times before
+ * camera shake becomes apparent.</p>
+ * <p>Not all devices will support OIS; see
+ * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization} for
+ * available controls.</p>
+ *
+ * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
+ * @see CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION
* @see #LENS_OPTICAL_STABILIZATION_MODE_OFF
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@@ -1235,16 +1271,15 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
/**
- * <p>Mode of operation for the noise reduction
- * algorithm</p>
+ * <p>Mode of operation for the noise reduction algorithm.</p>
* <p>Noise filtering control. OFF means no noise reduction
* will be applied by the camera device.</p>
- * <p>This must be set to a valid mode in
+ * <p>This must be set to a valid mode from
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}.</p>
* <p>FAST/HIGH_QUALITY both mean camera device determined noise filtering
* will be applied. HIGH_QUALITY mode indicates that the camera device
* will use the highest-quality noise filtering algorithms,
- * even if it slows down capture rate. FAST means the camera device should not
+ * even if it slows down capture rate. FAST means the camera device will not
* slow down capture rate when applying noise filtering.</p>
*
* @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
@@ -1265,40 +1300,39 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.request.id", int.class);
/**
- * <p>(x, y, width, height).</p>
- * <p>A rectangle with the top-level corner of (x,y) and size
- * (width, height). The region of the sensor that is used for
- * output. Each stream must use this rectangle to produce its
- * output, cropping to a smaller region if necessary to
- * maintain the stream's aspect ratio.</p>
- * <p>HAL2.x uses only (x, y, width)</p>
- * <p>The crop region is applied after the RAW to other color space (e.g. YUV)
- * conversion. Since raw streams (e.g. RAW16) don't have the conversion stage,
- * it is not croppable. The crop region will be ignored by raw streams.</p>
+ * <p>The region of the sensor to read out for this capture.</p>
+ * <p>The crop region coordinate system is based off
+ * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, with <code>(0, 0)</code> being the
+ * top-left corner of the sensor active array.</p>
+ * <p>Output streams use this rectangle to produce their output,
+ * cropping to a smaller region if necessary to maintain the
+ * stream's aspect ratio, then scaling the sensor input to
+ * match the output's configured resolution.</p>
+ * <p>The crop region is applied after the RAW to other color
+ * space (e.g. YUV) conversion. Since raw streams
+ * (e.g. RAW16) don't have the conversion stage, they are not
+ * croppable. The crop region will be ignored by raw streams.</p>
* <p>For non-raw streams, any additional per-stream cropping will
* be done to maximize the final pixel area of the stream.</p>
* <p>For example, if the crop region is set to a 4:3 aspect
- * ratio, then 4:3 streams should use the exact crop
- * region. 16:9 streams should further crop vertically
+ * ratio, then 4:3 streams will use the exact crop
+ * region. 16:9 streams will further crop vertically
* (letterbox).</p>
* <p>Conversely, if the crop region is set to a 16:9, then 4:3
- * outputs should crop horizontally (pillarbox), and 16:9
- * streams should match exactly. These additional crops must
+ * outputs will crop horizontally (pillarbox), and 16:9
+ * streams will match exactly. These additional crops will
* be centered within the crop region.</p>
- * <p>The output streams must maintain square pixels at all
- * times, no matter what the relative aspect ratios of the
- * crop region and the stream are. Negative values for
- * corner are allowed for raw output if full pixel array is
- * larger than active pixel array. Width and height may be
- * rounded to nearest larger supportable width, especially
- * for raw output, where only a few fixed scales may be
- * possible. The width and height of the crop region cannot
- * be set to be smaller than floor( activeArraySize.width /
- * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} ) and floor(
- * activeArraySize.height /
- * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom}), respectively.</p>
+ * <p>The width and height of the crop region cannot
+ * be set to be smaller than
+ * <code>floor( activeArraySize.width / {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} )</code> and
+ * <code>floor( activeArraySize.height / {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} )</code>, respectively.</p>
+ * <p>The camera device may adjust the crop region to account
+ * for rounding and other hardware requirements; the final
+ * crop region used will be included in the output capture
+ * result.</p>
*
* @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -1391,12 +1425,20 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Long>("android.sensor.frameDuration", long.class);
/**
- * <p>Gain applied to image data. Must be
- * implemented through analog gain only if set to values
- * below 'maximum analog sensitivity'.</p>
- * <p>If the sensor can't apply this exact gain, it should lessen the
- * gain to the nearest possible value (rather than gain more).</p>
- * <p>ISO 12232:2006 REI method</p>
+ * <p>The amount of gain applied to sensor data
+ * before processing.</p>
+ * <p>The sensitivity is the standard ISO sensitivity value,
+ * as defined in ISO 12232:2006.</p>
+ * <p>The sensitivity must be within {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}, and
+ * if if it less than {@link CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY android.sensor.maxAnalogSensitivity}, the camera device
+ * is guaranteed to use only analog amplification for applying the gain.</p>
+ * <p>If the camera device cannot apply the exact sensitivity
+ * requested, it will reduce the gain to the nearest supported
+ * value. The final sensitivity used will be available in the
+ * output capture result.</p>
+ *
+ * @see CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
+ * @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
@@ -1421,7 +1463,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* <p>When enabled, the sensor sends a test pattern instead of
* doing a real exposure from the camera.</p>
* <p>When a test pattern is enabled, all manual sensor controls specified
- * by android.sensor.* should be ignored. All other controls should
+ * by android.sensor.* will be ignored. All other controls should
* work as normal.</p>
* <p>For example, if manual flash is enabled, flash firing should still
* occur (and that the test pattern remain unmodified, since the flash
@@ -1459,7 +1501,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* lens shading map data in android.statistics.lensShadingMap, with size specified
* by android.lens.info.shadingMapSize; the returned shading map data will be the one
* applied by the camera device for this capture request.</p>
- * <p>The shading map data may depend on the AE and AWB statistics, therefore the reliability
+ * <p>The shading map data may depend on the auto-exposure (AE) and AWB statistics, therefore the reliability
* of the map data may be affected by the AE and AWB algorithms. When AE and AWB are in
* AUTO modes({@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF and {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} <code>!=</code> OFF),
* to get best results, it is recommended that the applications wait for the AE and AWB to
@@ -1476,8 +1518,8 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
new Key<Integer>("android.shading.mode", int.class);
/**
- * <p>State of the face detector
- * unit</p>
+ * <p>Control for the face detector
+ * unit.</p>
* <p>Whether face detection is enabled, and whether it
* should output just the basic fields or the full set of
* fields. Value must be one of the
@@ -1494,7 +1536,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
/**
* <p>Operating mode for hotpixel map generation.</p>
* <p>If set to ON, a hotpixel map is returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.
- * If set to OFF, no hotpixel map should be returned.</p>
+ * If set to OFF, no hotpixel map will be returned.</p>
* <p>This must be set to a valid mode from {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
@@ -1507,7 +1549,7 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
* <p>Whether the camera device will output the lens
* shading map in output result metadata.</p>
* <p>When set to ON,
- * android.statistics.lensShadingMap must be provided in
+ * android.statistics.lensShadingMap will be provided in
* the output result metadata.</p>
* @see #STATISTICS_LENS_SHADING_MAP_MODE_OFF
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 7d07c920c9e6..3d17ed37aeb0 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -319,7 +319,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>The mode control selects how the image data is converted from the
* sensor's native color into linear sRGB color.</p>
- * <p>When auto-white balance is enabled with {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, this
+ * <p>When auto-white balance (AWB) is enabled with {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, this
* control is overridden by the AWB routine. When AWB is disabled, the
* application controls how the color mapping is performed.</p>
* <p>We define the expected processing pipeline below. For consistency
@@ -370,7 +370,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>A color transform matrix to use to transform
- * from sensor RGB color space to output linear sRGB color space</p>
+ * from sensor RGB color space to output linear sRGB color space.</p>
* <p>This matrix is either set by the camera device when the request
* {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
* directly by the application in the request when the
@@ -446,13 +446,17 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.aeAntibandingMode", int.class);
/**
- * <p>Adjustment to AE target image
- * brightness</p>
- * <p>For example, if EV step is 0.333, '6' will mean an
- * exposure compensation of +2 EV; -3 will mean an exposure
- * compensation of -1 EV. Note that this control will only be effective
- * if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF. This control will take effect even when
- * {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} <code>== true</code>.</p>
+ * <p>Adjustment to auto-exposure (AE) target image
+ * brightness.</p>
+ * <p>The adjustment is measured as a count of steps, with the
+ * step size defined by {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP android.control.aeCompensationStep} and the
+ * allowed range by {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE android.control.aeCompensationRange}.</p>
+ * <p>For example, if the exposure value (EV) step is 0.333, '6'
+ * will mean an exposure compensation of +2 EV; -3 will mean an
+ * exposure compensation of -1 EV. One EV represents a doubling
+ * of image brightness. Note that this control will only be
+ * effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF. This control
+ * will take effect even when {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} <code>== true</code>.</p>
* <p>In the event of exposure compensation value being changed, camera device
* may take several frames to reach the newly requested exposure target.
* During that time, {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} field will be in the SEARCHING
@@ -460,6 +464,8 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* change from SEARCHING to either CONVERGED, LOCKED (if AE lock is enabled), or
* FLASH_REQUIRED (if the scene is too dark for still capture).</p>
*
+ * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE
+ * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
* @see CaptureRequest#CONTROL_AE_LOCK
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureResult#CONTROL_AE_STATE
@@ -468,7 +474,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.aeExposureCompensation", int.class);
/**
- * <p>Whether AE is currently locked to its latest
+ * <p>Whether auto-exposure (AE) is currently locked to its latest
* calculated values.</p>
* <p>Note that even when AE is locked, the flash may be
* fired if the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is ON_AUTO_FLASH / ON_ALWAYS_FLASH /
@@ -557,9 +563,9 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Range over which fps can be adjusted to
- * maintain exposure</p>
- * <p>Only constrains AE algorithm, not manual control
- * of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
+ * maintain exposure.</p>
+ * <p>Only constrains auto-exposure (AE) algorithm, not
+ * manual control of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
*
* @see CaptureRequest#SENSOR_EXPOSURE_TIME
*/
@@ -573,9 +579,18 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* included at all in the request settings. When included and
* set to START, the camera device will trigger the autoexposure
* precapture metering sequence.</p>
- * <p>The effect of AE precapture trigger depends on the current
- * AE mode and state; see {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture
- * state transition details.</p>
+ * <p>The precapture sequence should triggered before starting a
+ * high-quality still capture for final metering decisions to
+ * be made, and for firing pre-capture flash pulses to estimate
+ * scene brightness and required final capture flash power, when
+ * the flash is enabled.</p>
+ * <p>Normally, this entry should be set to START for only a
+ * single request, and the application should wait until the
+ * sequence completes before starting a new one.</p>
+ * <p>The exact effect of auto-exposure (AE) precapture trigger
+ * depends on the current AE mode and state; see
+ * {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture state transition
+ * details.</p>
*
* @see CaptureResult#CONTROL_AE_STATE
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_IDLE
@@ -585,7 +600,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
/**
- * <p>Current state of AE algorithm</p>
+ * <p>Current state of the auto-exposure (AE) algorithm.</p>
* <p>Switching between or enabling AE modes ({@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode}) always
* resets the AE state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
* or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
@@ -783,8 +798,8 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.aeState", int.class);
/**
- * <p>Whether AF is currently enabled, and what
- * mode it is set to</p>
+ * <p>Whether auto-focus (AF) is currently enabled, and what
+ * mode it is set to.</p>
* <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus
* (i.e. <code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} &gt; 0</code>).</p>
* <p>If the lens is controlled by the camera device auto-focus algorithm,
@@ -837,7 +852,11 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* autofocus algorithm. If autofocus is disabled, this trigger has no effect.</p>
* <p>When set to CANCEL, the camera device will cancel any active trigger,
* and return to its initial AF state.</p>
- * <p>See {@link CaptureResult#CONTROL_AF_STATE android.control.afState} for what that means for each AF mode.</p>
+ * <p>Generally, applications should set this entry to START or CANCEL for only a
+ * single capture, and then return it to IDLE (or not set at all). Specifying
+ * START for multiple captures in a row means restarting the AF operation over
+ * and over again.</p>
+ * <p>See {@link CaptureResult#CONTROL_AF_STATE android.control.afState} for what the trigger means for each AF mode.</p>
*
* @see CaptureResult#CONTROL_AF_STATE
* @see #CONTROL_AF_TRIGGER_IDLE
@@ -848,7 +867,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.afTrigger", int.class);
/**
- * <p>Current state of AF algorithm.</p>
+ * <p>Current state of auto-focus (AF) algorithm.</p>
* <p>Switching between or enabling AF modes ({@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}) always
* resets the AF state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
* or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
@@ -1027,13 +1046,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <td align="center">PASSIVE_SCAN</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">FOCUSED_LOCKED</td>
- * <td align="center">Immediate trans. If focus is good, Lens now locked</td>
+ * <td align="center">Immediate transition, if focus is good. Lens now locked</td>
* </tr>
* <tr>
* <td align="center">PASSIVE_SCAN</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">NOT_FOCUSED_LOCKED</td>
- * <td align="center">Immediate trans. if focus is bad, Lens now locked</td>
+ * <td align="center">Immediate transition, if focus is bad. Lens now locked</td>
* </tr>
* <tr>
* <td align="center">PASSIVE_SCAN</td>
@@ -1057,13 +1076,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <td align="center">PASSIVE_FOCUSED</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">FOCUSED_LOCKED</td>
- * <td align="center">Immediate trans. Lens now locked</td>
+ * <td align="center">Immediate transition, lens now locked</td>
* </tr>
* <tr>
* <td align="center">PASSIVE_UNFOCUSED</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">NOT_FOCUSED_LOCKED</td>
- * <td align="center">Immediate trans. Lens now locked</td>
+ * <td align="center">Immediate transition, lens now locked</td>
* </tr>
* <tr>
* <td align="center">FOCUSED_LOCKED</td>
@@ -1130,13 +1149,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <td align="center">PASSIVE_SCAN</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">FOCUSED_LOCKED</td>
- * <td align="center">Eventual trans. once focus good, Lens now locked</td>
+ * <td align="center">Eventual transition once the focus is good. Lens now locked</td>
* </tr>
* <tr>
* <td align="center">PASSIVE_SCAN</td>
* <td align="center">AF_TRIGGER</td>
* <td align="center">NOT_FOCUSED_LOCKED</td>
- * <td align="center">Eventual trans. if cannot focus, Lens now locked</td>
+ * <td align="center">Eventual transition if cannot find focus. Lens now locked</td>
* </tr>
* <tr>
* <td align="center">PASSIVE_SCAN</td>
@@ -1245,31 +1264,37 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.afState", int.class);
/**
- * <p>Whether AWB is currently locked to its
+ * <p>Whether auto-white balance (AWB) is currently locked to its
* latest calculated values.</p>
- * <p>Note that AWB lock is only meaningful for AUTO
- * mode; in other modes, AWB is already fixed to a specific
- * setting.</p>
+ * <p>Note that AWB lock is only meaningful when
+ * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} is in the AUTO mode; in other modes,
+ * AWB is already fixed to a specific setting.</p>
+ *
+ * @see CaptureRequest#CONTROL_AWB_MODE
*/
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
/**
- * <p>Whether AWB is currently setting the color
+ * <p>Whether auto-white balance (AWB) is currently setting the color
* transform fields, and what its illumination target
* is.</p>
* <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is AUTO.</p>
- * <p>When set to the ON mode, the camera device's auto white balance
+ * <p>When set to the ON mode, the camera device's auto-white balance
* routine is enabled, overriding the application's selected
* {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
* {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
- * <p>When set to the OFF mode, the camera device's auto white balance
+ * <p>When set to the OFF mode, the camera device's auto-white balance
* routine is disabled. The application manually controls the white
* balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}
* and {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
- * <p>When set to any other modes, the camera device's auto white balance
- * routine is disabled. The camera device uses each particular illumination
- * target for white balance adjustment.</p>
+ * <p>When set to any other modes, the camera device's auto-white
+ * balance routine is disabled. The camera device uses each
+ * particular illumination target for white balance
+ * adjustment. The application's values for
+ * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform},
+ * {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
+ * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} are ignored.</p>
*
* @see CaptureRequest#COLOR_CORRECTION_GAINS
* @see CaptureRequest#COLOR_CORRECTION_MODE
@@ -1320,8 +1345,8 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* strategy.</p>
* <p>This control (except for MANUAL) is only effective if
* <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF</code> and any 3A routine is active.</p>
- * <p>ZERO_SHUTTER_LAG must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
- * contains ZSL. MANUAL must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+ * <p>ZERO_SHUTTER_LAG will be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+ * contains ZSL. MANUAL will be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
* contains MANUAL_SENSOR.</p>
*
* @see CaptureRequest#CONTROL_MODE
@@ -1338,7 +1363,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.control.captureIntent", int.class);
/**
- * <p>Current state of AWB algorithm</p>
+ * <p>Current state of auto-white balance (AWB) algorithm.</p>
* <p>Switching between or enabling AWB modes ({@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}) always
* resets the AWB state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
* or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
@@ -1526,7 +1551,9 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <p>This is the mode that that is active when
* <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code>. Aside from FACE_PRIORITY,
* these modes will disable {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode},
- * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} while in use.</p>
+ * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} while in use.
+ * The scene modes available for a given camera device are listed in
+ * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}.</p>
* <p>The interpretation and implementation of these scene modes is left
* to the implementor of the camera device. Their behavior will not be
* consistent across all devices, and any given device may only implement
@@ -1534,6 +1561,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_AF_MODE
+ * @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES
* @see CaptureRequest#CONTROL_AWB_MODE
* @see CaptureRequest#CONTROL_MODE
* @see #CONTROL_SCENE_MODE_DISABLED
@@ -1559,7 +1587,9 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Whether video stabilization is
- * active</p>
+ * active.</p>
+ * <p>Video stabilization automatically translates and scales images from the camera
+ * in order to stabilize motion between consecutive frames.</p>
* <p>If enabled, video stabilization can modify the
* {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} to keep the video stream
* stabilized</p>
@@ -1601,7 +1631,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <p>When set to OFF, the camera device will not fire flash for this capture.</p>
* <p>When set to SINGLE, the camera device will fire flash regardless of the camera
* device's auto-exposure routine's result. When used in still capture case, this
- * control should be used along with AE precapture metering sequence
+ * control should be used along with auto-exposure (AE) precapture metering sequence
* ({@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}), otherwise, the image may be incorrectly exposed.</p>
* <p>When set to TORCH, the flash will be on continuously. This mode can be used
* for use cases such as preview, auto-focus assist, still capture, or video recording.</p>
@@ -1690,21 +1720,21 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Compression quality of the final JPEG
- * image</p>
- * <p>85-95 is typical usage range</p>
+ * image.</p>
+ * <p>85-95 is typical usage range.</p>
*/
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
/**
* <p>Compression quality of JPEG
- * thumbnail</p>
+ * thumbnail.</p>
*/
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
/**
- * <p>Resolution of embedded JPEG thumbnail</p>
+ * <p>Resolution of embedded JPEG thumbnail.</p>
* <p>When set to (0, 0) value, the JPEG EXIF will not contain thumbnail,
* but the captured JPEG will still be a valid image.</p>
* <p>When a jpeg image capture is issued, the thumbnail size selected should have
@@ -1792,7 +1822,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Distance to plane of sharpest focus,
- * measured from frontmost surface of the lens</p>
+ * measured from frontmost surface of the lens.</p>
* <p>Should be zero for fixed-focus cameras</p>
*/
public static final Key<Float> LENS_FOCUS_DISTANCE =
@@ -1800,7 +1830,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>The range of scene distances that are in
- * sharp focus (depth of field)</p>
+ * sharp focus (depth of field).</p>
* <p>If variable focus not supported, can still report
* fixed depth of field range</p>
*/
@@ -1810,12 +1840,18 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Sets whether the camera device uses optical image stabilization (OIS)
* when capturing images.</p>
- * <p>OIS is used to compensate for motion blur due to small movements of
- * the camera during capture. Unlike digital image stabilization, OIS makes
- * use of mechanical elements to stabilize the camera sensor, and thus
- * allows for longer exposure times before camera shake becomes
- * apparent.</p>
- * <p>This is not expected to be supported on most devices.</p>
+ * <p>OIS is used to compensate for motion blur due to small
+ * movements of the camera during capture. Unlike digital image
+ * stabilization ({@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE android.control.videoStabilizationMode}), OIS
+ * makes use of mechanical elements to stabilize the camera
+ * sensor, and thus allows for longer exposure times before
+ * camera shake becomes apparent.</p>
+ * <p>Not all devices will support OIS; see
+ * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization} for
+ * available controls.</p>
+ *
+ * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
+ * @see CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION
* @see #LENS_OPTICAL_STABILIZATION_MODE_OFF
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@@ -1859,16 +1895,15 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.lens.state", int.class);
/**
- * <p>Mode of operation for the noise reduction
- * algorithm</p>
+ * <p>Mode of operation for the noise reduction algorithm.</p>
* <p>Noise filtering control. OFF means no noise reduction
* will be applied by the camera device.</p>
- * <p>This must be set to a valid mode in
+ * <p>This must be set to a valid mode from
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}.</p>
* <p>FAST/HIGH_QUALITY both mean camera device determined noise filtering
* will be applied. HIGH_QUALITY mode indicates that the camera device
* will use the highest-quality noise filtering algorithms,
- * even if it slows down capture rate. FAST means the camera device should not
+ * even if it slows down capture rate. FAST means the camera device will not
* slow down capture rate when applying noise filtering.</p>
*
* @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
@@ -1934,40 +1969,39 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Byte>("android.request.pipelineDepth", byte.class);
/**
- * <p>(x, y, width, height).</p>
- * <p>A rectangle with the top-level corner of (x,y) and size
- * (width, height). The region of the sensor that is used for
- * output. Each stream must use this rectangle to produce its
- * output, cropping to a smaller region if necessary to
- * maintain the stream's aspect ratio.</p>
- * <p>HAL2.x uses only (x, y, width)</p>
- * <p>The crop region is applied after the RAW to other color space (e.g. YUV)
- * conversion. Since raw streams (e.g. RAW16) don't have the conversion stage,
- * it is not croppable. The crop region will be ignored by raw streams.</p>
+ * <p>The region of the sensor to read out for this capture.</p>
+ * <p>The crop region coordinate system is based off
+ * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, with <code>(0, 0)</code> being the
+ * top-left corner of the sensor active array.</p>
+ * <p>Output streams use this rectangle to produce their output,
+ * cropping to a smaller region if necessary to maintain the
+ * stream's aspect ratio, then scaling the sensor input to
+ * match the output's configured resolution.</p>
+ * <p>The crop region is applied after the RAW to other color
+ * space (e.g. YUV) conversion. Since raw streams
+ * (e.g. RAW16) don't have the conversion stage, they are not
+ * croppable. The crop region will be ignored by raw streams.</p>
* <p>For non-raw streams, any additional per-stream cropping will
* be done to maximize the final pixel area of the stream.</p>
* <p>For example, if the crop region is set to a 4:3 aspect
- * ratio, then 4:3 streams should use the exact crop
- * region. 16:9 streams should further crop vertically
+ * ratio, then 4:3 streams will use the exact crop
+ * region. 16:9 streams will further crop vertically
* (letterbox).</p>
* <p>Conversely, if the crop region is set to a 16:9, then 4:3
- * outputs should crop horizontally (pillarbox), and 16:9
- * streams should match exactly. These additional crops must
+ * outputs will crop horizontally (pillarbox), and 16:9
+ * streams will match exactly. These additional crops will
* be centered within the crop region.</p>
- * <p>The output streams must maintain square pixels at all
- * times, no matter what the relative aspect ratios of the
- * crop region and the stream are. Negative values for
- * corner are allowed for raw output if full pixel array is
- * larger than active pixel array. Width and height may be
- * rounded to nearest larger supportable width, especially
- * for raw output, where only a few fixed scales may be
- * possible. The width and height of the crop region cannot
- * be set to be smaller than floor( activeArraySize.width /
- * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} ) and floor(
- * activeArraySize.height /
- * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom}), respectively.</p>
+ * <p>The width and height of the crop region cannot
+ * be set to be smaller than
+ * <code>floor( activeArraySize.width / {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} )</code> and
+ * <code>floor( activeArraySize.height / {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} )</code>, respectively.</p>
+ * <p>The camera device may adjust the crop region to account
+ * for rounding and other hardware requirements; the final
+ * crop region used will be included in the output capture
+ * result.</p>
*
* @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -2060,21 +2094,35 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Long>("android.sensor.frameDuration", long.class);
/**
- * <p>Gain applied to image data. Must be
- * implemented through analog gain only if set to values
- * below 'maximum analog sensitivity'.</p>
- * <p>If the sensor can't apply this exact gain, it should lessen the
- * gain to the nearest possible value (rather than gain more).</p>
- * <p>ISO 12232:2006 REI method</p>
+ * <p>The amount of gain applied to sensor data
+ * before processing.</p>
+ * <p>The sensitivity is the standard ISO sensitivity value,
+ * as defined in ISO 12232:2006.</p>
+ * <p>The sensitivity must be within {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}, and
+ * if if it less than {@link CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY android.sensor.maxAnalogSensitivity}, the camera device
+ * is guaranteed to use only analog amplification for applying the gain.</p>
+ * <p>If the camera device cannot apply the exact sensitivity
+ * requested, it will reduce the gain to the nearest supported
+ * value. The final sensitivity used will be available in the
+ * output capture result.</p>
+ *
+ * @see CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
+ * @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
/**
* <p>Time at start of exposure of first
- * row</p>
- * <p>Monotonic, should be synced to other timestamps in
- * system</p>
+ * row of the image sensor, in nanoseconds.</p>
+ * <p>The timestamps are also included in all image
+ * buffers produced for the same capture, and will be identical
+ * on all the outputs. The timestamps measure time since an
+ * unspecified starting point, and are monotonically
+ * increasing.</p>
+ * <p>They can be compared with the timestamps for other captures
+ * from the same camera device, but are not guaranteed to be
+ * comparable to any other time source.</p>
*/
public static final Key<Long> SENSOR_TIMESTAMP =
new Key<Long>("android.sensor.timestamp", long.class);
@@ -2150,7 +2198,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <p>When enabled, the sensor sends a test pattern instead of
* doing a real exposure from the camera.</p>
* <p>When a test pattern is enabled, all manual sensor controls specified
- * by android.sensor.* should be ignored. All other controls should
+ * by android.sensor.* will be ignored. All other controls should
* work as normal.</p>
* <p>For example, if manual flash is enabled, flash firing should still
* occur (and that the test pattern remain unmodified, since the flash
@@ -2188,7 +2236,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* lens shading map data in android.statistics.lensShadingMap, with size specified
* by android.lens.info.shadingMapSize; the returned shading map data will be the one
* applied by the camera device for this capture request.</p>
- * <p>The shading map data may depend on the AE and AWB statistics, therefore the reliability
+ * <p>The shading map data may depend on the auto-exposure (AE) and AWB statistics, therefore the reliability
* of the map data may be affected by the AE and AWB algorithms. When AE and AWB are in
* AUTO modes({@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} <code>!=</code> OFF and {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} <code>!=</code> OFF),
* to get best results, it is recommended that the applications wait for the AE and AWB to
@@ -2205,8 +2253,8 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.shading.mode", int.class);
/**
- * <p>State of the face detector
- * unit</p>
+ * <p>Control for the face detector
+ * unit.</p>
* <p>Whether face detection is enabled, and whether it
* should output just the basic fields or the full set of
* fields. Value must be one of the
@@ -2221,9 +2269,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
new Key<Integer>("android.statistics.faceDetectMode", int.class);
/**
- * <p>List of unique IDs for detected
- * faces</p>
- * <p>Only available if faceDetectMode == FULL</p>
+ * <p>List of unique IDs for detected faces.</p>
+ * <p>Each detected face is given a unique ID that is valid for as long as the face is visible
+ * to the camera device. A face that leaves the field of view and later returns may be
+ * assigned a new ID.</p>
+ * <p>Only available if {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} == FULL</p>
+ *
+ * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
public static final Key<int[]> STATISTICS_FACE_IDS =
@@ -2231,8 +2283,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>List of landmarks for detected
- * faces</p>
- * <p>Only available if faceDetectMode == FULL</p>
+ * faces.</p>
+ * <p>The coordinate system is that of {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, with
+ * <code>(0, 0)</code> being the top-left pixel of the active array.</p>
+ * <p>Only available if {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} == FULL</p>
+ *
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+ * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
public static final Key<int[]> STATISTICS_FACE_LANDMARKS =
@@ -2240,8 +2297,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>List of the bounding rectangles for detected
- * faces</p>
- * <p>Only available if faceDetectMode != OFF</p>
+ * faces.</p>
+ * <p>The coordinate system is that of {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, with
+ * <code>(0, 0)</code> being the top-left pixel of the active array.</p>
+ * <p>Only available if {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} != OFF</p>
+ *
+ * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+ * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
public static final Key<android.graphics.Rect[]> STATISTICS_FACE_RECTANGLES =
@@ -2250,8 +2312,9 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>List of the face confidence scores for
* detected faces</p>
- * <p>Only available if faceDetectMode != OFF. The value should be
- * meaningful (for example, setting 100 at all times is illegal).</p>
+ * <p>Only available if {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} != OFF.</p>
+ *
+ * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
* @hide
*/
public static final Key<byte[]> STATISTICS_FACE_SCORES =
@@ -2370,7 +2433,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* applied to that frame.</p>
* <p>The 4 channel gains are defined in Bayer domain,
* see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.</p>
- * <p>This value should always be calculated by the AWB block,
+ * <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
*
@@ -2396,7 +2459,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* that frame.</p>
* <p>These estimates must be provided for all frames, even if
* capture settings and color transforms are set by the application.</p>
- * <p>This value should always be calculated by the AWB block,
+ * <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
* <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
* @deprecated
@@ -2415,12 +2478,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* The camera device uses this entry to tell the application what the scene
* illuminant frequency is.</p>
* <p>When manual exposure control is enabled
- * (<code>{@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} == OFF</code> or <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == OFF</code>),
- * the {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode} doesn't do the antibanding, and the
- * application can ensure it selects exposure times that do not cause banding
- * issues by looking into this metadata field. See {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode}
- * for more details.</p>
- * <p>Report NONE if there doesn't appear to be flickering illumination.</p>
+ * (<code>{@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} == OFF</code> or <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} ==
+ * OFF</code>), the {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode} doesn't perform
+ * antibanding, and the application can ensure it selects
+ * exposure times that do not cause banding issues by looking
+ * into this metadata field. See
+ * {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode} for more details.</p>
+ * <p>Reports NONE if there doesn't appear to be flickering illumination.</p>
*
* @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
* @see CaptureRequest#CONTROL_AE_MODE
@@ -2435,7 +2499,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
/**
* <p>Operating mode for hotpixel map generation.</p>
* <p>If set to ON, a hotpixel map is returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.
- * If set to OFF, no hotpixel map should be returned.</p>
+ * If set to OFF, no hotpixel map will be returned.</p>
* <p>This must be set to a valid mode from {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
@@ -2463,7 +2527,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
* <p>Whether the camera device will output the lens
* shading map in output result metadata.</p>
* <p>When set to ON,
- * android.statistics.lensShadingMap must be provided in
+ * android.statistics.lensShadingMap will be provided in
* the output result metadata.</p>
* @see #STATISTICS_LENS_SHADING_MAP_MODE_OFF
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
index f74fbaa7ced4..f829f5eb5d07 100644
--- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
@@ -118,9 +118,11 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
if (configureSuccess) {
mStateListener.onConfigured(this);
+ if (VERBOSE) Log.v(TAG, "ctor - Created session successfully");
} else {
mStateListener.onConfigureFailed(this);
mClosed = true; // do not fire any other callbacks, do not allow any other work
+ Log.e(TAG, "Failed to create capture session; configuration failed");
}
}
@@ -132,6 +134,10 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public synchronized int capture(CaptureRequest request, CaptureListener listener,
Handler handler) throws CameraAccessException {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ }
+
checkNotClosed();
checkLegalToCapture();
@@ -139,7 +145,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
if (VERBOSE) {
Log.v(TAG, "capture - request " + request + ", listener " + listener + " handler" +
- "" + handler);
+ " " + handler);
}
return addPendingSequence(mDeviceImpl.capture(request,
@@ -149,6 +155,12 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public synchronized int captureBurst(List<CaptureRequest> requests, CaptureListener listener,
Handler handler) throws CameraAccessException {
+ if (requests == null) {
+ throw new IllegalArgumentException("requests must not be null");
+ } else if (requests.isEmpty()) {
+ throw new IllegalArgumentException("requests must have at least one element");
+ }
+
checkNotClosed();
checkLegalToCapture();
@@ -167,11 +179,20 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public synchronized int setRepeatingRequest(CaptureRequest request, CaptureListener listener,
Handler handler) throws CameraAccessException {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ }
+
checkNotClosed();
checkLegalToCapture();
handler = checkHandler(handler);
+ if (VERBOSE) {
+ Log.v(TAG, "setRepeatingRequest - request " + request + ", listener " + listener +
+ " handler" + " " + handler);
+ }
+
return addPendingSequence(mDeviceImpl.setRepeatingRequest(request,
createCaptureListenerProxy(handler, listener), mDeviceHandler));
}
@@ -179,6 +200,12 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public synchronized int setRepeatingBurst(List<CaptureRequest> requests,
CaptureListener listener, Handler handler) throws CameraAccessException {
+ if (requests == null) {
+ throw new IllegalArgumentException("requests must not be null");
+ } else if (requests.isEmpty()) {
+ throw new IllegalArgumentException("requests must have at least one element");
+ }
+
checkNotClosed();
checkLegalToCapture();
@@ -249,8 +276,11 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
* but this would introduce nondeterministic behavior.
*/
+ if (VERBOSE) Log.v(TAG, "replaceSessionClose");
+
// #close was already called explicitly, keep going the slow route
if (mClosed) {
+ if (VERBOSE) Log.v(TAG, "replaceSessionClose - close was already called");
return;
}
@@ -260,21 +290,39 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public synchronized void close() {
+
if (mClosed) {
+ if (VERBOSE) Log.v(TAG, "close - reentering");
return;
}
+ if (VERBOSE) Log.v(TAG, "close - first time");
+
mClosed = true;
/*
* Flush out any repeating request. Since camera is closed, no new requests
* can be queued, and eventually the entire request queue will be drained.
*
- * Once this is done, wait for camera to idle, then unconfigure the camera.
- * Once that's done, fire #onClosed.
+ * If the camera device was already closed, short circuit and do nothing; since
+ * no more internal device callbacks will fire anyway.
+ *
+ * Otherwise, once stopRepeating is done, wait for camera to idle, then unconfigure the
+ * camera. Once that's done, fire #onClosed.
*/
try {
mDeviceImpl.stopRepeating();
+ } catch (IllegalStateException e) {
+ // OK: Camera device may already be closed, nothing else to do
+ Log.w(TAG, "The camera device was already closed: ", e);
+
+ // TODO: Fire onClosed anytime we get the device onClosed or the ISE?
+ // or just suppress the ISE only and rely onClosed.
+ // Also skip any of the draining work if this is already closed.
+
+ // Short-circuit; queue listener immediately and return
+ mStateListener.onClosed(this);
+ return;
} catch (CameraAccessException e) {
// OK: close does not throw checked exceptions.
Log.e(TAG, "Exception while stopping repeating: ", e);
@@ -446,7 +494,12 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession {
@Override
public void onUnconfigured(CameraDevice camera) {
- mUnconfigureDrainer.taskFinished();
+ synchronized (session) {
+ // Ignore #onUnconfigured before #close is called
+ if (mClosed) {
+ mUnconfigureDrainer.taskFinished();
+ }
+ }
}
};
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 97950827b688..d9f3af4f0151 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -101,11 +101,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onOpened(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onOpened(CameraDeviceImpl.this);
}
+ mDeviceListener.onOpened(CameraDeviceImpl.this);
}
}
};
@@ -114,11 +114,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onUnconfigured(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onUnconfigured(CameraDeviceImpl.this);
}
+ mDeviceListener.onUnconfigured(CameraDeviceImpl.this);
}
}
};
@@ -127,11 +127,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onActive(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onActive(CameraDeviceImpl.this);
}
+ mDeviceListener.onActive(CameraDeviceImpl.this);
}
}
};
@@ -140,11 +140,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onBusy(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onBusy(CameraDeviceImpl.this);
}
+ mDeviceListener.onBusy(CameraDeviceImpl.this);
}
}
};
@@ -152,11 +152,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
private final Runnable mCallOnClosed = new Runnable() {
@Override
public void run() {
- mDeviceListener.onClosed(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onClosed(CameraDeviceImpl.this);
}
+ mDeviceListener.onClosed(CameraDeviceImpl.this);
}
};
@@ -164,11 +164,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onIdle(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onIdle(CameraDeviceImpl.this);
}
+ mDeviceListener.onIdle(CameraDeviceImpl.this);
}
}
};
@@ -177,11 +177,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
@Override
public void run() {
if (!CameraDeviceImpl.this.isClosed()) {
- mDeviceListener.onDisconnected(CameraDeviceImpl.this);
StateListener sessionListener = mSessionStateListener;
if (sessionListener != null) {
sessionListener.onDisconnected(CameraDeviceImpl.this);
}
+ mDeviceListener.onDisconnected(CameraDeviceImpl.this);
}
}
};
@@ -257,6 +257,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
synchronized (mLock) {
mInError = true;
mDeviceHandler.post(new Runnable() {
+ @Override
public void run() {
if (isError) {
mDeviceListener.onError(CameraDeviceImpl.this, code);
@@ -360,6 +361,9 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
} catch (CameraAccessException e) {
configureSuccess = false;
pendingException = e;
+ if (DEBUG) {
+ Log.v(TAG, "createCaptureSession - failed with exception ", e);
+ }
}
// Fire onConfigured if configureOutputs succeeded, fire onConfigureFailed otherwise.
diff --git a/core/java/android/hardware/camera2/package.html b/core/java/android/hardware/camera2/package.html
index 9f6c2a9b618c..ef0d7bd26767 100644
--- a/core/java/android/hardware/camera2/package.html
+++ b/core/java/android/hardware/camera2/package.html
@@ -34,49 +34,71 @@ framerate on most Android devices.</p>
CameraDevices} provide a set of static property information that
describes the hardware device and the available settings and output
parameters for the device. This information is provided through the
-{@link android.hardware.camera2.CameraCharacteristics} object.</p>
+{@link android.hardware.camera2.CameraCharacteristics} object, and is
+available through {@link
+android.hardware.camera2.CameraManager#getCameraCharacteristics}</p>
<p>To capture or stream images from a camera device, the application
-must first configure a set of output Surfaces for use with the camera
-device, with {@link
-android.hardware.camera2.CameraDevice#configureOutputs}. Each
-Surface has to be pre-configured with an appropriate size and format
-(if applicable) to match the sizes and formats available from the
-camera device. A target Surface can be obtained from a variety of
-classes, including {@link android.view.SurfaceView}, {@link
-android.graphics.SurfaceTexture} via {@link
-android.view.Surface#Surface(SurfaceTexture), {@link
-android.media.MediaCodec}, and {@link android.media.ImageReader}.
+must first create a {@link
+android.hardware.camera2.CameraCaptureSession camera capture session}
+with a set of output Surfaces for use with the camera device, with
+{@link
+android.hardware.camera2.CameraDevice#createCaptureSession}. Each
+Surface has to be pre-configured with an {@link
+android.hardware.camera2.params.StreamConfigurationMap appropriate
+size and format} (if applicable) to match the sizes and formats
+available from the camera device. A target Surface can be obtained
+from a variety of classes, including {@link android.view.SurfaceView},
+{@link android.graphics.SurfaceTexture} via
+{@link android.view.Surface#Surface(SurfaceTexture)},
+{@link android.media.MediaCodec}, {@link android.media.MediaRecorder},
+{@link android.renderscript.Allocation}, and {@link android.media.ImageReader}.
</p>
+<p>Generally, camera preview images are sent to {@link
+android.view.SurfaceView} or {@link android.view.TextureView} (via its
+{@link android.graphics.SurfaceTexture}). Capture of JPEG images or
+RAW buffers for {@link android.hardware.camera2.DngCreator} can be done
+with {@link android.media.ImageReader} with the
+{android.graphics.ImageFormat#JPEG} and
+{android.graphics.ImageFormat#RAW_SENSOR} formats. Application-driven
+processing of camera data in RenderScript, OpenGL ES, or directly in
+managed or native code is best done through {@link
+android.renderscript.Allocation} with a YUV {@link
+android.renderscript.Type}, {@link android.graphics.SurfaceTexture},
+and {@link android.media.ImageReader} with a
+{android.graphics.ImageFormat#YUV_420_888} format, respectively.</p>
+
<p>The application then needs to construct a {@link
android.hardware.camera2.CaptureRequest}, which defines all the
capture parameters needed by a camera device to capture a single
image. The request also lists which of the configured output Surfaces
should be used as targets for this capture. The CameraDevice has a
{@link android.hardware.camera2.CameraDevice#createCaptureRequest
-convenience factory method} for creating a request for a given use
-case which is optimized for the Android device the application is
-running on.</p>
+factory method} for creating a {@link
+android.hardware.camera2.CaptureRequest.Builder request builder} for a
+given use case, which is optimized for the Android device the
+application is running on.</p>
-<p>Once the request has been set up, it can be handed to the
-CameraDevice either for a one-shot {@link
-android.hardware.camera2.CameraDevice#capture} or for an endlessly
-{@link android.hardware.camera2.CameraDevice#setRepeatingRequest
-repeating} use. Both methods also accept a list of requests to use as
-a burst capture / repeating burst. Repeating requests have a lower
-priority than captures, so a request submitted
+<p>Once the request has been set up, it can be handed to the active
+capture session either for a one-shot {@link
+android.hardware.camera2.CameraCaptureSession#capture capture} or for
+an endlessly {@link
+android.hardware.camera2.CameraCaptureSession#setRepeatingRequest
+repeating} use. Both methods also have a variant that accepts a list
+of requests to use as a burst capture / repeating burst. Repeating
+requests have a lower priority than captures, so a request submitted
through <code>capture()</code> while there's a repeating request
-configured will be captured as soon as the current repeat (burst)
-capture completes.</p>
+configured will be captured before any new instances of the currently
+repeating (burst) capture will begin capture.</p>
<p>After processing a request, the camera device will produce a {@link
-android.hardware.camera2.CaptureResult} object, which contains
+android.hardware.camera2.TotalCaptureResult} object, which contains
information about the state of the camera device at time of capture,
and the final settings used. These may vary somewhat from the request,
if rounding or resolving contradictory parameters was necessary. The
camera device will also send a frame of image data into each of the
-output streams included in the request. These are produced
+output {@code Surfaces} included in the request. These are produced
asynchronously relative to the output CaptureResult, sometimes
substantially later.</p>
diff --git a/core/java/android/hardware/camera2/params/StreamConfiguration.java b/core/java/android/hardware/camera2/params/StreamConfiguration.java
index 1c6b6e92db60..a6fc10fdcc61 100644
--- a/core/java/android/hardware/camera2/params/StreamConfiguration.java
+++ b/core/java/android/hardware/camera2/params/StreamConfiguration.java
@@ -28,8 +28,9 @@ import android.util.Size;
/**
* Immutable class to store the available stream
- * {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS configurations} to be used
- * when configuring streams with {@link CameraDevice#configureOutputs}.
+ * {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS configurations} to set up
+ * {@link android.view.Surface Surfaces} for creating a {@link CameraCaptureSession capture session}
+ * with {@link CameraDevice#createCaptureSession}.
* <!-- TODO: link to input stream configuration -->
*
* <p>This is the authoritative list for all input/output formats (and sizes respectively
@@ -124,7 +125,7 @@ public final class StreamConfiguration {
*
* @return {@code true} if output configuration, {@code false} otherwise
*
- * @see CameraDevice#configureOutputs
+ * @see CameraDevice#createCaptureSession
*/
public boolean isOutput() {
return !mInput;
diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
index 4cd6d151983c..30364258fe94 100644
--- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
+++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
@@ -34,8 +34,10 @@ import static com.android.internal.util.Preconditions.*;
/**
* Immutable class to store the available stream
- * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP configurations} to be used
- * when configuring streams with {@link CameraDevice#configureOutputs}.
+ * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP configurations} to set up
+ * {@link android.view.Surface Surfaces} for creating a
+ * {@link android.hardware.camera2.CameraCaptureSession capture session} with
+ * {@link android.hardware.camera2.CameraDevice#createCaptureSession}.
* <!-- TODO: link to input stream configuration -->
*
* <p>This is the authoritative list for all <!-- input/ -->output formats (and sizes respectively
@@ -56,7 +58,7 @@ import static com.android.internal.util.Preconditions.*;
* }</code></pre>
*
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
- * @see CameraDevice#configureOutputs
+ * @see CameraDevice#createCaptureSession
*/
public final class StreamConfigurationMap {
@@ -155,8 +157,8 @@ public final class StreamConfigurationMap {
}
/**
- * Determine whether or not output streams can be
- * {@link CameraDevice#configureOutputs configured} with a particular user-defined format.
+ * Determine whether or not output surfaces with a particular user-defined format can be passed
+ * {@link CameraDevice#createCaptureSession createCaptureSession}.
*
* <p>This method determines that the output {@code format} is supported by the camera device;
* each output {@code surface} target may or may not itself support that {@code format}.
@@ -168,7 +170,7 @@ public final class StreamConfigurationMap {
* @param format an image format from either {@link ImageFormat} or {@link PixelFormat}
* @return
* {@code true} iff using a {@code surface} with this {@code format} will be
- * supported with {@link CameraDevice#configureOutputs}
+ * supported with {@link CameraDevice#createCaptureSession}
*
* @throws IllegalArgumentException
* if the image format was not a defined named constant
@@ -176,7 +178,7 @@ public final class StreamConfigurationMap {
*
* @see ImageFormat
* @see PixelFormat
- * @see CameraDevice#configureOutputs
+ * @see CameraDevice#createCaptureSession
*/
public boolean isOutputSupportedFor(int format) {
checkArgumentFormat(format);
@@ -210,7 +212,7 @@ public final class StreamConfigurationMap {
*
* <p>Generally speaking this means that creating a {@link Surface} from that class <i>may</i>
* provide a producer endpoint that is suitable to be used with
- * {@link CameraDevice#configureOutputs}.</p>
+ * {@link CameraDevice#createCaptureSession}.</p>
*
* <p>Since not all of the above classes support output of all format and size combinations,
* the particular combination should be queried with {@link #isOutputSupportedFor(Surface)}.</p>
@@ -220,7 +222,7 @@ public final class StreamConfigurationMap {
*
* @throws NullPointerException if {@code klass} was {@code null}
*
- * @see CameraDevice#configureOutputs
+ * @see CameraDevice#createCaptureSession
* @see #isOutputSupportedFor(Surface)
*/
public static <T> boolean isOutputSupportedFor(Class<T> klass) {
@@ -244,8 +246,8 @@ public final class StreamConfigurationMap {
}
/**
- * Determine whether or not the {@code surface} in its current state is suitable to be
- * {@link CameraDevice#configureOutputs configured} as an output.
+ * Determine whether or not the {@code surface} in its current state is suitable to be included
+ * in a {@link CameraDevice#createCaptureSession capture session} as an output.
*
* <p>Not all surfaces are usable with the {@link CameraDevice}, and not all configurations
* of that {@code surface} are compatible. Some classes that provide the {@code surface} are
@@ -269,7 +271,7 @@ public final class StreamConfigurationMap {
*
* @throws NullPointerException if {@code surface} was {@code null}
*
- * @see CameraDevice#configureOutputs
+ * @see CameraDevice#createCaptureSession
* @see #isOutputSupportedFor(Class)
*/
public boolean isOutputSupportedFor(Surface surface) {
diff --git a/core/java/android/hardware/camera2/params/TonemapCurve.java b/core/java/android/hardware/camera2/params/TonemapCurve.java
index 0fcffac060d6..481d67a3880a 100644
--- a/core/java/android/hardware/camera2/params/TonemapCurve.java
+++ b/core/java/android/hardware/camera2/params/TonemapCurve.java
@@ -78,7 +78,7 @@ public final class TonemapCurve {
/**
* Create a new immutable TonemapCurve instance.
*
- * <p>Values are stored as a contiguous {@code (Pin, Pout}) point.</p>
+ * <p>Values are stored as a contiguous array of {@code (Pin, Pout)} points.</p>
*
* <p>All parameters may have independent length but should have at most
* {@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS} * {@value #POINT_SIZE} elements.</p>
@@ -88,15 +88,16 @@ public final class TonemapCurve {
*
* <p>This constructor copies the array contents and does not retain ownership of the array.</p>
*
- * @param elements An array of elements whose length is {@code CHANNEL_COUNT * rows * columns}
+ * @param red An array of elements whose length is divisible by {@value #POINT_SIZE}
+ * @param green An array of elements whose length is divisible by {@value #POINT_SIZE}
+ * @param blue An array of elements whose length is divisible by {@value #POINT_SIZE}
*
* @throws IllegalArgumentException
- * if the {@code elements} array length is invalid,
- * if any of the subelems are not finite
+ * if any of input array length is invalid,
+ * or if any of the elements in the array are not in the range of
+ * [{@value #LEVEL_BLACK}, {@value #LEVEL_WHITE}]
* @throws NullPointerException
- * if any of the parameters is {@code null}
- *
- * @hide
+ * if any of the parameters are {@code null}
*/
public TonemapCurve(float[] red, float[] green, float[] blue) {
// TODO: maxCurvePoints check?
diff --git a/core/java/android/hardware/camera2/utils/TaskDrainer.java b/core/java/android/hardware/camera2/utils/TaskDrainer.java
index 3cba9a1cd100..dc09f62e20ef 100644
--- a/core/java/android/hardware/camera2/utils/TaskDrainer.java
+++ b/core/java/android/hardware/camera2/utils/TaskDrainer.java
@@ -52,7 +52,7 @@ public class TaskDrainer<T> {
}
private static final String TAG = "TaskDrainer";
- private static final boolean VERBOSE = false;
+ private final boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE);
private final Handler mHandler;
private final DrainListener mListener;
diff --git a/core/java/android/hardware/hdmi/HdmiCec.java b/core/java/android/hardware/hdmi/HdmiCec.java
index 723eda1fd4a6..8ad94632fbd7 100644
--- a/core/java/android/hardware/hdmi/HdmiCec.java
+++ b/core/java/android/hardware/hdmi/HdmiCec.java
@@ -16,9 +16,14 @@
package android.hardware.hdmi;
+import android.annotation.SystemApi;
+
/**
* Defines constants and utility methods related to HDMI-CEC protocol.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiCec {
/** TV device type. */
diff --git a/core/java/android/hardware/hdmi/HdmiCecClient.java b/core/java/android/hardware/hdmi/HdmiCecClient.java
deleted file mode 100644
index dcb362457e83..000000000000
--- a/core/java/android/hardware/hdmi/HdmiCecClient.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.hdmi;
-
-import android.os.IBinder;
-import android.os.RemoteException;
-
-import android.util.Log;
-
-/**
- * HdmiCecClient is used to control HDMI-CEC logical device instance in the system.
- * It is connected to actual hardware part via HdmiCecService. It provides with methods
- * to send CEC messages to other device on the bus, and listener that allows to receive
- * incoming messages to the device.
- */
-public final class HdmiCecClient {
- private static final String TAG = "HdmiCecClient";
-
- private final IHdmiCecService mService;
- private final IBinder mBinder;
-
- /**
- * Listener used by the client to get the incoming messages.
- */
- public static abstract class Listener {
- /**
- * Called when CEC message arrives. Override this method to receive the incoming
- * CEC messages from other device on the bus.
- *
- * @param message {@link HdmiCecMessage} object
- */
- public void onMessageReceived(HdmiCecMessage message) { }
-
- /**
- * Called when hotplug event occurs. Override this method to receive the events.
- *
- * @param connected true if the cable is connected; otherwise false.
- */
- public void onCableStatusChanged(boolean connected) { }
- }
-
- // Private constructor.
- private HdmiCecClient(IHdmiCecService service, IBinder b) {
- mService = service;
- mBinder = b;
- }
-
- // Factory method for HdmiCecClient.
- // Declared package-private. Accessed by HdmiCecManager only.
- static HdmiCecClient create(IHdmiCecService service, IBinder b) {
- return new HdmiCecClient(service, b);
- }
-
- /**
- * Send &lt;Active Source&gt; message.
- */
- public void sendActiveSource() {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- }
-
- /**
- * Send &lt;Inactive Source&gt; message.
- */
- public void sendInactiveSource() {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- }
-
- /**
- * Send &lt;Text View On&gt; message.
- */
- public void sendTextViewOn() {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- }
-
- /**
- * Send &lt;Image View On&gt; message.
- */
- public void sendImageViewOn() {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- }
-
- /**
- * Send &lt;Give Device Power Status&gt; message.
- *
- * @param address logical address of the device to send the message to, such as
- * {@link HdmiCec#ADDR_TV}.
- */
- public void sendGiveDevicePowerStatus(int address) {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- }
-
- /**
- * Returns true if the TV or attached display is powered on.
- * <p>
- * The result of this method is only meaningful on playback devices (where the device
- * type is {@link HdmiCec#DEVICE_PLAYBACK}).
- * </p>
- *
- * @return true if TV is on; otherwise false.
- */
- public boolean isTvOn() {
- Log.w(TAG, "In transition to HdmiControlManager. Will not work.");
- return true;
- }
-}
diff --git a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
index 9698445b06ba..fbfcca076df7 100644
--- a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
@@ -16,6 +16,7 @@
package android.hardware.hdmi;
+import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -23,7 +24,10 @@ import android.os.Parcelable;
* A class to encapsulate device information for HDMI-CEC. This container
* include basic information such as logical address, physical address and
* device type, and additional information like vendor id and osd name.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiCecDeviceInfo implements Parcelable {
// Logical address, phsical address, device type, vendor id and display name
// are immutable value.
diff --git a/core/java/android/hardware/hdmi/HdmiCecManager.java b/core/java/android/hardware/hdmi/HdmiCecManager.java
deleted file mode 100644
index 03c46d881465..000000000000
--- a/core/java/android/hardware/hdmi/HdmiCecManager.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.hdmi;
-
-import android.os.IBinder;
-import android.os.RemoteException;
-
-/**
- * The HdmiCecManager class is used to provide an HdmiCecClient instance,
- * get various information on HDMI ports configuration. It is connected to actual hardware
- * via HdmiCecService.
- */
-public final class HdmiCecManager {
- private final IHdmiCecService mService;
-
- /**
- * @hide - hide this constructor because it has a parameter of type IHdmiCecService,
- * which is a system private class. The right way to create an instance of this class
- * is using the factory Context.getSystemService.
- */
- public HdmiCecManager(IHdmiCecService service) {
- mService = service;
- }
-
- /**
- * Provide the HdmiCecClient instance of the given type. It also registers the listener
- * for client to get the events coming to the device.
- *
- * @param type type of the HDMI-CEC logical device
- * @param listener listener to be called
- * @return {@link HdmiCecClient} instance. {@code null} on failure.
- */
- public HdmiCecClient getClient(int type, HdmiCecClient.Listener listener) {
- return HdmiCecClient.create(mService, null);
- }
-
- private IHdmiCecListener getListenerWrapper(final HdmiCecClient.Listener listener) {
- // TODO: The message/events are not yet forwarded to client since it is not clearly
- // defined as to how/who to handle them. Revisit it once the decision is
- // made on what messages will have to reach the clients, what will be
- // handled by service/manager.
- return new IHdmiCecListener.Stub() {
- @Override
- public void onMessageReceived(HdmiCecMessage message) {
- // Do nothing.
- }
-
- @Override
- public void onCableStatusChanged(boolean connected) {
- // Do nothing.
- }
- };
- }
-}
diff --git a/core/java/android/hardware/hdmi/HdmiCecMessage.java b/core/java/android/hardware/hdmi/HdmiCecMessage.java
index 62fa279b9c97..ac16ad854be4 100644
--- a/core/java/android/hardware/hdmi/HdmiCecMessage.java
+++ b/core/java/android/hardware/hdmi/HdmiCecMessage.java
@@ -16,6 +16,7 @@
package android.hardware.hdmi;
+import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -27,7 +28,10 @@ import java.util.Arrays;
* A class to encapsulate HDMI-CEC message used for the devices connected via
* HDMI cable to communicate with one another. A message is defined by its
* source and destination address, command (or opcode), and optional parameters.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiCecMessage implements Parcelable {
public static final byte[] EMPTY_PARAM = EmptyArray.BYTE;
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index 5b6e8623c86c..f15fa000f599 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -17,6 +17,7 @@
package android.hardware.hdmi;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import android.os.RemoteException;
/**
@@ -28,7 +29,10 @@ import android.os.RemoteException;
* {@link HdmiTvClient} object if the system is configured to host one. Android system
* can host more than one logical CEC devices. If multiple types are configured they
* all work as if they were independent logical devices running in the system.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiControlManager {
@Nullable private final IHdmiControlService mService;
diff --git a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
index 1462f8363700..7be4bc57a329 100644
--- a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
+++ b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
@@ -16,12 +16,16 @@
package android.hardware.hdmi;
+import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
/**
* A class that describes the HDMI port hotplug event.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiHotplugEvent implements Parcelable {
private final int mPort;
diff --git a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
index f0bd237fca66..2e49a3841f6b 100644
--- a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
+++ b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
@@ -16,6 +16,7 @@
package android.hardware.hdmi;
+import android.annotation.SystemApi;
import android.os.RemoteException;
import android.util.Log;
@@ -25,7 +26,10 @@ import android.util.Log;
* in the Android system which acts as a playback device such as set-top box.
* It provides with methods that control, get information from TV/Display device
* connected through HDMI bus.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiPlaybackClient {
private static final String TAG = "HdmiPlaybackClient";
diff --git a/core/java/android/hardware/hdmi/HdmiTvClient.java b/core/java/android/hardware/hdmi/HdmiTvClient.java
index 73c724729ed2..6dc4a4f2cebb 100644
--- a/core/java/android/hardware/hdmi/HdmiTvClient.java
+++ b/core/java/android/hardware/hdmi/HdmiTvClient.java
@@ -15,11 +15,16 @@
*/
package android.hardware.hdmi;
+import android.annotation.SystemApi;
+
/**
* HdmiTvClient represents HDMI-CEC logical device of type TV in the Android system
* which acts as TV/Display. It provides with methods that manage, interact with other
* devices on the CEC bus.
+ *
+ * @hide
*/
+@SystemApi
public final class HdmiTvClient {
private static final String TAG = "HdmiTvClient";
diff --git a/core/java/android/hardware/hdmi/IHdmiCecService.aidl b/core/java/android/hardware/hdmi/IHdmiCecService.aidl
deleted file mode 100644
index ecdd345eec4c..000000000000
--- a/core/java/android/hardware/hdmi/IHdmiCecService.aidl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.hdmi;
-
-import android.hardware.hdmi.HdmiCecMessage;
-import android.hardware.hdmi.IHdmiCecListener;
-import android.os.IBinder;
-
-/**
- * Binder interface that components running in the appplication process
- * will use to enable HDMI-CEC protocol exchange with other devices.
- *
- * @hide
- */
-interface IHdmiCecService {
- IBinder allocateLogicalDevice(int type, IHdmiCecListener listener);
- void removeServiceListener(IBinder b, IHdmiCecListener listener);
- void sendActiveSource(IBinder b);
- void sendInactiveSource(IBinder b);
- void sendImageViewOn(IBinder b);
- void sendTextViewOn(IBinder b);
- void sendGiveDevicePowerStatus(IBinder b, int address);
- boolean isTvOn(IBinder b);
- void sendMessage(IBinder b, in HdmiCecMessage message);
-}
-
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index b96f16646c5b..60e76e0ee239 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -22,6 +22,7 @@ import android.annotation.SdkConstant.SdkConstantType;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
+import android.net.NetworkUtils;
import android.os.Binder;
import android.os.Build.VERSION_CODES;
import android.os.Handler;
@@ -981,13 +982,13 @@ public class ConnectivityManager {
public void onAvailable(NetworkRequest request, Network network) {
currentNetwork = network;
Log.d(TAG, "startUsingNetworkFeature got Network:" + network);
- network.bindProcessForHostResolution();
+ setProcessDefaultNetworkForHostResolution(network);
}
@Override
public void onLost(NetworkRequest request, Network network) {
if (network.equals(currentNetwork)) {
currentNetwork = null;
- network.unbindProcessForHostResolution();
+ setProcessDefaultNetworkForHostResolution(null);
}
Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
}
@@ -1071,7 +1072,7 @@ public class ConnectivityManager {
* @return {@code true} on success, {@code false} on failure
*
* @deprecated Deprecated in favor of the {@link #requestNetwork},
- * {@link Network#bindProcess} and {@link Network#socketFactory} api.
+ * {@link #setProcessDefaultNetwork} and {@link Network#getSocketFactory} api.
*/
public boolean requestRouteToHost(int networkType, int hostAddress) {
InetAddress inetAddress = NetworkUtils.intToInetAddress(hostAddress);
@@ -1095,7 +1096,7 @@ public class ConnectivityManager {
* @return {@code true} on success, {@code false} on failure
* @hide
* @deprecated Deprecated in favor of the {@link #requestNetwork} and
- * {@link Network#bindProcess} api.
+ * {@link #setProcessDefaultNetwork} api.
*/
public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
byte[] address = hostAddress.getAddress();
@@ -2347,4 +2348,64 @@ public class ConnectivityManager {
mService.releaseNetworkRequest(networkRequest);
} catch (RemoteException e) {}
}
+
+ /**
+ * Binds the current process to {@code network}. All Sockets created in the future
+ * (and not explicitly bound via a bound SocketFactory from
+ * {@link Network#getSocketFactory() Network.getSocketFactory()}) will be bound to
+ * {@code network}. All host name resolutions will be limited to {@code network} as well.
+ * Note that if {@code network} ever disconnects, all Sockets created in this way will cease to
+ * work and all host name resolutions will fail. This is by design so an application doesn't
+ * accidentally use Sockets it thinks are still bound to a particular {@link Network}.
+ * To clear binding pass {@code null} for {@code network}. Using individually bound
+ * Sockets created by Network.getSocketFactory().createSocket() and
+ * performing network-specific host name resolutions via
+ * {@link Network#getAllByName Network.getAllByName} is preferred to calling
+ * {@code setProcessDefaultNetwork}.
+ *
+ * @param network The {@link Network} to bind the current process to, or {@code null} to clear
+ * the current binding.
+ * @return {@code true} on success, {@code false} if the {@link Network} is no longer valid.
+ */
+ public static boolean setProcessDefaultNetwork(Network network) {
+ if (network == null) {
+ NetworkUtils.unbindProcessToNetwork();
+ } else {
+ NetworkUtils.bindProcessToNetwork(network.netId);
+ }
+ // TODO fix return value
+ return true;
+ }
+
+ /**
+ * Returns the {@link Network} currently bound to this process via
+ * {@link #setProcessDefaultNetwork}, or {@code null} if no {@link Network} is explicitly bound.
+ *
+ * @return {@code Network} to which this process is bound, or {@code null}.
+ */
+ public static Network getProcessDefaultNetwork() {
+ int netId = NetworkUtils.getNetworkBoundToProcess();
+ if (netId == 0) return null;
+ return new Network(netId);
+ }
+
+ /**
+ * Binds host resolutions performed by this process to {@code network}.
+ * {@link #setProcessDefaultNetwork} takes precedence over this setting.
+ *
+ * @param network The {@link Network} to bind host resolutions from the current process to, or
+ * {@code null} to clear the current binding.
+ * @return {@code true} on success, {@code false} if the {@link Network} is no longer valid.
+ * @hide
+ * @deprecated This is strictly for legacy usage to support {@link #startUsingNetworkFeature}.
+ */
+ public static boolean setProcessDefaultNetworkForHostResolution(Network network) {
+ if (network == null) {
+ NetworkUtils.unbindProcessToNetworkForHostResolution();
+ } else {
+ NetworkUtils.bindProcessToNetworkForHostResolution(network.netId);
+ }
+ // TODO hook up the return value.
+ return true;
+ }
}
diff --git a/core/java/android/net/DhcpResults.java b/core/java/android/net/DhcpResults.java
index 22b26b13c96b..49a307e36dfd 100644
--- a/core/java/android/net/DhcpResults.java
+++ b/core/java/android/net/DhcpResults.java
@@ -74,8 +74,10 @@ public class DhcpResults implements Parcelable {
if (linkProperties.getRoutes().size() == 0) {
for (RouteInfo r : orig.linkProperties.getRoutes()) linkProperties.addRoute(r);
}
- if (linkProperties.getDnses().size() == 0) {
- for (InetAddress d : orig.linkProperties.getDnses()) linkProperties.addDns(d);
+ if (linkProperties.getDnsServers().size() == 0) {
+ for (InetAddress d : orig.linkProperties.getDnsServers()) {
+ linkProperties.addDnsServer(d);
+ }
}
}
@@ -211,7 +213,7 @@ public class DhcpResults implements Parcelable {
public boolean addDns(String addrString) {
if (TextUtils.isEmpty(addrString) == false) {
try {
- linkProperties.addDns(NetworkUtils.numericToInetAddress(addrString));
+ linkProperties.addDnsServer(NetworkUtils.numericToInetAddress(addrString));
} catch (IllegalArgumentException e) {
Log.e(TAG, "addDns failed with addrString " + addrString);
return true;
diff --git a/core/java/android/net/DnsPinger.java b/core/java/android/net/DnsPinger.java
index 66f0fd0f42bb..7acf3f556595 100644
--- a/core/java/android/net/DnsPinger.java
+++ b/core/java/android/net/DnsPinger.java
@@ -248,7 +248,7 @@ public final class DnsPinger extends Handler {
return mDefaultDns;
}
- Collection<InetAddress> dnses = curLinkProps.getDnses();
+ Collection<InetAddress> dnses = curLinkProps.getDnsServers();
if (dnses == null || dnses.size() == 0) {
loge("getDns::LinkProps has null dns - returning default");
return mDefaultDns;
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java
index 3c366799f655..cff9025d74cd 100644
--- a/core/java/android/net/LinkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable;
+import java.util.List;
/**
* Describes the properties of a network link.
@@ -58,10 +59,12 @@ public class LinkProperties implements Parcelable {
private Hashtable<String, LinkProperties> mStackedLinks =
new Hashtable<String, LinkProperties>();
- // @hide
+ /**
+ * @hide
+ */
public static class CompareResult<T> {
- public Collection<T> removed = new ArrayList<T>();
- public Collection<T> added = new ArrayList<T>();
+ public List<T> removed = new ArrayList<T>();
+ public List<T> added = new ArrayList<T>();
@Override
public String toString() {
@@ -81,7 +84,7 @@ public class LinkProperties implements Parcelable {
if (source != null) {
mIfaceName = source.getInterfaceName();
for (LinkAddress l : source.getLinkAddresses()) mLinkAddresses.add(l);
- for (InetAddress i : source.getDnses()) mDnses.add(i);
+ for (InetAddress i : source.getDnsServers()) mDnses.add(i);
mDomains = source.getDomains();
for (RouteInfo r : source.getRoutes()) mRoutes.add(r);
mHttpProxy = (source.getHttpProxy() == null) ?
@@ -98,6 +101,7 @@ public class LinkProperties implements Parcelable {
* will have their interface changed to match this new value.
*
* @param iface The name of the network interface used for this link.
+ * @hide
*/
public void setInterfaceName(String iface) {
mIfaceName = iface;
@@ -117,9 +121,11 @@ public class LinkProperties implements Parcelable {
return mIfaceName;
}
- // @hide
- public Collection<String> getAllInterfaceNames() {
- Collection interfaceNames = new ArrayList<String>(mStackedLinks.size() + 1);
+ /**
+ * @hide
+ */
+ public List<String> getAllInterfaceNames() {
+ List<String> interfaceNames = new ArrayList<String>(mStackedLinks.size() + 1);
if (mIfaceName != null) interfaceNames.add(new String(mIfaceName));
for (LinkProperties stacked: mStackedLinks.values()) {
interfaceNames.addAll(stacked.getAllInterfaceNames());
@@ -134,23 +140,23 @@ public class LinkProperties implements Parcelable {
* prefix lengths for each address. This is a simplified utility alternative to
* {@link LinkProperties#getLinkAddresses}.
*
- * @return An umodifiable {@link Collection} of {@link InetAddress} for this link.
+ * @return An umodifiable {@link List} of {@link InetAddress} for this link.
* @hide
*/
- public Collection<InetAddress> getAddresses() {
- Collection<InetAddress> addresses = new ArrayList<InetAddress>();
+ public List<InetAddress> getAddresses() {
+ List<InetAddress> addresses = new ArrayList<InetAddress>();
for (LinkAddress linkAddress : mLinkAddresses) {
addresses.add(linkAddress.getAddress());
}
- return Collections.unmodifiableCollection(addresses);
+ return Collections.unmodifiableList(addresses);
}
/**
* Returns all the addresses on this link and all the links stacked above it.
* @hide
*/
- public Collection<InetAddress> getAllAddresses() {
- Collection<InetAddress> addresses = new ArrayList<InetAddress>();
+ public List<InetAddress> getAllAddresses() {
+ List<InetAddress> addresses = new ArrayList<InetAddress>();
for (LinkAddress linkAddress : mLinkAddresses) {
addresses.add(linkAddress.getAddress());
}
@@ -174,6 +180,7 @@ public class LinkProperties implements Parcelable {
* same address/prefix does not already exist. If it does exist it is replaced.
* @param address The {@code LinkAddress} to add.
* @return true if {@code address} was added or updated, false otherwise.
+ * @hide
*/
public boolean addLinkAddress(LinkAddress address) {
if (address == null) {
@@ -200,6 +207,7 @@ public class LinkProperties implements Parcelable {
*
* @param toRemove A {@link LinkAddress} specifying the address to remove.
* @return true if the address was removed, false if it did not exist.
+ * @hide
*/
public boolean removeLinkAddress(LinkAddress toRemove) {
int i = findLinkAddressIndex(toRemove);
@@ -214,18 +222,18 @@ public class LinkProperties implements Parcelable {
* Returns all the {@link LinkAddress} on this link. Typically a link will have
* one IPv4 address and one or more IPv6 addresses.
*
- * @return An unmodifiable {@link Collection} of {@link LinkAddress} for this link.
+ * @return An unmodifiable {@link List} of {@link LinkAddress} for this link.
*/
- public Collection<LinkAddress> getLinkAddresses() {
- return Collections.unmodifiableCollection(mLinkAddresses);
+ public List<LinkAddress> getLinkAddresses() {
+ return Collections.unmodifiableList(mLinkAddresses);
}
/**
* Returns all the addresses on this link and all the links stacked above it.
* @hide
*/
- public Collection<LinkAddress> getAllLinkAddresses() {
- Collection<LinkAddress> addresses = new ArrayList<LinkAddress>();
+ public List<LinkAddress> getAllLinkAddresses() {
+ List<LinkAddress> addresses = new ArrayList<LinkAddress>();
addresses.addAll(mLinkAddresses);
for (LinkProperties stacked: mStackedLinks.values()) {
addresses.addAll(stacked.getAllLinkAddresses());
@@ -239,6 +247,7 @@ public class LinkProperties implements Parcelable {
*
* @param addresses The {@link Collection} of {@link LinkAddress} to set in this
* object.
+ * @hide
*/
public void setLinkAddresses(Collection<LinkAddress> addresses) {
mLinkAddresses.clear();
@@ -250,20 +259,21 @@ public class LinkProperties implements Parcelable {
/**
* Adds the given {@link InetAddress} to the list of DNS servers.
*
- * @param dns The {@link InetAddress} to add to the list of DNS servers.
+ * @param dnsServer The {@link InetAddress} to add to the list of DNS servers.
+ * @hide
*/
- public void addDns(InetAddress dns) {
- if (dns != null) mDnses.add(dns);
+ public void addDnsServer(InetAddress dnsServer) {
+ if (dnsServer != null) mDnses.add(dnsServer);
}
/**
* Returns all the {@link LinkAddress} for DNS servers on this link.
*
- * @return An umodifiable {@link Collection} of {@link InetAddress} for DNS servers on
+ * @return An umodifiable {@link List} of {@link InetAddress} for DNS servers on
* this link.
*/
- public Collection<InetAddress> getDnses() {
- return Collections.unmodifiableCollection(mDnses);
+ public List<InetAddress> getDnsServers() {
+ return Collections.unmodifiableList(mDnses);
}
/**
@@ -271,6 +281,7 @@ public class LinkProperties implements Parcelable {
*
* @param domains A {@link String} listing in priority order the comma separated
* domains to search when resolving host names on this link.
+ * @hide
*/
public void setDomains(String domains) {
mDomains = domains;
@@ -323,6 +334,7 @@ public class LinkProperties implements Parcelable {
* proper course is to add either un-named or properly named {@link RouteInfo}.
*
* @param route A {@link RouteInfo} to add to this object.
+ * @hide
*/
public void addRoute(RouteInfo route) {
if (route != null) {
@@ -339,18 +351,18 @@ public class LinkProperties implements Parcelable {
/**
* Returns all the {@link RouteInfo} set on this link.
*
- * @return An unmodifiable {@link Collection} of {@link RouteInfo} for this link.
+ * @return An unmodifiable {@link List} of {@link RouteInfo} for this link.
*/
- public Collection<RouteInfo> getRoutes() {
- return Collections.unmodifiableCollection(mRoutes);
+ public List<RouteInfo> getRoutes() {
+ return Collections.unmodifiableList(mRoutes);
}
/**
* Returns all the routes on this link and all the links stacked above it.
* @hide
*/
- public Collection<RouteInfo> getAllRoutes() {
- Collection<RouteInfo> routes = new ArrayList();
+ public List<RouteInfo> getAllRoutes() {
+ List<RouteInfo> routes = new ArrayList();
routes.addAll(mRoutes);
for (LinkProperties stacked: mStackedLinks.values()) {
routes.addAll(stacked.getAllRoutes());
@@ -364,6 +376,7 @@ public class LinkProperties implements Parcelable {
* not enforce it and applications may ignore them.
*
* @param proxy A {@link ProxyInfo} defining the Http Proxy to use on this link.
+ * @hide
*/
public void setHttpProxy(ProxyInfo proxy) {
mHttpProxy = proxy;
@@ -419,16 +432,17 @@ public class LinkProperties implements Parcelable {
* Returns all the links stacked on top of this link.
* @hide
*/
- public Collection<LinkProperties> getStackedLinks() {
- Collection<LinkProperties> stacked = new ArrayList<LinkProperties>();
+ public List<LinkProperties> getStackedLinks() {
+ List<LinkProperties> stacked = new ArrayList<LinkProperties>();
for (LinkProperties link : mStackedLinks.values()) {
stacked.add(new LinkProperties(link));
}
- return Collections.unmodifiableCollection(stacked);
+ return Collections.unmodifiableList(stacked);
}
/**
* Clears this object to its initial state.
+ * @hide
*/
public void clear() {
mIfaceName = null;
@@ -486,6 +500,7 @@ public class LinkProperties implements Parcelable {
* Returns true if this link has an IPv4 address.
*
* @return {@code true} if there is an IPv4 address, {@code false} otherwise.
+ * @hide
*/
public boolean hasIPv4Address() {
for (LinkAddress address : mLinkAddresses) {
@@ -500,6 +515,7 @@ public class LinkProperties implements Parcelable {
* Returns true if this link has an IPv6 address.
*
* @return {@code true} if there is an IPv6 address, {@code false} otherwise.
+ * @hide
*/
public boolean hasIPv6Address() {
for (LinkAddress address : mLinkAddresses) {
@@ -543,7 +559,7 @@ public class LinkProperties implements Parcelable {
* @hide
*/
public boolean isIdenticalDnses(LinkProperties target) {
- Collection<InetAddress> targetDnses = target.getDnses();
+ Collection<InetAddress> targetDnses = target.getDnsServers();
String targetDomains = target.getDomains();
if (mDomains == null) {
if (targetDomains != null) return false;
@@ -696,7 +712,7 @@ public class LinkProperties implements Parcelable {
result.removed = new ArrayList<InetAddress>(mDnses);
result.added.clear();
if (target != null) {
- for (InetAddress newAddress : target.getDnses()) {
+ for (InetAddress newAddress : target.getDnsServers()) {
if (! result.removed.remove(newAddress)) {
result.added.add(newAddress);
}
@@ -831,7 +847,7 @@ public class LinkProperties implements Parcelable {
addressCount = in.readInt();
for (int i=0; i<addressCount; i++) {
try {
- netProp.addDns(InetAddress.getByAddress(in.createByteArray()));
+ netProp.addDnsServer(InetAddress.getByAddress(in.createByteArray()));
} catch (UnknownHostException e) { }
}
netProp.setDomains(in.readString());
diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java
index 64516e62d161..d933f26c782f 100644
--- a/core/java/android/net/Network.java
+++ b/core/java/android/net/Network.java
@@ -32,7 +32,8 @@ import javax.net.SocketFactory;
* {@link ConnectivityManager.NetworkCallbackListener} in response to
* {@link ConnectivityManager#requestNetwork} or {@link ConnectivityManager#listenForNetwork}.
* It is used to direct traffic to the given {@code Network}, either on a {@link Socket} basis
- * through a targeted {@link SocketFactory} or process-wide via {@link #bindProcess}.
+ * through a targeted {@link SocketFactory} or process-wide via
+ * {@link ConnectivityManager#setProcessDefaultNetwork}.
*/
public class Network implements Parcelable {
@@ -160,63 +161,13 @@ public class Network implements Parcelable {
* @return a {@link SocketFactory} which produces {@link Socket} instances bound to this
* {@code Network}.
*/
- public SocketFactory socketFactory() {
+ public SocketFactory getSocketFactory() {
if (mNetworkBoundSocketFactory == null) {
mNetworkBoundSocketFactory = new NetworkBoundSocketFactory(netId);
}
return mNetworkBoundSocketFactory;
}
- /**
- * Binds the current process to this network. All sockets created in the future (and not
- * explicitly bound via a bound {@link SocketFactory} (see {@link Network#socketFactory})
- * will be bound to this network. Note that if this {@code Network} ever disconnects
- * all sockets created in this way will cease to work. This is by design so an application
- * doesn't accidentally use sockets it thinks are still bound to a particular {@code Network}.
- */
- public void bindProcess() {
- NetworkUtils.bindProcessToNetwork(netId);
- }
-
- /**
- * Binds host resolutions performed by this process to this network. {@link #bindProcess}
- * takes precedence over this setting.
- *
- * @hide
- * @deprecated This is strictly for legacy usage to support startUsingNetworkFeature().
- */
- public void bindProcessForHostResolution() {
- NetworkUtils.bindProcessToNetworkForHostResolution(netId);
- }
-
- /**
- * Clears any process specific {@link Network} binding for host resolution. This does
- * not clear bindings enacted via {@link #bindProcess}.
- *
- * @hide
- * @deprecated This is strictly for legacy usage to support startUsingNetworkFeature().
- */
- public void unbindProcessForHostResolution() {
- NetworkUtils.unbindProcessToNetworkForHostResolution();
- }
-
- /**
- * A static utility method to return any {@code Network} currently bound by this process.
- *
- * @return {@code Network} to which this process is bound.
- */
- public static Network getProcessBoundNetwork() {
- return new Network(NetworkUtils.getNetworkBoundToProcess());
- }
-
- /**
- * Clear any process specific {@code Network} binding. This reverts a call to
- * {@link Network#bindProcess}.
- */
- public static void unbindProcess() {
- NetworkUtils.unbindProcessToNetwork();
- }
-
// implement the Parcelable interface
public int describeContents() {
return 0;
diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java
index edb32866d3b7..b02f88ec8137 100644
--- a/core/java/android/net/NetworkUtils.java
+++ b/core/java/android/net/NetworkUtils.java
@@ -111,7 +111,7 @@ public class NetworkUtils {
/**
* Binds the current process to the network designated by {@code netId}. All sockets created
* in the future (and not explicitly bound via a bound {@link SocketFactory} (see
- * {@link Network#socketFactory}) will be bound to this network. Note that if this
+ * {@link Network#getSocketFactory}) will be bound to this network. Note that if this
* {@code Network} ever disconnects all sockets created in this way will cease to work. This
* is by design so an application doesn't accidentally use sockets it thinks are still bound to
* a particular {@code Network}.
diff --git a/core/java/android/net/ProxyDataTracker.java b/core/java/android/net/ProxyDataTracker.java
index 4973b3d992b6..573a8f873d67 100644
--- a/core/java/android/net/ProxyDataTracker.java
+++ b/core/java/android/net/ProxyDataTracker.java
@@ -107,8 +107,8 @@ public class ProxyDataTracker extends BaseNetworkStateTracker {
mNetworkCapabilities = new NetworkCapabilities();
mNetworkInfo.setIsAvailable(true);
try {
- mLinkProperties.addDns(InetAddress.getByName(DNS1));
- mLinkProperties.addDns(InetAddress.getByName(DNS2));
+ mLinkProperties.addDnsServer(InetAddress.getByName(DNS1));
+ mLinkProperties.addDnsServer(InetAddress.getByName(DNS2));
} catch (UnknownHostException e) {
Log.e(TAG, "Could not add DNS address", e);
}
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 32050dc2629d..537e993e3be9 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -128,29 +128,97 @@ public class BatteryManager {
public static final int BATTERY_PLUGGED_ANY =
BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;
+ /*
+ * Battery property identifiers. These must match the values in
+ * frameworks/native/include/batteryservice/BatteryService.h
+ */
+ /** Battery capacity in microampere-hours, as an integer. */
+ public static final int BATTERY_PROPERTY_CHARGE_COUNTER = 1;
+
+ /**
+ * Instantaneous battery current in microamperes, as an integer. Positive
+ * values indicate net current entering the battery from a charge source,
+ * negative values indicate net current discharging from the battery.
+ */
+ public static final int BATTERY_PROPERTY_CURRENT_NOW = 2;
+
+ /**
+ * Average battery current in microamperes, as an integer. Positive
+ * values indicate net current entering the battery from a charge source,
+ * negative values indicate net current discharging from the battery.
+ * The time period over which the average is computed may depend on the
+ * fuel gauge hardware and its configuration.
+ */
+ public static final int BATTERY_PROPERTY_CURRENT_AVERAGE = 3;
+
+ /**
+ * Remaining battery capacity as an integer percentage of total capacity
+ * (with no fractional part).
+ */
+ public static final int BATTERY_PROPERTY_CAPACITY = 4;
+
+ /**
+ * Battery remaining energy in nanowatt-hours, as a long integer.
+ */
+ public static final int BATTERY_PROPERTY_ENERGY_COUNTER = 5;
+
private IBatteryPropertiesRegistrar mBatteryPropertiesRegistrar;
/**
- * Return the requested battery property.
+ * Query a battery property from the batteryproperties service.
*
- * @param id identifier from {@link BatteryProperty} of the requested property
- * @return a {@link BatteryProperty} object that returns the property value, or null on error
+ * Returns the requested value, or Long.MIN_VALUE if property not
+ * supported on this system or on other error.
*/
- public BatteryProperty getProperty(int id) throws RemoteException {
+ private long queryProperty(int id) {
+ long ret;
+
if (mBatteryPropertiesRegistrar == null) {
IBinder b = ServiceManager.getService("batteryproperties");
mBatteryPropertiesRegistrar =
IBatteryPropertiesRegistrar.Stub.asInterface(b);
if (mBatteryPropertiesRegistrar == null)
- return null;
+ return Long.MIN_VALUE;
}
- BatteryProperty prop = new BatteryProperty();
- if ((mBatteryPropertiesRegistrar.getProperty(id, prop) == 0) &&
- (prop.getLong() != Long.MIN_VALUE))
- return prop;
- else
- return null;
+ try {
+ BatteryProperty prop = new BatteryProperty();
+
+ if (mBatteryPropertiesRegistrar.getProperty(id, prop) == 0)
+ ret = prop.getLong();
+ else
+ ret = Long.MIN_VALUE;
+ } catch (RemoteException e) {
+ ret = Long.MIN_VALUE;
+ }
+
+ return ret;
+ }
+
+ /**
+ * Return the value of a battery property of integer type. If the
+ * platform does not provide the property queried, this value will
+ * be Integer.MIN_VALUE.
+ *
+ * @param id identifier of the requested property
+ *
+ * @return the property value, or Integer.MIN_VALUE if not supported.
+ */
+ public int getIntProperty(int id) {
+ return (int)queryProperty(id);
+ }
+
+ /**
+ * Return the value of a battery property of long type If the
+ * platform does not provide the property queried, this value will
+ * be Long.MIN_VALUE.
+ *
+ * @param id identifier of the requested property
+ *
+ * @return the property value, or Long.MIN_VALUE if not supported.
+ */
+ public long getLongProperty(int id) {
+ return queryProperty(id);
}
}
diff --git a/core/java/android/os/BatteryProperty.java b/core/java/android/os/BatteryProperty.java
index 27dad4f24173..84119bdc126d 100644
--- a/core/java/android/os/BatteryProperty.java
+++ b/core/java/android/os/BatteryProperty.java
@@ -20,44 +20,13 @@ import android.os.Parcelable;
/**
* Battery properties that may be queried using
- * {@link BatteryManager#getProperty
* BatteryManager.getProperty()}
*/
-public class BatteryProperty implements Parcelable {
- /*
- * Battery property identifiers. These must match the values in
- * frameworks/native/include/batteryservice/BatteryService.h
- */
- /** Battery capacity in microampere-hours, as an integer. */
- public static final int CHARGE_COUNTER = 1;
-
- /**
- * Instantaneous battery current in microamperes, as an integer. Positive
- * values indicate net current entering the battery from a charge source,
- * negative values indicate net current discharging from the battery.
- */
- public static final int CURRENT_NOW = 2;
-
- /**
- * Average battery current in microamperes, as an integer. Positive
- * values indicate net current entering the battery from a charge source,
- * negative values indicate net current discharging from the battery.
- * The time period over which the average is computed may depend on the
- * fuel gauge hardware and its configuration.
- */
- public static final int CURRENT_AVERAGE = 3;
-
- /**
- * Remaining battery capacity as an integer percentage of total capacity
- * (with no fractional part).
- */
- public static final int CAPACITY = 4;
-
- /**
- * Battery remaining energy in nanowatt-hours, as a long integer.
- */
- public static final int ENERGY_COUNTER = 5;
+/**
+ * @hide
+ */
+public class BatteryProperty implements Parcelable {
private long mValueLong;
/**
@@ -68,30 +37,12 @@ public class BatteryProperty implements Parcelable {
}
/**
- * Return the value of a property of integer type previously queried
- * via {@link BatteryManager#getProperty
- * BatteryManager.getProperty()}. If the platform does
- * not provide the property queried, this value will be
- * Integer.MIN_VALUE.
- *
- * @return The queried property value, or Integer.MIN_VALUE if not supported.
- */
- public int getInt() {
- return (int)mValueLong;
- }
-
- /**
- * Return the value of a property of long type previously queried
- * via {@link BatteryManager#getProperty
- * BatteryManager.getProperty()}. If the platform does
- * not provide the property queried, this value will be
- * Long.MIN_VALUE.
- *
- * @return The queried property value, or Long.MIN_VALUE if not supported.
+ * @hide
*/
public long getLong() {
return mValueLong;
}
+
/*
* Parcel read/write code must be kept in sync with
* frameworks/native/services/batteryservice/BatteryProperty.cpp
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 61194e96c7f1..658180b21342 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -41,6 +41,7 @@ interface IPowerManager
void goToSleep(long time, int reason, int flags);
void nap(long time);
boolean isInteractive();
+ boolean isPowerSaveMode();
void reboot(boolean confirm, String reason, boolean wait);
void shutdown(boolean confirm, boolean wait);
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index d5177e808e12..cd1cd30d691a 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.SdkConstant;
import android.content.Context;
import android.util.Log;
@@ -313,11 +314,6 @@ public final class PowerManager {
* The value to pass as the 'reason' argument to reboot() to
* reboot into recovery mode (for applying system updates, doing
* factory resets, etc.).
- * <p>
- * Requires the {@link android.Manifest.permission#RECOVERY}
- * permission (in addition to
- * {@link android.Manifest.permission#REBOOT}).
- * </p>
*/
public static final String REBOOT_RECOVERY = "recovery";
@@ -685,6 +681,30 @@ public final class PowerManager {
}
/**
+ * Returns true if the device is currently in power save mode. When in this mode,
+ * applications should reduce their functionality in order to conserve battery as
+ * much as possible. You can monitor for changes to this state with
+ * {@link #ACTION_POWER_SAVE_MODE_CHANGED}.
+ *
+ * @return Returns true if currently in low power mode, else false.
+ */
+ public boolean isPowerSaveMode() {
+ try {
+ return mService.isPowerSaveMode();
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Intent that is broadcast when the state of {@link #isPowerSaveMode()} changes.
+ * This broadcast is only sent to registered receivers.
+ */
+ @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_POWER_SAVE_MODE_CHANGED
+ = "android.os.action.POWER_SAVE_MODE_CHANGED";
+
+ /**
* A wake lock is a mechanism to indicate that your application needs
* to have the device stay on.
* <p>
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index ee219e3d5d36..f7a89ba5452c 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -690,16 +690,45 @@ public class UserManager {
}
}
+ /**
+ * If the target user is a managed profile of the calling user or the caller
+ * is itself a managed profile, then this returns a drawable to use as a small
+ * icon to include in a view to distinguish it from the original icon.
+ *
+ * @param user The target user.
+ * @return the drawable or null if no drawable is required.
+ * @hide
+ */
+ public Drawable getBadgeForUser(UserHandle user) {
+ UserInfo userInfo = getUserIfProfile(user.getIdentifier());
+ if (userInfo != null && userInfo.isManagedProfile()) {
+ return Resources.getSystem().getDrawable(
+ com.android.internal.R.drawable.ic_corp_badge);
+ }
+ return null;
+ }
+
private int getBadgeResIdForUser(int userHandle) {
// Return the framework-provided badge.
+ UserInfo userInfo = getUserIfProfile(userHandle);
+ if (userInfo != null && userInfo.isManagedProfile()) {
+ return com.android.internal.R.drawable.ic_corp_icon_badge;
+ }
+ return 0;
+ }
+
+ /**
+ * @return UserInfo for userHandle if it exists and is a profile of the current
+ * user or null.
+ */
+ private UserInfo getUserIfProfile(int userHandle) {
List<UserInfo> userProfiles = getProfiles(getUserHandle());
for (UserInfo user : userProfiles) {
- if (user.id == userHandle
- && user.isManagedProfile()) {
- return com.android.internal.R.drawable.ic_corp_badge;
+ if (user.id == userHandle) {
+ return user;
}
}
- return 0;
+ return null;
}
private Drawable getMergedDrawable(Drawable icon, Drawable badge) {
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index 6b8e2de4550b..327fe4a57c83 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -60,7 +60,8 @@ import java.util.List;
* <p>
* All client apps must hold a valid URI permission grant to access documents,
* typically issued when a user makes a selection through
- * {@link Intent#ACTION_OPEN_DOCUMENT} or {@link Intent#ACTION_CREATE_DOCUMENT}.
+ * {@link Intent#ACTION_OPEN_DOCUMENT}, {@link Intent#ACTION_CREATE_DOCUMENT},
+ * or {@link Intent#ACTION_OPEN_DOCUMENT_TREE}.
*
* @see DocumentsProvider
*/
@@ -73,8 +74,8 @@ public final class DocumentsContract {
// content://com.example/root/sdcard/search/?query=pony
// content://com.example/document/12/
// content://com.example/document/12/children/
- // content://com.example/via/12/document/24/
- // content://com.example/via/12/document/24/children/
+ // content://com.example/tree/12/document/24/
+ // content://com.example/tree/12/document/24/children/
private DocumentsContract() {
}
@@ -441,12 +442,13 @@ public final class DocumentsContract {
public static final int FLAG_SUPPORTS_SEARCH = 1 << 3;
/**
- * Flag indicating that this root supports directory selection.
+ * Flag indicating that this root supports testing parent child
+ * relationships.
*
* @see #COLUMN_FLAGS
* @see DocumentsProvider#isChildDocument(String, String)
*/
- public static final int FLAG_SUPPORTS_DIR_SELECTION = 1 << 4;
+ public static final int FLAG_SUPPORTS_IS_CHILD = 1 << 4;
/**
* Flag indicating that this root is currently empty. This may be used
@@ -518,7 +520,7 @@ public final class DocumentsContract {
private static final String PATH_DOCUMENT = "document";
private static final String PATH_CHILDREN = "children";
private static final String PATH_SEARCH = "search";
- private static final String PATH_VIA = "via";
+ private static final String PATH_TREE = "tree";
private static final String PARAM_QUERY = "query";
private static final String PARAM_MANAGE = "manage";
@@ -564,17 +566,17 @@ public final class DocumentsContract {
* Build URI representing access to descendant documents of the given
* {@link Document#COLUMN_DOCUMENT_ID}.
*
- * @see #getViaDocumentId(Uri)
+ * @see #getTreeDocumentId(Uri)
*/
- public static Uri buildViaUri(String authority, String documentId) {
+ public static Uri buildTreeDocumentUri(String authority, String documentId) {
return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(authority)
- .appendPath(PATH_VIA).appendPath(documentId).build();
+ .appendPath(PATH_TREE).appendPath(documentId).build();
}
/**
- * Build URI representing the given {@link Document#COLUMN_DOCUMENT_ID} in a
- * document provider. When queried, a provider will return a single row with
- * columns defined by {@link Document}.
+ * Build URI representing the target {@link Document#COLUMN_DOCUMENT_ID} in
+ * a document provider. When queried, a provider will return a single row
+ * with columns defined by {@link Document}.
*
* @see DocumentsProvider#queryDocument(String, String[])
* @see #getDocumentId(Uri)
@@ -585,42 +587,46 @@ public final class DocumentsContract {
}
/**
- * Build URI representing the given {@link Document#COLUMN_DOCUMENT_ID} in a
- * document provider. Instead of directly accessing the target document,
- * gain access via another document. The target document must be a
- * descendant (child, grandchild, etc) of the via document.
+ * Build URI representing the target {@link Document#COLUMN_DOCUMENT_ID} in
+ * a document provider. When queried, a provider will return a single row
+ * with columns defined by {@link Document}.
+ * <p>
+ * However, instead of directly accessing the target document, the returned
+ * URI will leverage access granted through a subtree URI, typically
+ * returned by {@link Intent#ACTION_OPEN_DOCUMENT_TREE}. The target document
+ * must be a descendant (child, grandchild, etc) of the subtree.
* <p>
* This is typically used to access documents under a user-selected
- * directory, since it doesn't require the user to separately confirm each
- * new document access.
+ * directory tree, since it doesn't require the user to separately confirm
+ * each new document access.
*
- * @param viaUri a related document (directory) that the caller is
- * leveraging to gain access to the target document. The target
- * document must be a descendant of this directory.
+ * @param treeUri the subtree to leverage to gain access to the target
+ * document. The target directory must be a descendant of this
+ * subtree.
* @param documentId the target document, which the caller may not have
* direct access to.
- * @see Intent#ACTION_PICK_DIRECTORY
+ * @see Intent#ACTION_OPEN_DOCUMENT_TREE
* @see DocumentsProvider#isChildDocument(String, String)
* @see #buildDocumentUri(String, String)
*/
- public static Uri buildDocumentViaUri(Uri viaUri, String documentId) {
+ public static Uri buildDocumentUriUsingTree(Uri treeUri, String documentId) {
return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
- .authority(viaUri.getAuthority()).appendPath(PATH_VIA)
- .appendPath(getViaDocumentId(viaUri)).appendPath(PATH_DOCUMENT)
+ .authority(treeUri.getAuthority()).appendPath(PATH_TREE)
+ .appendPath(getTreeDocumentId(treeUri)).appendPath(PATH_DOCUMENT)
.appendPath(documentId).build();
}
/** {@hide} */
- public static Uri buildDocumentMaybeViaUri(Uri baseUri, String documentId) {
- if (isViaUri(baseUri)) {
- return buildDocumentViaUri(baseUri, documentId);
+ public static Uri buildDocumentUriMaybeUsingTree(Uri baseUri, String documentId) {
+ if (isTreeUri(baseUri)) {
+ return buildDocumentUriUsingTree(baseUri, documentId);
} else {
return buildDocumentUri(baseUri.getAuthority(), documentId);
}
}
/**
- * Build URI representing the children of the given directory in a document
+ * Build URI representing the children of the target directory in a document
* provider. When queried, a provider will return zero or more rows with
* columns defined by {@link Document}.
*
@@ -637,28 +643,33 @@ public final class DocumentsContract {
}
/**
- * Build URI representing the children of the given directory in a document
- * provider. Instead of directly accessing the target document, gain access
- * via another document. The target document must be a descendant (child,
- * grandchild, etc) of the via document.
+ * Build URI representing the children of the target directory in a document
+ * provider. When queried, a provider will return zero or more rows with
+ * columns defined by {@link Document}.
+ * <p>
+ * However, instead of directly accessing the target directory, the returned
+ * URI will leverage access granted through a subtree URI, typically
+ * returned by {@link Intent#ACTION_OPEN_DOCUMENT_TREE}. The target
+ * directory must be a descendant (child, grandchild, etc) of the subtree.
* <p>
* This is typically used to access documents under a user-selected
- * directory, since it doesn't require the user to separately confirm each
- * new document access.
+ * directory tree, since it doesn't require the user to separately confirm
+ * each new document access.
*
- * @param viaUri a related document (directory) that the caller is
- * leveraging to gain access to the target document. The target
- * document must be a descendant of this directory.
- * @param parentDocumentId the target document, which the caller may not
- * have direct access to.
- * @see Intent#ACTION_PICK_DIRECTORY
+ * @param treeUri the subtree to leverage to gain access to the target
+ * document. The target directory must be a descendant of this
+ * subtree.
+ * @param parentDocumentId the document to return children for, which the
+ * caller may not have direct access to, and which must be a
+ * directory with MIME type of {@link Document#MIME_TYPE_DIR}.
+ * @see Intent#ACTION_OPEN_DOCUMENT_TREE
* @see DocumentsProvider#isChildDocument(String, String)
* @see #buildChildDocumentsUri(String, String)
*/
- public static Uri buildChildDocumentsViaUri(Uri viaUri, String parentDocumentId) {
+ public static Uri buildChildDocumentsUriUsingTree(Uri treeUri, String parentDocumentId) {
return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
- .authority(viaUri.getAuthority()).appendPath(PATH_VIA)
- .appendPath(getViaDocumentId(viaUri)).appendPath(PATH_DOCUMENT)
+ .authority(treeUri.getAuthority()).appendPath(PATH_TREE)
+ .appendPath(getTreeDocumentId(treeUri)).appendPath(PATH_DOCUMENT)
.appendPath(parentDocumentId).appendPath(PATH_CHILDREN).build();
}
@@ -683,21 +694,24 @@ public final class DocumentsContract {
* {@link DocumentsProvider}.
*
* @see #buildDocumentUri(String, String)
- * @see #buildDocumentViaUri(Uri, String)
+ * @see #buildDocumentUriUsingTree(Uri, String)
*/
public static boolean isDocumentUri(Context context, Uri uri) {
final List<String> paths = uri.getPathSegments();
- if (paths.size() >= 2
- && (PATH_DOCUMENT.equals(paths.get(0)) || PATH_VIA.equals(paths.get(0)))) {
+ if (paths.size() == 2 && PATH_DOCUMENT.equals(paths.get(0))) {
+ return isDocumentsProvider(context, uri.getAuthority());
+ }
+ if (paths.size() == 4 && PATH_TREE.equals(paths.get(0))
+ && PATH_DOCUMENT.equals(paths.get(2))) {
return isDocumentsProvider(context, uri.getAuthority());
}
return false;
}
/** {@hide} */
- public static boolean isViaUri(Uri uri) {
+ public static boolean isTreeUri(Uri uri) {
final List<String> paths = uri.getPathSegments();
- return (paths.size() >= 2 && PATH_VIA.equals(paths.get(0)));
+ return (paths.size() >= 2 && PATH_TREE.equals(paths.get(0)));
}
private static boolean isDocumentsProvider(Context context, String authority) {
@@ -733,7 +747,7 @@ public final class DocumentsContract {
if (paths.size() >= 2 && PATH_DOCUMENT.equals(paths.get(0))) {
return paths.get(1);
}
- if (paths.size() >= 4 && PATH_VIA.equals(paths.get(0))
+ if (paths.size() >= 4 && PATH_TREE.equals(paths.get(0))
&& PATH_DOCUMENT.equals(paths.get(2))) {
return paths.get(3);
}
@@ -742,12 +756,10 @@ public final class DocumentsContract {
/**
* Extract the via {@link Document#COLUMN_DOCUMENT_ID} from the given URI.
- *
- * @see #isViaUri(Uri)
*/
- public static String getViaDocumentId(Uri documentUri) {
+ public static String getTreeDocumentId(Uri documentUri) {
final List<String> paths = documentUri.getPathSegments();
- if (paths.size() >= 2 && PATH_VIA.equals(paths.get(0))) {
+ if (paths.size() >= 2 && PATH_TREE.equals(paths.get(0))) {
return paths.get(1);
}
throw new IllegalArgumentException("Invalid URI: " + documentUri);
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 066b4aa5b55f..021fff4f78ef 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -20,10 +20,14 @@ import static android.provider.DocumentsContract.EXTRA_THUMBNAIL_SIZE;
import static android.provider.DocumentsContract.METHOD_CREATE_DOCUMENT;
import static android.provider.DocumentsContract.METHOD_DELETE_DOCUMENT;
import static android.provider.DocumentsContract.METHOD_RENAME_DOCUMENT;
+import static android.provider.DocumentsContract.buildDocumentUri;
+import static android.provider.DocumentsContract.buildDocumentUriMaybeUsingTree;
+import static android.provider.DocumentsContract.buildTreeDocumentUri;
import static android.provider.DocumentsContract.getDocumentId;
import static android.provider.DocumentsContract.getRootId;
import static android.provider.DocumentsContract.getSearchDocumentsQuery;
-import static android.provider.DocumentsContract.isViaUri;
+import static android.provider.DocumentsContract.getTreeDocumentId;
+import static android.provider.DocumentsContract.isTreeUri;
import android.content.ContentProvider;
import android.content.ContentResolver;
@@ -117,6 +121,7 @@ import java.util.Objects;
* </p>
*
* @see Intent#ACTION_OPEN_DOCUMENT
+ * @see Intent#ACTION_OPEN_DOCUMENT_TREE
* @see Intent#ACTION_CREATE_DOCUMENT
*/
public abstract class DocumentsProvider extends ContentProvider {
@@ -128,8 +133,8 @@ public abstract class DocumentsProvider extends ContentProvider {
private static final int MATCH_SEARCH = 4;
private static final int MATCH_DOCUMENT = 5;
private static final int MATCH_CHILDREN = 6;
- private static final int MATCH_DOCUMENT_VIA = 7;
- private static final int MATCH_CHILDREN_VIA = 8;
+ private static final int MATCH_DOCUMENT_TREE = 7;
+ private static final int MATCH_CHILDREN_TREE = 8;
private String mAuthority;
@@ -149,8 +154,8 @@ public abstract class DocumentsProvider extends ContentProvider {
mMatcher.addURI(mAuthority, "root/*/search", MATCH_SEARCH);
mMatcher.addURI(mAuthority, "document/*", MATCH_DOCUMENT);
mMatcher.addURI(mAuthority, "document/*/children", MATCH_CHILDREN);
- mMatcher.addURI(mAuthority, "via/*/document/*", MATCH_DOCUMENT_VIA);
- mMatcher.addURI(mAuthority, "via/*/document/*/children", MATCH_CHILDREN_VIA);
+ mMatcher.addURI(mAuthority, "tree/*/document/*", MATCH_DOCUMENT_TREE);
+ mMatcher.addURI(mAuthority, "tree/*/document/*/children", MATCH_CHILDREN_TREE);
// Sanity check our setup
if (!info.exported) {
@@ -169,23 +174,24 @@ public abstract class DocumentsProvider extends ContentProvider {
/**
* Test if a document is descendant (child, grandchild, etc) from the given
- * parent. Providers must override this to support directory selection. You
- * should avoid making network requests to keep this request fast.
+ * parent. For example, providers must implement this to support
+ * {@link Intent#ACTION_OPEN_DOCUMENT_TREE}. You should avoid making network
+ * requests to keep this request fast.
*
* @param parentDocumentId parent to verify against.
* @param documentId child to verify.
* @return if given document is a descendant of the given parent.
- * @see DocumentsContract.Root#FLAG_SUPPORTS_DIR_SELECTION
+ * @see DocumentsContract.Root#FLAG_SUPPORTS_IS_CHILD
*/
public boolean isChildDocument(String parentDocumentId, String documentId) {
return false;
}
/** {@hide} */
- private void enforceVia(Uri documentUri) {
- if (DocumentsContract.isViaUri(documentUri)) {
- final String parent = DocumentsContract.getViaDocumentId(documentUri);
- final String child = DocumentsContract.getDocumentId(documentUri);
+ private void enforceTree(Uri documentUri) {
+ if (isTreeUri(documentUri)) {
+ final String parent = getTreeDocumentId(documentUri);
+ final String child = getDocumentId(documentUri);
if (Objects.equals(parent, child)) {
return;
}
@@ -479,12 +485,12 @@ public abstract class DocumentsProvider extends ContentProvider {
return querySearchDocuments(
getRootId(uri), getSearchDocumentsQuery(uri), projection);
case MATCH_DOCUMENT:
- case MATCH_DOCUMENT_VIA:
- enforceVia(uri);
+ case MATCH_DOCUMENT_TREE:
+ enforceTree(uri);
return queryDocument(getDocumentId(uri), projection);
case MATCH_CHILDREN:
- case MATCH_CHILDREN_VIA:
- enforceVia(uri);
+ case MATCH_CHILDREN_TREE:
+ enforceTree(uri);
if (DocumentsContract.isManageMode(uri)) {
return queryChildDocumentsForManage(
getDocumentId(uri), projection, sortOrder);
@@ -512,8 +518,8 @@ public abstract class DocumentsProvider extends ContentProvider {
case MATCH_ROOT:
return DocumentsContract.Root.MIME_TYPE_ITEM;
case MATCH_DOCUMENT:
- case MATCH_DOCUMENT_VIA:
- enforceVia(uri);
+ case MATCH_DOCUMENT_TREE:
+ enforceTree(uri);
return getDocumentType(getDocumentId(uri));
default:
return null;
@@ -530,21 +536,20 @@ public abstract class DocumentsProvider extends ContentProvider {
* call the superclass. If the superclass returns {@code null}, the subclass
* may implement custom behavior.
* <p>
- * This is typically used to resolve a "via" URI into a concrete document
+ * This is typically used to resolve a subtree URI into a concrete document
* reference, issuing a narrower single-document URI permission grant along
* the way.
*
- * @see DocumentsContract#buildDocumentViaUri(Uri, String)
+ * @see DocumentsContract#buildDocumentUriUsingTree(Uri, String)
*/
@Override
public Uri canonicalize(Uri uri) {
final Context context = getContext();
switch (mMatcher.match(uri)) {
- case MATCH_DOCUMENT_VIA:
- enforceVia(uri);
+ case MATCH_DOCUMENT_TREE:
+ enforceTree(uri);
- final Uri narrowUri = DocumentsContract.buildDocumentUri(uri.getAuthority(),
- DocumentsContract.getDocumentId(uri));
+ final Uri narrowUri = buildDocumentUri(uri.getAuthority(), getDocumentId(uri));
// Caller may only have prefix grant, so extend them a grant to
// the narrow URI.
@@ -628,7 +633,7 @@ public abstract class DocumentsProvider extends ContentProvider {
throw new SecurityException(
"Requested authority " + authority + " doesn't match provider " + mAuthority);
}
- enforceVia(documentUri);
+ enforceTree(documentUri);
final Bundle out = new Bundle();
try {
@@ -641,8 +646,8 @@ public abstract class DocumentsProvider extends ContentProvider {
// No need to issue new grants here, since caller either has
// manage permission or a prefix grant. We might generate a
- // "via" style URI if that's how they called us.
- final Uri newDocumentUri = DocumentsContract.buildDocumentMaybeViaUri(documentUri,
+ // tree style URI if that's how they called us.
+ final Uri newDocumentUri = buildDocumentUriMaybeUsingTree(documentUri,
newDocumentId);
out.putParcelable(DocumentsContract.EXTRA_URI, newDocumentUri);
@@ -653,12 +658,12 @@ public abstract class DocumentsProvider extends ContentProvider {
final String newDocumentId = renameDocument(documentId, displayName);
if (newDocumentId != null) {
- final Uri newDocumentUri = DocumentsContract.buildDocumentMaybeViaUri(
- documentUri, newDocumentId);
+ final Uri newDocumentUri = buildDocumentUriMaybeUsingTree(documentUri,
+ newDocumentId);
// If caller came in with a narrow grant, issue them a
// narrow grant for the newly renamed document.
- if (!isViaUri(newDocumentUri)) {
+ if (!isTreeUri(newDocumentUri)) {
final int modeFlags = getCallingOrSelfUriPermissionModeFlags(context,
documentUri);
context.grantUriPermission(getCallingPackage(), newDocumentUri, modeFlags);
@@ -694,8 +699,8 @@ public abstract class DocumentsProvider extends ContentProvider {
*/
public final void revokeDocumentPermission(String documentId) {
final Context context = getContext();
- context.revokeUriPermission(DocumentsContract.buildDocumentUri(mAuthority, documentId), ~0);
- context.revokeUriPermission(DocumentsContract.buildViaUri(mAuthority, documentId), ~0);
+ context.revokeUriPermission(buildDocumentUri(mAuthority, documentId), ~0);
+ context.revokeUriPermission(buildTreeDocumentUri(mAuthority, documentId), ~0);
}
/**
@@ -705,7 +710,7 @@ public abstract class DocumentsProvider extends ContentProvider {
*/
@Override
public final ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
return openDocument(getDocumentId(uri), mode, null);
}
@@ -717,7 +722,7 @@ public abstract class DocumentsProvider extends ContentProvider {
@Override
public final ParcelFileDescriptor openFile(Uri uri, String mode, CancellationSignal signal)
throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
return openDocument(getDocumentId(uri), mode, signal);
}
@@ -730,7 +735,7 @@ public abstract class DocumentsProvider extends ContentProvider {
@SuppressWarnings("resource")
public final AssetFileDescriptor openAssetFile(Uri uri, String mode)
throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
final ParcelFileDescriptor fd = openDocument(getDocumentId(uri), mode, null);
return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
}
@@ -744,7 +749,7 @@ public abstract class DocumentsProvider extends ContentProvider {
@SuppressWarnings("resource")
public final AssetFileDescriptor openAssetFile(Uri uri, String mode, CancellationSignal signal)
throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
final ParcelFileDescriptor fd = openDocument(getDocumentId(uri), mode, signal);
return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
}
@@ -757,7 +762,7 @@ public abstract class DocumentsProvider extends ContentProvider {
@Override
public final AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts)
throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
if (opts != null && opts.containsKey(EXTRA_THUMBNAIL_SIZE)) {
final Point sizeHint = opts.getParcelable(EXTRA_THUMBNAIL_SIZE);
return openDocumentThumbnail(getDocumentId(uri), sizeHint, null);
@@ -775,7 +780,7 @@ public abstract class DocumentsProvider extends ContentProvider {
public final AssetFileDescriptor openTypedAssetFile(
Uri uri, String mimeTypeFilter, Bundle opts, CancellationSignal signal)
throws FileNotFoundException {
- enforceVia(uri);
+ enforceTree(uri);
if (opts != null && opts.containsKey(EXTRA_THUMBNAIL_SIZE)) {
final Point sizeHint = opts.getParcelable(EXTRA_THUMBNAIL_SIZE);
return openDocumentThumbnail(getDocumentId(uri), sizeHint, signal);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e9ffc5226fb3..55c66baec2ac 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -791,6 +791,15 @@ public final class Settings {
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_PAIRING_SETTINGS = "android.settings.PAIRING_SETTINGS";
+ /**
+ * Activity Action: Show battery saver settings.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_BATTERY_SAVER_SETTINGS
+ = "android.settings.BATTERY_SAVER_SETTINGS";
+
// End of Intent actions for Settings
/**
@@ -6018,6 +6027,13 @@ public final class Settings {
*/
public static final String LOW_POWER_MODE = "low_power";
+ /**
+ * Battery level [1-99] at which low power mode automatically turns on.
+ * If 0, it will not automatically turn on.
+ * @hide
+ */
+ public static final String LOW_POWER_MODE_TRIGGER_LEVEL = "low_power_trigger_level";
+
/**
* If 1, the activity manager will aggressively finish activities and
* processes as soon as they are no longer needed. If 0, the normal
diff --git a/core/java/android/service/fingerprint/FingerprintManager.java b/core/java/android/service/fingerprint/FingerprintManager.java
index 2fcec52d2e65..dd2030bb306d 100644
--- a/core/java/android/service/fingerprint/FingerprintManager.java
+++ b/core/java/android/service/fingerprint/FingerprintManager.java
@@ -31,6 +31,7 @@ import android.util.Log;
/**
* A class that coordinates access to the fingerprint hardware.
+ * @hide
*/
public class FingerprintManager {
diff --git a/core/java/android/service/fingerprint/FingerprintManagerReceiver.java b/core/java/android/service/fingerprint/FingerprintManagerReceiver.java
index 34f16558acca..5960791ba07d 100644
--- a/core/java/android/service/fingerprint/FingerprintManagerReceiver.java
+++ b/core/java/android/service/fingerprint/FingerprintManagerReceiver.java
@@ -13,6 +13,7 @@ package android.service.fingerprint;
* 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.
+ * @hide
*/
public class FingerprintManagerReceiver {
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 557f5a60b095..8bd0f4ded551 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -16,7 +16,7 @@
package android.service.notification;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.annotation.SdkConstant;
import android.app.INotificationManager;
import android.app.Service;
@@ -29,6 +29,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.util.ArrayMap;
import android.util.Log;
import java.util.List;
@@ -54,7 +55,7 @@ public abstract class NotificationListenerService extends Service {
+ "[" + getClass().getSimpleName() + "]";
private INotificationListenerWrapper mWrapper = null;
- private Ranking mRanking;
+ private RankingMap mRankingMap;
private INotificationManager mNoMan;
@@ -75,7 +76,43 @@ public abstract class NotificationListenerService extends Service {
* object as well as its identifying information (tag and id) and source
* (package name).
*/
- public abstract void onNotificationPosted(StatusBarNotification sbn);
+ public void onNotificationPosted(StatusBarNotification sbn) {
+ // optional
+ }
+
+ /**
+ * Implement this method to learn about new notifications as they are posted by apps.
+ *
+ * @param sbn A data structure encapsulating the original {@link android.app.Notification}
+ * object as well as its identifying information (tag and id) and source
+ * (package name).
+ * @param rankingMap The current ranking map that can be used to retrieve ranking information
+ * for active notifications, including the newly posted one.
+ */
+ public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
+ onNotificationPosted(sbn);
+ }
+
+ /**
+ * Implement this method to learn when notifications are removed.
+ * <P>
+ * This might occur because the user has dismissed the notification using system UI (or another
+ * notification listener) or because the app has withdrawn the notification.
+ * <P>
+ * NOTE: The {@link StatusBarNotification} object you receive will be "light"; that is, the
+ * result from {@link StatusBarNotification#getNotification} may be missing some heavyweight
+ * fields such as {@link android.app.Notification#contentView} and
+ * {@link android.app.Notification#largeIcon}. However, all other fields on
+ * {@link StatusBarNotification}, sufficient to match this call with a prior call to
+ * {@link #onNotificationPosted(StatusBarNotification)}, will be intact.
+ *
+ * @param sbn A data structure encapsulating at least the original information (tag and id)
+ * and source (package name) used to post the {@link android.app.Notification} that
+ * was just removed.
+ */
+ public void onNotificationRemoved(StatusBarNotification sbn) {
+ // optional
+ }
/**
* Implement this method to learn when notifications are removed.
@@ -93,8 +130,13 @@ public abstract class NotificationListenerService extends Service {
* @param sbn A data structure encapsulating at least the original information (tag and id)
* and source (package name) used to post the {@link android.app.Notification} that
* was just removed.
+ * @param rankingMap The current ranking map that can be used to retrieve ranking information
+ * for active notifications.
+ *
*/
- public abstract void onNotificationRemoved(StatusBarNotification sbn);
+ public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap) {
+ onNotificationRemoved(sbn);
+ }
/**
* Implement this method to learn about when the listener is enabled and connected to
@@ -107,10 +149,11 @@ public abstract class NotificationListenerService extends Service {
/**
* Implement this method to be notified when the notification ranking changes.
- * <P>
- * Call {@link #getCurrentRanking()} to retrieve the new ranking.
+ *
+ * @param rankingMap The current ranking map that can be used to retrieve ranking information
+ * for active notifications.
*/
- public void onNotificationRankingUpdate() {
+ public void onNotificationRankingUpdate(RankingMap rankingMap) {
// optional
}
@@ -241,16 +284,19 @@ public abstract class NotificationListenerService extends Service {
*
* <p>
* The returned object represents the current ranking snapshot and only
- * applies for currently active notifications. Hence you must retrieve a
- * new Ranking after each notification event such as
- * {@link #onNotificationPosted(StatusBarNotification)},
- * {@link #onNotificationRemoved(StatusBarNotification)}, etc.
+ * applies for currently active notifications.
+ * <p>
+ * Generally you should use the RankingMap that is passed with events such
+ * as {@link #onNotificationPosted(StatusBarNotification, RankingMap)},
+ * {@link #onNotificationRemoved(StatusBarNotification, RankingMap)}, and
+ * so on. This method should only be used when needing access outside of
+ * such events, for example to retrieve the RankingMap right after
+ * initialization.
*
- * @return A {@link NotificationListenerService.Ranking} object providing
- * access to ranking information
+ * @return A {@link RankingMap} object providing access to ranking information
*/
- public Ranking getCurrentRanking() {
- return mRanking;
+ public RankingMap getCurrentRanking() {
+ return mRankingMap;
}
@Override
@@ -279,7 +325,7 @@ public abstract class NotificationListenerService extends Service {
* @param currentUser the user to use as the stream filter
* @hide
*/
- @PrivateApi
+ @SystemApi
public void registerAsSystemService(ComponentName componentName, int currentUser)
throws RemoteException {
if (mWrapper == null) {
@@ -297,7 +343,7 @@ public abstract class NotificationListenerService extends Service {
* with (@link registerAsService).
* @hide
*/
- @PrivateApi
+ @SystemApi
public void unregisterAsSystemService() throws RemoteException {
if (mWrapper != null) {
INotificationManager noMan = getNotificationInterface();
@@ -313,7 +359,7 @@ public abstract class NotificationListenerService extends Service {
synchronized (mWrapper) {
applyUpdate(update);
try {
- NotificationListenerService.this.onNotificationPosted(sbn);
+ NotificationListenerService.this.onNotificationPosted(sbn, mRankingMap);
} catch (Throwable t) {
Log.w(TAG, "Error running onNotificationPosted", t);
}
@@ -326,7 +372,7 @@ public abstract class NotificationListenerService extends Service {
synchronized (mWrapper) {
applyUpdate(update);
try {
- NotificationListenerService.this.onNotificationRemoved(sbn);
+ NotificationListenerService.this.onNotificationRemoved(sbn, mRankingMap);
} catch (Throwable t) {
Log.w(TAG, "Error running onNotificationRemoved", t);
}
@@ -351,7 +397,7 @@ public abstract class NotificationListenerService extends Service {
synchronized (mWrapper) {
applyUpdate(update);
try {
- NotificationListenerService.this.onNotificationRankingUpdate();
+ NotificationListenerService.this.onNotificationRankingUpdate(mRankingMap);
} catch (Throwable t) {
Log.w(TAG, "Error running onNotificationRankingUpdate", t);
}
@@ -360,7 +406,65 @@ public abstract class NotificationListenerService extends Service {
}
private void applyUpdate(NotificationRankingUpdate update) {
- mRanking = new Ranking(update);
+ mRankingMap = new RankingMap(update);
+ }
+
+ /**
+ * Provides access to ranking information on a currently active
+ * notification.
+ *
+ * <p>
+ * Note that this object is not updated on notification events (such as
+ * {@link #onNotificationPosted(StatusBarNotification, RankingMap)},
+ * {@link #onNotificationRemoved(StatusBarNotification)}, etc.). Make sure
+ * to retrieve a new Ranking from the current {@link RankingMap} whenever
+ * a notification event occurs.
+ */
+ public static class Ranking {
+ private final String mKey;
+ private final int mRank;
+ private final boolean mIsAmbient;
+ private final boolean mIsInterceptedByDnd;
+
+ private Ranking(String key, int rank, boolean isAmbient, boolean isInterceptedByDnd) {
+ mKey = key;
+ mRank = rank;
+ mIsAmbient = isAmbient;
+ mIsInterceptedByDnd = isInterceptedByDnd;
+ }
+
+ /**
+ * Returns the key of the notification this Ranking applies to.
+ */
+ public String getKey() {
+ return mKey;
+ }
+
+ /**
+ * Returns the rank of the notification.
+ *
+ * @return the rank of the notification, that is the 0-based index in
+ * the list of active notifications.
+ */
+ public int getRank() {
+ return mRank;
+ }
+
+ /**
+ * Returns whether the notification is an ambient notification, that is
+ * a notification that doesn't require the user's immediate attention.
+ */
+ public boolean isAmbient() {
+ return mIsAmbient;
+ }
+
+ /**
+ * Returns whether the notification was intercepted by
+ * &quot;Do not disturb&quot;.
+ */
+ public boolean isInterceptedByDoNotDisturb() {
+ return mIsInterceptedByDnd;
+ }
}
/**
@@ -371,11 +475,14 @@ public abstract class NotificationListenerService extends Service {
* Note that this object represents a ranking snapshot that only applies to
* notifications active at the time of retrieval.
*/
- public static class Ranking implements Parcelable {
+ public static class RankingMap implements Parcelable {
private final NotificationRankingUpdate mRankingUpdate;
+ private final ArrayMap<String, Ranking> mRankingCache;
+ private boolean mRankingCacheInitialized;
- private Ranking(NotificationRankingUpdate rankingUpdate) {
+ private RankingMap(NotificationRankingUpdate rankingUpdate) {
mRankingUpdate = rankingUpdate;
+ mRankingCache = new ArrayMap<>(rankingUpdate.getOrderedKeys().length);
}
/**
@@ -389,56 +496,37 @@ public abstract class NotificationListenerService extends Service {
}
/**
- * Returns the rank of the notification with the given key, that is the
- * index of <code>key</code> in the array of keys returned by
- * {@link #getOrderedKeys()}.
+ * Returns the Ranking for the notification with the given key.
*
- * @return The rank of the notification with the given key; -1 when the
- * given key is unknown.
+ * @return the Ranking of the notification with the given key;
+ * <code>null</code> when the key is unknown.
*/
- public int getRank(String key) {
- // TODO: Optimize.
- String[] orderedKeys = mRankingUpdate.getOrderedKeys();
- for (int i = 0; i < orderedKeys.length; i++) {
- if (orderedKeys[i].equals(key)) {
- return i;
+ public Ranking getRanking(String key) {
+ synchronized (mRankingCache) {
+ if (!mRankingCacheInitialized) {
+ initializeRankingCache();
+ mRankingCacheInitialized = true;
}
}
- return -1;
+ return mRankingCache.get(key);
}
- /**
- * Returns whether the notification with the given key was intercepted
- * by &quot;Do not disturb&quot;.
- */
- public boolean isInterceptedByDoNotDisturb(String key) {
- // TODO: Optimize.
- for (String interceptedKey : mRankingUpdate.getDndInterceptedKeys()) {
- if (interceptedKey.equals(key)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns whether the notification with the given key is an ambient
- * notification, that is a notification that doesn't require the user's
- * immediate attention.
- */
- public boolean isAmbient(String key) {
- // TODO: Optimize.
- int firstAmbientIndex = mRankingUpdate.getFirstAmbientIndex();
- if (firstAmbientIndex < 0) {
- return false;
- }
+ private void initializeRankingCache() {
String[] orderedKeys = mRankingUpdate.getOrderedKeys();
- for (int i = firstAmbientIndex; i < orderedKeys.length; i++) {
- if (orderedKeys[i].equals(key)) {
- return true;
+ int firstAmbientIndex = mRankingUpdate.getFirstAmbientIndex();
+ for (int i = 0; i < orderedKeys.length; i++) {
+ String key = orderedKeys[i];
+ boolean isAmbient = firstAmbientIndex > -1 && firstAmbientIndex <= i;
+ boolean isInterceptedByDnd = false;
+ // TODO: Optimize.
+ for (String s : mRankingUpdate.getDndInterceptedKeys()) {
+ if (s.equals(key)) {
+ isInterceptedByDnd = true;
+ break;
+ }
}
+ mRankingCache.put(key, new Ranking(key, i, isAmbient, isInterceptedByDnd));
}
- return false;
}
// ----------- Parcelable
@@ -453,16 +541,16 @@ public abstract class NotificationListenerService extends Service {
dest.writeParcelable(mRankingUpdate, flags);
}
- public static final Creator<Ranking> CREATOR = new Creator<Ranking>() {
+ public static final Creator<RankingMap> CREATOR = new Creator<RankingMap>() {
@Override
- public Ranking createFromParcel(Parcel source) {
+ public RankingMap createFromParcel(Parcel source) {
NotificationRankingUpdate rankingUpdate = source.readParcelable(null);
- return new Ranking(rankingUpdate);
+ return new RankingMap(rankingUpdate);
}
@Override
- public Ranking[] newArray(int size) {
- return new Ranking[size];
+ public RankingMap[] newArray(int size) {
+ return new RankingMap[size];
}
};
}
diff --git a/core/java/android/service/trust/TrustAgentService.java b/core/java/android/service/trust/TrustAgentService.java
index b3fb560b9dab..ed835e4e6d4a 100644
--- a/core/java/android/service/trust/TrustAgentService.java
+++ b/core/java/android/service/trust/TrustAgentService.java
@@ -17,7 +17,7 @@
package android.service.trust;
import android.Manifest;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.annotation.SdkConstant;
import android.app.Service;
import android.content.ComponentName;
@@ -60,7 +60,7 @@ import android.util.Slog;
*
* @hide
*/
-@PrivateApi
+@SystemApi
public class TrustAgentService extends Service {
private final String TAG = TrustAgentService.class.getSimpleName() +
"[" + getClass().getSimpleName() + "]";
diff --git a/core/java/android/transition/SidePropagation.java b/core/java/android/transition/SidePropagation.java
index 5d38ac85f699..623cdd18ee44 100644
--- a/core/java/android/transition/SidePropagation.java
+++ b/core/java/android/transition/SidePropagation.java
@@ -18,6 +18,7 @@ package android.transition;
import android.graphics.Rect;
import android.util.FloatMath;
import android.util.Log;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -32,38 +33,19 @@ import android.view.ViewGroup;
public class SidePropagation extends VisibilityPropagation {
private static final String TAG = "SlidePropagation";
- /**
- * Transition propagates relative to the distance of the left side of the scene.
- */
- public static final int LEFT = Slide.LEFT;
-
- /**
- * Transition propagates relative to the distance of the top of the scene.
- */
- public static final int TOP = Slide.TOP;
-
- /**
- * Transition propagates relative to the distance of the right side of the scene.
- */
- public static final int RIGHT = Slide.RIGHT;
-
- /**
- * Transition propagates relative to the distance of the bottom of the scene.
- */
- public static final int BOTTOM = Slide.BOTTOM;
-
private float mPropagationSpeed = 3.0f;
- private int mSide = BOTTOM;
+ private int mSide = Gravity.BOTTOM;
/**
* Sets the side that is used to calculate the transition propagation. If the transitioning
* View is visible in the start of the transition, then it will transition sooner when
* closer to the side and later when farther. If the view is not visible in the start of
* the transition, then it will transition later when closer to the side and sooner when
- * farther from the edge. The default is {@link #BOTTOM}.
+ * farther from the edge. The default is {@link Gravity#BOTTOM}.
*
* @param side The side that is used to calculate the transition propagation. Must be one of
- * {@link #LEFT}, {@link #TOP}, {@link #RIGHT}, or {@link #BOTTOM}.
+ * {@link Gravity#LEFT}, {@link Gravity#TOP}, {@link Gravity#RIGHT}, or
+ * {@link Gravity#BOTTOM}.
*/
public void setSide(int side) {
mSide = side;
@@ -141,16 +123,16 @@ public class SidePropagation extends VisibilityPropagation {
int left, int top, int right, int bottom) {
int distance = 0;
switch (mSide) {
- case LEFT:
+ case Gravity.LEFT:
distance = right - viewX + Math.abs(epicenterY - viewY);
break;
- case TOP:
+ case Gravity.TOP:
distance = bottom - viewY + Math.abs(epicenterX - viewX);
break;
- case RIGHT:
+ case Gravity.RIGHT:
distance = viewX - left + Math.abs(epicenterY - viewY);
break;
- case BOTTOM:
+ case Gravity.BOTTOM:
distance = viewY - top + Math.abs(epicenterX - viewX);
break;
}
@@ -159,8 +141,8 @@ public class SidePropagation extends VisibilityPropagation {
private int getMaxDistance(ViewGroup sceneRoot) {
switch (mSide) {
- case LEFT:
- case RIGHT:
+ case Gravity.LEFT:
+ case Gravity.RIGHT:
return sceneRoot.getWidth();
default:
return sceneRoot.getHeight();
diff --git a/core/java/android/transition/Slide.java b/core/java/android/transition/Slide.java
index 0ff8ddd4d1f9..8269258eaad8 100644
--- a/core/java/android/transition/Slide.java
+++ b/core/java/android/transition/Slide.java
@@ -24,6 +24,7 @@ import android.animation.ValueAnimator;
import android.graphics.Rect;
import android.util.Log;
import android.util.Property;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
@@ -41,35 +42,9 @@ import android.view.animation.DecelerateInterpolator;
public class Slide extends Visibility {
private static final String TAG = "Slide";
- /**
- * Move Views in or out of the left edge of the scene.
- * @see #setSlideEdge(int)
- */
- public static final int LEFT = 0;
-
- /**
- * Move Views in or out of the top edge of the scene.
- * @see #setSlideEdge(int)
- */
- public static final int TOP = 1;
-
- /**
- * Move Views in or out of the right edge of the scene.
- * @see #setSlideEdge(int)
- */
- public static final int RIGHT = 2;
-
- /**
- * Move Views in or out of the bottom edge of the scene. This is the
- * default slide direction.
- * @see #setSlideEdge(int)
- */
- public static final int BOTTOM = 3;
-
private static final TimeInterpolator sDecelerate = new DecelerateInterpolator();
private static final TimeInterpolator sAccelerate = new AccelerateInterpolator();
- private int[] mTempLoc = new int[2];
private CalculateSlide mSlideCalculator = sCalculateBottom;
private interface CalculateSlide {
@@ -136,11 +111,11 @@ public class Slide extends Visibility {
};
/**
- * Constructor using the default {@link android.transition.Slide#BOTTOM}
+ * Constructor using the default {@link Gravity#BOTTOM}
* slide edge direction.
*/
public Slide() {
- setSlideEdge(BOTTOM);
+ setSlideEdge(Gravity.BOTTOM);
}
/**
@@ -152,20 +127,22 @@ public class Slide extends Visibility {
/**
* Change the edge that Views appear and disappear from.
- * @param slideEdge The edge of the scene to use for Views appearing and disappearing.
+ * @param slideEdge The edge of the scene to use for Views appearing and disappearing. One of
+ * {@link android.view.Gravity#LEFT}, {@link android.view.Gravity#TOP},
+ * {@link android.view.Gravity#RIGHT}, {@link android.view.Gravity#BOTTOM}.
*/
public void setSlideEdge(int slideEdge) {
switch (slideEdge) {
- case LEFT:
+ case Gravity.LEFT:
mSlideCalculator = sCalculateLeft;
break;
- case TOP:
+ case Gravity.TOP:
mSlideCalculator = sCalculateTop;
break;
- case RIGHT:
+ case Gravity.RIGHT:
mSlideCalculator = sCalculateRight;
break;
- case BOTTOM:
+ case Gravity.BOTTOM:
mSlideCalculator = sCalculateBottom;
break;
default:
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index 9a7009928186..e9c2bba0c3a7 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -1763,7 +1763,7 @@ public abstract class Transition implements Cloneable {
/**
* Sets the callback to use to find the epicenter of a Transition. A null value indicates
- * that there is no epicenter in the Transition and getEpicenter() will return null.
+ * that there is no epicenter in the Transition and onGetEpicenter() will return null.
* Transitions like {@link android.transition.Explode} use a point or Rect to orient
* the direction of travel. This is called the epicenter of the Transition and is
* typically centered on a touched View. The
@@ -1799,7 +1799,7 @@ public abstract class Transition implements Cloneable {
if (mEpicenterCallback == null) {
return null;
}
- return mEpicenterCallback.getEpicenter(this);
+ return mEpicenterCallback.onGetEpicenter(this);
}
/**
@@ -2112,6 +2112,6 @@ public abstract class Transition implements Cloneable {
* @return The Rect region of the epicenter of <code>transition</code> or null if
* there is no epicenter.
*/
- public abstract Rect getEpicenter(Transition transition);
+ public abstract Rect onGetEpicenter(Transition transition);
}
}
diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java
index f4b562f58808..5b7c7379d093 100644
--- a/core/java/android/transition/TransitionInflater.java
+++ b/core/java/android/transition/TransitionInflater.java
@@ -22,6 +22,7 @@ import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.util.AttributeSet;
import android.util.Xml;
+import android.view.Gravity;
import android.view.InflateException;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
@@ -208,7 +209,7 @@ public class TransitionInflater {
private Slide createSlideTransition(AttributeSet attrs) {
TypedArray a = mContext.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.Slide);
- int edge = a.getInt(com.android.internal.R.styleable.Slide_slideEdge, Slide.BOTTOM);
+ int edge = a.getInt(com.android.internal.R.styleable.Slide_slideEdge, Gravity.BOTTOM);
Slide slide = new Slide(edge);
a.recycle();
return slide;
diff --git a/core/java/android/util/Range.java b/core/java/android/util/Range.java
index d7e8cf038929..3907e7708ace 100644
--- a/core/java/android/util/Range.java
+++ b/core/java/android/util/Range.java
@@ -97,6 +97,27 @@ public final class Range<T extends Comparable<? super T>> {
}
/**
+ * Checks if the {@code value} is within the bounds of this range.
+ *
+ * <p>A value is considered to be within this range if it's {@code >=} then
+ * the lower endpoint <i>and</i> {@code <=} to the upper endpoint (using the {@link Comparable}
+ * interface.</p>
+ *
+ * @param value a non-{@code null} {@code T} reference
+ * @return {@code true} if the value is within this inclusive range, {@code false} otherwise
+ *
+ * @throws NullPointerException if {@code value} was {@code null}
+ */
+ public boolean inRange(T value) {
+ checkNotNull(value, "value must not be null");
+
+ boolean gteLower = value.compareTo(mLower) >= 0;
+ boolean lteUpper = value.compareTo(mUpper) <= 0;
+
+ return gteLower && lteUpper;
+ }
+
+ /**
* Compare two ranges for equality.
*
* <p>A range is considered equal if and only if both the lower and upper endpoints
@@ -105,16 +126,13 @@ public final class Range<T extends Comparable<? super T>> {
* @return {@code true} if the ranges are equal, {@code false} otherwise
*/
@Override
- public boolean equals(final Object obj) {
+ public boolean equals(Object obj) {
if (obj == null) {
return false;
- }
- if (this == obj) {
+ } else if (this == obj) {
return true;
- }
- if (obj instanceof Range) {
+ } else if (obj instanceof Range) {
@SuppressWarnings("rawtypes")
- final
Range other = (Range) obj;
return mLower.equals(other.mLower) && mUpper.equals(other.mUpper);
}
diff --git a/core/java/android/util/Rational.java b/core/java/android/util/Rational.java
index 8d4c67fafd42..9952859aea72 100644
--- a/core/java/android/util/Rational.java
+++ b/core/java/android/util/Rational.java
@@ -15,29 +15,88 @@
*/
package android.util;
+import static com.android.internal.util.Preconditions.*;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+
/**
* <p>An immutable data type representation a rational number.</p>
*
* <p>Contains a pair of {@code int}s representing the numerator and denominator of a
* Rational number. </p>
*/
-public final class Rational {
+public final class Rational extends Number implements Comparable<Rational> {
+ /**
+ * Constant for the <em>Not-a-Number (NaN)</em> value of the {@code Rational} type.
+ *
+ * <p>A {@code NaN} value is considered to be equal to itself (that is {@code NaN.equals(NaN)}
+ * will return {@code true}; it is always greater than any non-{@code NaN} value (that is
+ * {@code NaN.compareTo(notNaN)} will return a number greater than {@code 0}).</p>
+ *
+ * <p>Equivalent to constructing a new rational with both the numerator and denominator
+ * equal to {@code 0}.</p>
+ */
+ public static final Rational NaN = new Rational(0, 0);
+
+ /**
+ * Constant for the positive infinity value of the {@code Rational} type.
+ *
+ * <p>Equivalent to constructing a new rational with a positive numerator and a denominator
+ * equal to {@code 0}.</p>
+ */
+ public static final Rational POSITIVE_INFINITY = new Rational(1, 0);
+
+ /**
+ * Constant for the negative infinity value of the {@code Rational} type.
+ *
+ * <p>Equivalent to constructing a new rational with a negative numerator and a denominator
+ * equal to {@code 0}.</p>
+ */
+ public static final Rational NEGATIVE_INFINITY = new Rational(-1, 0);
+
+ /**
+ * Constant for the zero value of the {@code Rational} type.
+ *
+ * <p>Equivalent to constructing a new rational with a numerator equal to {@code 0} and
+ * any non-zero denominator.</p>
+ */
+ public static final Rational ZERO = new Rational(0, 1);
+
+ /**
+ * Unique version number per class to be compliant with {@link java.io.Serializable}.
+ *
+ * <p>Increment each time the fields change in any way.</p>
+ */
+ private static final long serialVersionUID = 1L;
+
+ /*
+ * Do not change the order of these fields or add new instance fields to maintain the
+ * Serializable compatibility across API revisions.
+ */
private final int mNumerator;
private final int mDenominator;
/**
- * <p>Create a Rational with a given numerator and denominator.</p>
+ * <p>Create a {@code Rational} with a given numerator and denominator.</p>
*
* <p>The signs of the numerator and the denominator may be flipped such that the denominator
- * is always positive.</p>
+ * is always positive. Both the numerator and denominator will be converted to their reduced
+ * forms (see {@link #equals} for more details).</p>
*
- * <p>A rational value with a 0-denominator may be constructed, but will have similar semantics
- * as float {@code NaN} and {@code INF} values. For {@code NaN},
- * both {@link #getNumerator} and {@link #getDenominator} functions will return 0. For
- * positive or negative {@code INF}, only the {@link #getDenominator} will return 0.</p>
+ * <p>For example,
+ * <ul>
+ * <li>a rational of {@code 2/4} will be reduced to {@code 1/2}.
+ * <li>a rational of {@code 1/-1} will be flipped to {@code -1/1}
+ * <li>a rational of {@code 5/0} will be reduced to {@code 1/0}
+ * <li>a rational of {@code 0/5} will be reduced to {@code 0/1}
+ * </ul>
+ * </p>
*
* @param numerator the numerator of the rational
* @param denominator the denominator of the rational
+ *
+ * @see #equals
*/
public Rational(int numerator, int denominator) {
@@ -46,32 +105,100 @@ public final class Rational {
denominator = -denominator;
}
- mNumerator = numerator;
- mDenominator = denominator;
+ // Convert to reduced form
+ if (denominator == 0 && numerator > 0) {
+ mNumerator = 1; // +Inf
+ mDenominator = 0;
+ } else if (denominator == 0 && numerator < 0) {
+ mNumerator = -1; // -Inf
+ mDenominator = 0;
+ } else if (denominator == 0 && numerator == 0) {
+ mNumerator = 0; // NaN
+ mDenominator = 0;
+ } else if (numerator == 0) {
+ mNumerator = 0;
+ mDenominator = 1;
+ } else {
+ int gcd = gcd(numerator, denominator);
+
+ mNumerator = numerator / gcd;
+ mDenominator = denominator / gcd;
+ }
}
/**
* Gets the numerator of the rational.
+ *
+ * <p>The numerator will always return {@code 1} if this rational represents
+ * infinity (that is, the denominator is {@code 0}).</p>
*/
public int getNumerator() {
- if (mDenominator == 0) {
- return 0;
- }
return mNumerator;
}
/**
* Gets the denominator of the rational
+ *
+ * <p>The denominator may return {@code 0}, in which case the rational may represent
+ * positive infinity (if the numerator was positive), negative infinity (if the numerator
+ * was negative), or {@code NaN} (if the numerator was {@code 0}).</p>
+ *
+ * <p>The denominator will always return {@code 1} if the numerator is {@code 0}.
*/
public int getDenominator() {
return mDenominator;
}
- private boolean isNaN() {
+ /**
+ * Indicates whether this rational is a <em>Not-a-Number (NaN)</em> value.
+ *
+ * <p>A {@code NaN} value occurs when both the numerator and the denominator are {@code 0}.</p>
+ *
+ * @return {@code true} if this rational is a <em>Not-a-Number (NaN)</em> value;
+ * {@code false} if this is a (potentially infinite) number value
+ */
+ public boolean isNaN() {
return mDenominator == 0 && mNumerator == 0;
}
- private boolean isInf() {
+ /**
+ * Indicates whether this rational represents an infinite value.
+ *
+ * <p>An infinite value occurs when the denominator is {@code 0} (but the numerator is not).</p>
+ *
+ * @return {@code true} if this rational is a (positive or negative) infinite value;
+ * {@code false} if this is a finite number value (or {@code NaN})
+ */
+ public boolean isInfinite() {
+ return mNumerator != 0 && mDenominator == 0;
+ }
+
+ /**
+ * Indicates whether this rational represents a finite value.
+ *
+ * <p>A finite value occurs when the denominator is not {@code 0}; in other words
+ * the rational is neither infinity or {@code NaN}.</p>
+ *
+ * @return {@code true} if this rational is a (positive or negative) infinite value;
+ * {@code false} if this is a finite number value (or {@code NaN})
+ */
+ public boolean isFinite() {
+ return mDenominator != 0;
+ }
+
+ /**
+ * Indicates whether this rational represents a zero value.
+ *
+ * <p>A zero value is a {@link #isFinite finite} rational with a numerator of {@code 0}.</p>
+ *
+ * @return {@code true} if this rational is finite zero value;
+ * {@code false} otherwise
+ */
+ public boolean isZero() {
+ return isFinite() && mNumerator == 0;
+ }
+
+ private boolean isPosInf() {
return mDenominator == 0 && mNumerator > 0;
}
@@ -82,12 +209,12 @@ public final class Rational {
/**
* <p>Compare this Rational to another object and see if they are equal.</p>
*
- * <p>A Rational object can only be equal to another Rational object (comparing against any other
- * type will return false).</p>
+ * <p>A Rational object can only be equal to another Rational object (comparing against any
+ * other type will return {@code false}).</p>
*
* <p>A Rational object is considered equal to another Rational object if and only if one of
- * the following holds</p>:
- * <ul><li>Both are NaN</li>
+ * the following holds:</p>
+ * <ul><li>Both are {@code NaN}</li>
* <li>Both are infinities of the same sign</li>
* <li>Both have the same numerator and denominator in their reduced form</li>
* </ul>
@@ -96,12 +223,12 @@ public final class Rational {
* denominator by their greatest common divisor.</p>
*
* <pre>{@code
- * (new Rational(1, 2)).equals(new Rational(1, 2)) == true // trivially true
- * (new Rational(2, 3)).equals(new Rational(1, 2)) == false // trivially false
- * (new Rational(1, 2)).equals(new Rational(2, 4)) == true // true after reduction
- * (new Rational(0, 0)).equals(new Rational(0, 0)) == true // NaN.equals(NaN)
- * (new Rational(1, 0)).equals(new Rational(5, 0)) == true // both are +infinity
- * (new Rational(1, 0)).equals(new Rational(-1, 0)) == false // +infinity != -infinity
+ * (new Rational(1, 2)).equals(new Rational(1, 2)) == true // trivially true
+ * (new Rational(2, 3)).equals(new Rational(1, 2)) == false // trivially false
+ * (new Rational(1, 2)).equals(new Rational(2, 4)) == true // true after reduction
+ * (new Rational(0, 0)).equals(new Rational(0, 0)) == true // NaN.equals(NaN)
+ * (new Rational(1, 0)).equals(new Rational(5, 0)) == true // both are +infinity
+ * (new Rational(1, 0)).equals(new Rational(-1, 0)) == false // +infinity != -infinity
* }</pre>
*
* @param obj a reference to another object
@@ -110,41 +237,31 @@ public final class Rational {
*/
@Override
public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- } else if (obj instanceof Rational) {
- Rational other = (Rational) obj;
- if (mDenominator == 0 || other.mDenominator == 0) {
- if (isNaN() && other.isNaN()) {
- return true;
- } else if (isInf() && other.isInf() || isNegInf() && other.isNegInf()) {
- return true;
- } else {
- return false;
- }
- } else if (mNumerator == other.mNumerator && mDenominator == other.mDenominator) {
- return true;
- } else {
- int thisGcd = gcd();
- int otherGcd = other.gcd();
-
- int thisNumerator = mNumerator / thisGcd;
- int thisDenominator = mDenominator / thisGcd;
-
- int otherNumerator = other.mNumerator / otherGcd;
- int otherDenominator = other.mDenominator / otherGcd;
-
- return (thisNumerator == otherNumerator && thisDenominator == otherDenominator);
- }
- }
- return false;
+ return obj instanceof Rational && equals((Rational) obj);
+ }
+
+ private boolean equals(Rational other) {
+ return (mNumerator == other.mNumerator && mDenominator == other.mDenominator);
}
+ /**
+ * Return a string representation of this rational, e.g. {@code "1/2"}.
+ *
+ * <p>The following rules of conversion apply:
+ * <ul>
+ * <li>{@code NaN} values will return {@code "NaN"}
+ * <li>Positive infinity values will return {@code "Infinity"}
+ * <li>Negative infinity values will return {@code "-Infinity"}
+ * <li>All other values will return {@code "numerator/denominator"} where {@code numerator}
+ * and {@code denominator} are substituted with the appropriate numerator and denominator
+ * values.
+ * </ul></p>
+ */
@Override
public String toString() {
if (isNaN()) {
return "NaN";
- } else if (isInf()) {
+ } else if (isPosInf()) {
return "Infinity";
} else if (isNegInf()) {
return "-Infinity";
@@ -160,7 +277,8 @@ public final class Rational {
* @hide
*/
public float toFloat() {
- return (float) mNumerator / (float) mDenominator;
+ // TODO: remove this duplicate function (used in CTS and the shim)
+ return floatValue();
}
/**
@@ -177,20 +295,24 @@ public final class Rational {
/**
* Calculates the greatest common divisor using Euclid's algorithm.
*
+ * <p><em>Visible for testing only.</em></p>
+ *
+ * @param numerator the numerator in a fraction
+ * @param denominator the denominator in a fraction
+ *
* @return An int value representing the gcd. Always positive.
* @hide
*/
- public int gcd() {
- /**
+ public static int gcd(int numerator, int denominator) {
+ /*
* Non-recursive implementation of Euclid's algorithm:
*
* gcd(a, 0) := a
* gcd(a, b) := gcd(b, a mod b)
*
*/
-
- int a = mNumerator;
- int b = mDenominator;
+ int a = numerator;
+ int b = denominator;
while (b != 0) {
int oldB = b;
@@ -201,4 +323,221 @@ public final class Rational {
return Math.abs(a);
}
+
+ /**
+ * Returns the value of the specified number as a {@code double}.
+ *
+ * <p>The {@code double} is calculated by converting both the numerator and denominator
+ * to a {@code double}; then returning the result of dividing the numerator by the
+ * denominator.</p>
+ *
+ * @return the divided value of the numerator and denominator as a {@code double}.
+ */
+ @Override
+ public double doubleValue() {
+ double num = mNumerator;
+ double den = mDenominator;
+
+ return num / den;
+ }
+
+ /**
+ * Returns the value of the specified number as a {@code float}.
+ *
+ * <p>The {@code float} is calculated by converting both the numerator and denominator
+ * to a {@code float}; then returning the result of dividing the numerator by the
+ * denominator.</p>
+ *
+ * @return the divided value of the numerator and denominator as a {@code float}.
+ */
+ @Override
+ public float floatValue() {
+ float num = mNumerator;
+ float den = mDenominator;
+
+ return num / den;
+ }
+
+ /**
+ * Returns the value of the specified number as a {@code int}.
+ *
+ * <p>{@link #isInfinite Finite} rationals are converted to an {@code int} value
+ * by dividing the numerator by the denominator; conversion for non-finite values happens
+ * identically to casting a floating point value to an {@code int}, in particular:
+ *
+ * <p>
+ * <ul>
+ * <li>Positive infinity saturates to the largest maximum integer
+ * {@link Integer#MAX_VALUE}</li>
+ * <li>Negative infinity saturates to the smallest maximum integer
+ * {@link Integer#MIN_VALUE}</li>
+ * <li><em>Not-A-Number (NaN)</em> returns {@code 0}.</li>
+ * </ul>
+ * </p>
+ *
+ * @return the divided value of the numerator and denominator as a {@code int}.
+ */
+ @Override
+ public int intValue() {
+ // Mimic float to int conversion rules from JLS 5.1.3
+
+ if (isPosInf()) {
+ return Integer.MAX_VALUE;
+ } else if (isNegInf()) {
+ return Integer.MIN_VALUE;
+ } else if (isNaN()) {
+ return 0;
+ } else { // finite
+ return mNumerator / mDenominator;
+ }
+ }
+
+ /**
+ * Returns the value of the specified number as a {@code long}.
+ *
+ * <p>{@link #isInfinite Finite} rationals are converted to an {@code long} value
+ * by dividing the numerator by the denominator; conversion for non-finite values happens
+ * identically to casting a floating point value to a {@code long}, in particular:
+ *
+ * <p>
+ * <ul>
+ * <li>Positive infinity saturates to the largest maximum long
+ * {@link Long#MAX_VALUE}</li>
+ * <li>Negative infinity saturates to the smallest maximum long
+ * {@link Long#MIN_VALUE}</li>
+ * <li><em>Not-A-Number (NaN)</em> returns {@code 0}.</li>
+ * </ul>
+ * </p>
+ *
+ * @return the divided value of the numerator and denominator as a {@code long}.
+ */
+ @Override
+ public long longValue() {
+ // Mimic float to long conversion rules from JLS 5.1.3
+
+ if (isPosInf()) {
+ return Long.MAX_VALUE;
+ } else if (isNegInf()) {
+ return Long.MIN_VALUE;
+ } else if (isNaN()) {
+ return 0;
+ } else { // finite
+ return mNumerator / mDenominator;
+ }
+ }
+
+ /**
+ * Returns the value of the specified number as a {@code short}.
+ *
+ * <p>{@link #isInfinite Finite} rationals are converted to a {@code short} value
+ * identically to {@link #intValue}; the {@code int} result is then truncated to a
+ * {@code short} before returning the value.</p>
+ *
+ * @return the divided value of the numerator and denominator as a {@code short}.
+ */
+ @Override
+ public short shortValue() {
+ return (short) intValue();
+ }
+
+ /**
+ * Compare this rational to the specified rational to determine their natural order.
+ *
+ * <p>{@link #NaN} is considered to be equal to itself and greater than all other
+ * {@code Rational} values. Otherwise, if the objects are not {@link #equals equal}, then
+ * the following rules apply:</p>
+ *
+ * <ul>
+ * <li>Positive infinity is greater than any other finite number (or negative infinity)
+ * <li>Negative infinity is less than any other finite number (or positive infinity)
+ * <li>The finite number represented by this rational is checked numerically
+ * against the other finite number by converting both rationals to a common denominator multiple
+ * and comparing their numerators.
+ * </ul>
+ *
+ * @param another the rational to be compared
+ *
+ * @return a negative integer, zero, or a positive integer as this object is less than,
+ * equal to, or greater than the specified rational.
+ *
+ * @throws NullPointerException if {@code another} was {@code null}
+ */
+ @Override
+ public int compareTo(Rational another) {
+ checkNotNull(another, "another must not be null");
+
+ if (equals(another)) {
+ return 0;
+ } else if (isNaN()) { // NaN is greater than the other non-NaN value
+ return 1;
+ } else if (another.isNaN()) { // the other NaN is greater than this non-NaN value
+ return -1;
+ } else if (isPosInf() || another.isNegInf()) {
+ return 1; // positive infinity is greater than any non-NaN/non-posInf value
+ } else if (isNegInf() || another.isPosInf()) {
+ return -1; // negative infinity is less than any non-NaN/non-negInf value
+ }
+
+ // else both this and another are finite numbers
+
+ // make the denominators the same, then compare numerators
+ long thisNumerator = ((long)mNumerator) * another.mDenominator; // long to avoid overflow
+ long otherNumerator = ((long)another.mNumerator) * mDenominator; // long to avoid overflow
+
+ // avoid underflow from subtraction by doing comparisons
+ if (thisNumerator < otherNumerator) {
+ return -1;
+ } else if (thisNumerator > otherNumerator) {
+ return 1;
+ } else {
+ // This should be covered by #equals, but have this code path just in case
+ return 0;
+ }
+ }
+
+ /*
+ * Serializable implementation.
+ *
+ * The following methods are omitted:
+ * >> writeObject - the default is sufficient (field by field serialization)
+ * >> readObjectNoData - the default is sufficient (0s for both fields is a NaN)
+ */
+
+ /**
+ * writeObject with default serialized form - guards against
+ * deserializing non-reduced forms of the rational.
+ *
+ * @throws InvalidObjectException if the invariants were violated
+ */
+ private void readObject(java.io.ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
+
+ /*
+ * Guard against trying to deserialize illegal values (in this case, ones
+ * that don't have a standard reduced form).
+ *
+ * - Non-finite values must be one of [0, 1], [0, 0], [0, 1], [0, -1]
+ * - Finite values must always have their greatest common divisor as 1
+ */
+
+ if (mNumerator == 0) { // either zero or NaN
+ if (mDenominator == 1 || mDenominator == 0) {
+ return;
+ }
+ throw new InvalidObjectException(
+ "Rational must be deserialized from a reduced form for zero values");
+ } else if (mDenominator == 0) { // either positive or negative infinity
+ if (mNumerator == 1 || mNumerator == -1) {
+ return;
+ }
+ throw new InvalidObjectException(
+ "Rational must be deserialized from a reduced form for infinity values");
+ } else { // finite value
+ if (gcd(mNumerator, mDenominator) > 1) {
+ throw new InvalidObjectException(
+ "Rational must be deserialized from a reduced form for finite values");
+ }
+ }
+ }
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index a52ccdfef13e..ae59bbc636ff 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -30,6 +30,7 @@ import android.view.IApplicationToken;
import android.view.IOnKeyguardExitResult;
import android.view.IRotationWatcher;
import android.view.IWindowSession;
+import android.view.IWindowSessionCallback;
import android.view.KeyEvent;
import android.view.InputEvent;
import android.view.MagnificationSpec;
@@ -56,7 +57,7 @@ interface IWindowManager
boolean stopViewServer(); // Transaction #2
boolean isViewServerRunning(); // Transaction #3
- IWindowSession openSession(in IInputMethodClient client,
+ IWindowSession openSession(in IWindowSessionCallback callback, in IInputMethodClient client,
in IInputContext inputContext);
boolean inputMethodClientHasFocus(IInputMethodClient client);
@@ -130,6 +131,8 @@ interface IWindowManager
void setAnimationScale(int which, float scale);
void setAnimationScales(in float[] scales);
+ float getCurrentAnimatorScale();
+
// For testing
void setInTouchMode(boolean showFocus);
diff --git a/core/java/android/view/IWindowSessionCallback.aidl b/core/java/android/view/IWindowSessionCallback.aidl
new file mode 100644
index 000000000000..88931ce000a5
--- /dev/null
+++ b/core/java/android/view/IWindowSessionCallback.aidl
@@ -0,0 +1,27 @@
+/*
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.view;
+
+/**
+ * Callback to active sessions of the window manager
+ *
+ * {@hide}
+ */
+oneway interface IWindowSessionCallback
+{
+ void onAnimatorScaleChanged(float scale);
+}
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 11db9966cdb7..72b9d3ec1394 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -74,7 +74,8 @@ public class ThreadedRenderer extends HardwareRenderer {
private boolean mProfilingEnabled;
ThreadedRenderer(boolean translucent) {
- AtlasInitializer.sInstance.init();
+ // Temporarily disabled
+ //AtlasInitializer.sInstance.init();
long rootNodePtr = nCreateRootRenderNode();
mRootNode = RenderNode.adopt(rootNodePtr);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index c7c007ec001f..117fe8e9d6a0 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10497,13 +10497,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
setTranslationZ(z - getElevation());
}
+ /**
+ * The base elevation of this view relative to its parent, in pixels.
+ *
+ * @return The base depth position of the view, in pixels.
+ */
@ViewDebug.ExportedProperty(category = "drawing")
public float getElevation() {
return mRenderNode.getElevation();
}
/**
- * Sets the base depth location of this view.
+ * Sets the base elevation of this view, in pixels.
*
* @attr ref android.R.styleable#View_elevation
*/
@@ -10609,24 +10614,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/**
- * Returns a ValueAnimator which can animate a clipping circle.
- * <p>
- * The View will be clipped to the animating circle.
- * <p>
- * Any shadow cast by the View will respect the circular clip from this animator.
- *
- * @param centerX The x coordinate of the center of the animating circle.
- * @param centerY The y coordinate of the center of the animating circle.
- * @param startRadius The starting radius of the animating circle.
- * @param endRadius The ending radius of the animating circle.
- */
- public final ValueAnimator createRevealAnimator(int centerX, int centerY,
- float startRadius, float endRadius) {
- return RevealAnimator.ofRevealCircle(this, centerX, centerY,
- startRadius, endRadius, false);
- }
-
- /**
* Returns a ValueAnimator which can animate a clearing circle.
* <p>
* The View is prevented from drawing within the circle, so the content
diff --git a/core/java/android/view/ViewAnimationUtils.java b/core/java/android/view/ViewAnimationUtils.java
new file mode 100644
index 000000000000..3854f34faeb2
--- /dev/null
+++ b/core/java/android/view/ViewAnimationUtils.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.animation.RevealAnimator;
+import android.animation.ValueAnimator;
+
+/**
+ * Defines common utilities for working with View's animations.
+ *
+ */
+public class ViewAnimationUtils {
+ private ViewAnimationUtils() {}
+ /**
+ * Returns a ValueAnimator which can animate a clipping circle.
+ *
+ * Any shadow cast by the View will respect the circular clip from this animator.
+ *
+ * @param view The View will be clipped to the animating circle.
+ * @param centerX The x coordinate of the center of the animating circle.
+ * @param centerY The y coordinate of the center of the animating circle.
+ * @param startRadius The starting radius of the animating circle.
+ * @param endRadius The ending radius of the animating circle.
+ */
+ public static final ValueAnimator createCircularReveal(View view,
+ int centerX, int centerY, float startRadius, float endRadius) {
+ return RevealAnimator.ofRevealCircle(view, centerX, centerY,
+ startRadius, endRadius, false);
+ }
+}
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index b4779f4d91d6..0ebf2e18f184 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -147,9 +147,14 @@ public final class WindowManagerGlobal {
InputMethodManager imm = InputMethodManager.getInstance();
IWindowManager windowManager = getWindowManagerService();
sWindowSession = windowManager.openSession(
+ new IWindowSessionCallback.Stub() {
+ @Override
+ public void onAnimatorScaleChanged(float scale) {
+ ValueAnimator.setDurationScale(scale);
+ }
+ },
imm.getClient(), imm.getInputContext());
- float animatorScale = windowManager.getAnimationScale(2);
- ValueAnimator.setDurationScale(animatorScale);
+ ValueAnimator.setDurationScale(windowManager.getCurrentAnimatorScale());
} catch (RemoteException e) {
Log.e(TAG, "Failed to open window session", e);
}
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index 5b9372d13b8f..4748402f41ff 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -225,17 +225,11 @@ public final class AccessibilityInteractionClient
try {
IAccessibilityServiceConnection connection = getConnection(connectionId);
if (connection != null) {
- List<AccessibilityWindowInfo> windows = sAccessibilityCache.getWindows();
- if (windows != null) {
- if (DEBUG) {
- Log.i(LOG_TAG, "Window cache hit");
- }
- return windows;
- }
- if (DEBUG) {
- Log.i(LOG_TAG, "Window cache miss");
- }
- windows = connection.getWindows();
+ // The system is just sending data for windows that we introspected
+ // and changed but not ones that appeared, so we have to always call
+ // into the system process. This is less expensice as opposed to
+ // sending all windows on every window change.
+ List<AccessibilityWindowInfo> windows = connection.getWindows();
if (windows != null) {
final int windowCount = windows.size();
for (int i = 0; i < windowCount; i++) {
diff --git a/core/java/android/widget/RadialTimePickerView.java b/core/java/android/widget/RadialTimePickerView.java
index bb74c44237be..883183e627ac 100644
--- a/core/java/android/widget/RadialTimePickerView.java
+++ b/core/java/android/widget/RadialTimePickerView.java
@@ -317,13 +317,13 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
final Resources res = getResources();
mAmPmUnselectedColor = a.getColor(R.styleable.TimePicker_amPmUnselectedBackgroundColor,
- res.getColor(R.color.timepicker_default_ampm_unselected_background_color_quantum));
+ res.getColor(R.color.timepicker_default_ampm_unselected_background_color_material));
mAmPmSelectedColor = a.getColor(R.styleable.TimePicker_amPmSelectedBackgroundColor,
- res.getColor(R.color.timepicker_default_ampm_selected_background_color_quantum));
+ res.getColor(R.color.timepicker_default_ampm_selected_background_color_material));
mAmPmTextColor = a.getColor(R.styleable.TimePicker_amPmTextColor,
- res.getColor(R.color.timepicker_default_text_color_quantum));
+ res.getColor(R.color.timepicker_default_text_color_material));
mTypeface = Typeface.create("sans-serif", Typeface.NORMAL);
@@ -338,7 +338,7 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
}
final int numbersTextColor = a.getColor(R.styleable.TimePicker_numbersTextColor,
- res.getColor(R.color.timepicker_default_text_color_quantum));
+ res.getColor(R.color.timepicker_default_text_color_material));
mPaint[HOURS] = new Paint();
mPaint[HOURS].setAntiAlias(true);
@@ -358,39 +358,39 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
mPaintSelector[HOURS][SELECTOR_CIRCLE].setAntiAlias(true);
mColorSelector[HOURS][SELECTOR_CIRCLE] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintSelector[HOURS][SELECTOR_DOT] = new Paint();
mPaintSelector[HOURS][SELECTOR_DOT].setAntiAlias(true);
mColorSelector[HOURS][SELECTOR_DOT] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintSelector[HOURS][SELECTOR_LINE] = new Paint();
mPaintSelector[HOURS][SELECTOR_LINE].setAntiAlias(true);
mPaintSelector[HOURS][SELECTOR_LINE].setStrokeWidth(2);
mColorSelector[HOURS][SELECTOR_LINE] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintSelector[MINUTES][SELECTOR_CIRCLE] = new Paint();
mPaintSelector[MINUTES][SELECTOR_CIRCLE].setAntiAlias(true);
mColorSelector[MINUTES][SELECTOR_CIRCLE] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintSelector[MINUTES][SELECTOR_DOT] = new Paint();
mPaintSelector[MINUTES][SELECTOR_DOT].setAntiAlias(true);
mColorSelector[MINUTES][SELECTOR_DOT] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintSelector[MINUTES][SELECTOR_LINE] = new Paint();
mPaintSelector[MINUTES][SELECTOR_LINE].setAntiAlias(true);
mPaintSelector[MINUTES][SELECTOR_LINE].setStrokeWidth(2);
mColorSelector[MINUTES][SELECTOR_LINE] = a.getColor(
R.styleable.TimePicker_numbersSelectorColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
mPaintAmPmText.setColor(mAmPmTextColor);
mPaintAmPmText.setTypeface(mTypeface);
@@ -403,11 +403,11 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
mPaintAmPmCircle[PM].setAntiAlias(true);
mPaintBackground.setColor(a.getColor(R.styleable.TimePicker_numbersBackgroundColor,
- res.getColor(R.color.timepicker_default_numbers_background_color_quantum)));
+ res.getColor(R.color.timepicker_default_numbers_background_color_material)));
mPaintBackground.setAntiAlias(true);
mPaintDisabled.setColor(a.getColor(R.styleable.TimePicker_disabledColor,
- res.getColor(R.color.timepicker_default_disabled_color_quantum)));
+ res.getColor(R.color.timepicker_default_disabled_color_material)));
mPaintDisabled.setAntiAlias(true);
if (DEBUG) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a4a9680e0995..43c8ddeab253 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -222,6 +222,7 @@ import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
* @attr ref android.R.styleable#TextView_imeActionLabel
* @attr ref android.R.styleable#TextView_imeActionId
* @attr ref android.R.styleable#TextView_editorExtras
+ * @attr ref android.R.styleable#TextView_elegantTextHeight
*/
@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
@@ -2637,6 +2638,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* metrics, and also increases top and bottom bounds to provide more space.
*
* @param elegant set the paint's elegant metrics flag.
+ *
+ * @attr ref android.R.styleable#TextView_elegantTextHeight
*/
public void setElegantTextHeight(boolean elegant) {
mTextPaint.setElegantTextHeight(elegant);
diff --git a/core/java/android/widget/TimePickerDelegate.java b/core/java/android/widget/TimePickerDelegate.java
index ba93ee560a56..bf3971cbbf4e 100644
--- a/core/java/android/widget/TimePickerDelegate.java
+++ b/core/java/android/widget/TimePickerDelegate.java
@@ -140,12 +140,12 @@ class TimePickerDelegate extends TimePicker.AbstractTimePickerDelegate implement
mSelectMinutes = res.getString(R.string.select_minutes);
mHeaderSelectedColor = a.getColor(R.styleable.TimePicker_headerSelectedTextColor,
- R.color.timepicker_default_selector_color_quantum);
+ R.color.timepicker_default_selector_color_material);
- mHeaderUnSelectedColor = getUnselectedColor(R.color.timepicker_default_text_color_quantum);
+ mHeaderUnSelectedColor = getUnselectedColor(R.color.timepicker_default_text_color_material);
if (mHeaderUnSelectedColor == -1) {
mHeaderUnSelectedColor = a.getColor(R.styleable.TimePicker_headerUnselectedTextColor,
- R.color.timepicker_default_text_color_quantum);
+ R.color.timepicker_default_text_color_material);
}
final int headerBackgroundColor = a.getColor(
@@ -295,7 +295,7 @@ class TimePickerDelegate extends TimePicker.AbstractTimePickerDelegate implement
TypedArray a = mContext.obtainStyledAttributes(TEXT_APPEARANCE_TIME_LABEL_ATTR);
final int textAppearanceResId = a.getResourceId(0, 0);
tempView.setTextAppearance(mContext, (textAppearanceResId != 0) ?
- textAppearanceResId : R.style.TextAppearance_Quantum_TimePicker_TimeLabel);
+ textAppearanceResId : R.style.TextAppearance_Material_TimePicker_TimeLabel);
a.recycle();
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
diff --git a/core/java/com/android/internal/util/NotificationColorUtil.java b/core/java/com/android/internal/util/NotificationColorUtil.java
index f38cbde4730b..665055cbb51c 100644
--- a/core/java/com/android/internal/util/NotificationColorUtil.java
+++ b/core/java/com/android/internal/util/NotificationColorUtil.java
@@ -35,7 +35,7 @@ import java.util.Arrays;
import java.util.WeakHashMap;
/**
- * Helper class to process legacy (Holo) notifications to make them look like quantum notifications.
+ * Helper class to process legacy (Holo) notifications to make them look like material notifications.
*
* @hide
*/
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index 7fe03f5b165f..60e649b5f07d 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -291,14 +291,14 @@ public class LockPatternView extends View {
mPathPaint.setStrokeCap(Paint.Cap.ROUND);
// lot's of bitmaps!
- // TODO: those bitmaps are hardcoded to the Quantum Theme which should not be the case!
- mBitmapBtnDefault = getBitmapFor(R.drawable.btn_code_lock_default_qntm_alpha);
- mBitmapBtnTouched = getBitmapFor(R.drawable.btn_code_lock_touched_qntm_alpha);
+ // TODO: those bitmaps are hardcoded to the Material Theme which should not be the case!
+ mBitmapBtnDefault = getBitmapFor(R.drawable.btn_code_lock_default_mtrl_alpha);
+ mBitmapBtnTouched = getBitmapFor(R.drawable.btn_code_lock_touched_mtrl_alpha);
mBitmapCircleDefault = getBitmapFor(
- R.drawable.indicator_code_lock_point_area_default_qntm_alpha);
- mBitmapCircleAlpha = getBitmapFor(R.drawable.indicator_code_lock_point_area_qntm_alpha);
+ R.drawable.indicator_code_lock_point_area_default_mtrl_alpha);
+ mBitmapCircleAlpha = getBitmapFor(R.drawable.indicator_code_lock_point_area_mtrl_alpha);
mBitmapArrowAlphaUp = getBitmapFor(
- R.drawable.indicator_code_lock_drag_direction_up_qntm_alpha);
+ R.drawable.indicator_code_lock_drag_direction_up_mtrl_alpha);
// bitmaps have the size of the largest bitmap in this group
final Bitmap bitmaps[] = { mBitmapBtnDefault, mBitmapBtnTouched, mBitmapCircleDefault,
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 8e56eecb080f..432a6150a431 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -828,13 +828,12 @@ public:
: layout(layout), canvas(canvas), x(x), y(y), paint(paint), glyphs(glyphs),
pos(pos) { }
- void operator()(SkTypeface* t, size_t start, size_t end) {
+ void operator()(size_t start, size_t end) {
for (size_t i = start; i < end; i++) {
glyphs[i] = layout.getGlyphId(i);
pos[i].fX = x + layout.getX(i);
pos[i].fY = y + layout.getY(i);
}
- paint->setTypeface(t);
canvas->drawPosText(glyphs + start, (end - start) << 1, pos + start, *paint);
}
private:
@@ -857,7 +856,7 @@ public:
paint->setTextAlign(SkPaint::kLeft_Align);
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
DrawTextFunctor f(layout, canvas, x, y, paint, glyphs, pos);
- MinikinUtils::forFontRun(layout, f);
+ MinikinUtils::forFontRun(layout, paint, f);
doDrawTextDecorations(canvas, x, y, layout.getAdvance(), paint);
paint->setTextAlign(align);
delete[] glyphs;
diff --git a/core/jni/android/graphics/MinikinSkia.cpp b/core/jni/android/graphics/MinikinSkia.cpp
index 2b96f1b66104..25eb941e9d8e 100644
--- a/core/jni/android/graphics/MinikinSkia.cpp
+++ b/core/jni/android/graphics/MinikinSkia.cpp
@@ -43,13 +43,14 @@ bool MinikinFontSkia::GetGlyph(uint32_t codepoint, uint32_t *glyph) const {
return !!glyph;
}
-static void MinikinFontSkia_SetSkiaPaint(SkTypeface* typeface, SkPaint* skPaint, const MinikinPaint& paint) {
- skPaint->setTypeface(typeface);
+static void MinikinFontSkia_SetSkiaPaint(const MinikinFont* font, SkPaint* skPaint, const MinikinPaint& paint) {
skPaint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
skPaint->setTextSize(paint.size);
skPaint->setTextScaleX(paint.scaleX);
skPaint->setTextSkewX(paint.skewX);
MinikinFontSkia::unpackPaintFlags(skPaint, paint.paintFlags);
+ // Apply font fakery on top of user-supplied flags.
+ MinikinFontSkia::populateSkPaint(skPaint, font, paint.fakery);
}
float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id,
@@ -57,7 +58,7 @@ float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id,
SkPaint skPaint;
uint16_t glyph16 = glyph_id;
SkScalar skWidth;
- MinikinFontSkia_SetSkiaPaint(mTypeface, &skPaint, paint);
+ MinikinFontSkia_SetSkiaPaint(this, &skPaint, paint);
skPaint.getTextWidths(&glyph16, sizeof(glyph16), &skWidth, NULL);
#ifdef VERBOSE
ALOGD("width for typeface %d glyph %d = %f", mTypeface->uniqueID(), glyph_id, skWidth);
@@ -70,7 +71,7 @@ void MinikinFontSkia::GetBounds(MinikinRect* bounds, uint32_t glyph_id,
SkPaint skPaint;
uint16_t glyph16 = glyph_id;
SkRect skBounds;
- MinikinFontSkia_SetSkiaPaint(mTypeface, &skPaint, paint);
+ MinikinFontSkia_SetSkiaPaint(this, &skPaint, paint);
skPaint.getTextWidths(&glyph16, sizeof(glyph16), NULL, &skBounds);
bounds->mLeft = skBounds.fLeft;
bounds->mTop = skBounds.fTop;
@@ -90,7 +91,7 @@ bool MinikinFontSkia::GetTable(uint32_t tag, uint8_t *buf, size_t *size) {
}
}
-SkTypeface *MinikinFontSkia::GetSkTypeface() {
+SkTypeface *MinikinFontSkia::GetSkTypeface() const {
return mTypeface;
}
@@ -115,4 +116,12 @@ void MinikinFontSkia::unpackPaintFlags(SkPaint* paint, uint32_t paintFlags) {
paint->setHinting(static_cast<SkPaint::Hinting>(paintFlags >> 16));
}
+void MinikinFontSkia::populateSkPaint(SkPaint* paint, const MinikinFont* font, FontFakery fakery) {
+ paint->setTypeface(reinterpret_cast<const MinikinFontSkia*>(font)->GetSkTypeface());
+ paint->setFakeBoldText(paint->isFakeBoldText() || fakery.isFakeBold());
+ if (fakery.isFakeItalic()) {
+ paint->setTextSkewX(paint->getTextSkewX() - 0.25f);
+ }
+}
+
}
diff --git a/core/jni/android/graphics/MinikinSkia.h b/core/jni/android/graphics/MinikinSkia.h
index 0452c57ed2fd..ac4d2a08ef43 100644
--- a/core/jni/android/graphics/MinikinSkia.h
+++ b/core/jni/android/graphics/MinikinSkia.h
@@ -36,10 +36,13 @@ public:
int32_t GetUniqueId() const;
- SkTypeface *GetSkTypeface();
+ SkTypeface* GetSkTypeface() const;
static uint32_t packPaintFlags(const SkPaint* paint);
static void unpackPaintFlags(SkPaint* paint, uint32_t paintFlags);
+
+ // set typeface and fake bold/italic parameters
+ static void populateSkPaint(SkPaint* paint, const MinikinFont* font, FontFakery fakery);
private:
SkTypeface *mTypeface;
};
diff --git a/core/jni/android/graphics/MinikinUtils.h b/core/jni/android/graphics/MinikinUtils.h
index ea7eb5d69e7c..a96c6b19eca9 100644
--- a/core/jni/android/graphics/MinikinUtils.h
+++ b/core/jni/android/graphics/MinikinUtils.h
@@ -36,23 +36,30 @@ public:
static float xOffsetForTextAlign(SkPaint* paint, const Layout& layout);
- // f is a functor of type void f(SkTypeface *, size_t start, size_t end);
+ // f is a functor of type void f(size_t start, size_t end);
template <typename F>
- static void forFontRun(const Layout& layout, F& f) {
- SkTypeface* lastFace = NULL;
+ static void forFontRun(const Layout& layout, SkPaint* paint, F& f) {
+ float saveSkewX = paint->getTextSkewX();
+ bool savefakeBold = paint->isFakeBoldText();
+ MinikinFont* curFont = NULL;
size_t start = 0;
size_t nGlyphs = layout.nGlyphs();
for (size_t i = 0; i < nGlyphs; i++) {
- MinikinFontSkia* mfs = static_cast<MinikinFontSkia*>(layout.getFont(i));
- SkTypeface* skFace = mfs->GetSkTypeface();
- if (i > 0 && skFace != lastFace) {
- f(lastFace, start, i);
+ MinikinFont* nextFont = layout.getFont(i);
+ if (i > 0 && nextFont != curFont) {
+ MinikinFontSkia::populateSkPaint(paint, curFont, layout.getFakery(start));
+ f(start, i);
+ paint->setTextSkewX(saveSkewX);
+ paint->setFakeBoldText(savefakeBold);
start = i;
}
- lastFace = skFace;
+ curFont = nextFont;
}
if (nGlyphs > start) {
- f(lastFace, start, nGlyphs);
+ MinikinFontSkia::populateSkPaint(paint, curFont, layout.getFakery(start));
+ f(start, nGlyphs);
+ paint->setTextSkewX(saveSkewX);
+ paint->setFakeBoldText(savefakeBold);
}
}
};
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 3dc874e77bea..8b11d311894d 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -429,27 +429,29 @@ public:
GraphicsJNI::getNativePaint(env, paint)->setTextSkewX(skewX);
}
- static jfloat ascent(JNIEnv* env, jobject paint) {
- NPE_CHECK_RETURN_ZERO(env, paint);
- SkPaint::FontMetrics metrics;
- (void)GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics);
- return SkScalarToFloat(metrics.fAscent);
- }
-
- static jfloat descent(JNIEnv* env, jobject paint) {
- NPE_CHECK_RETURN_ZERO(env, paint);
- SkPaint::FontMetrics metrics;
- (void)GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics);
- return SkScalarToFloat(metrics.fDescent);
- }
-
- static SkScalar getMetricsInternal(SkPaint *paint, SkPaint::FontMetrics *metrics) {
+ static SkScalar getMetricsInternal(JNIEnv* env, jobject jpaint, SkPaint::FontMetrics *metrics) {
const int kElegantTop = 2500;
const int kElegantBottom = -1000;
- const int kElegantAscent = 1946;
- const int kElegantDescent = -512;
+ const int kElegantAscent = 1900;
+ const int kElegantDescent = -500;
const int kElegantLeading = 0;
+ SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint);
+#ifdef USE_MINIKIN
+ TypefaceImpl* typeface = GraphicsJNI::getNativeTypeface(env, jpaint);
+ typeface = TypefaceImpl_resolveDefault(typeface);
+ FakedFont baseFont = typeface->fFontCollection->baseFontFaked(typeface->fStyle);
+ float saveSkewX = paint->getTextSkewX();
+ bool savefakeBold = paint->isFakeBoldText();
+ MinikinFontSkia::populateSkPaint(paint, baseFont.font, baseFont.fakery);
+#endif
SkScalar spacing = paint->getFontMetrics(metrics);
+#ifdef USE_MINIKIN
+ // The populateSkPaint call may have changed fake bold / text skew
+ // because we want to measure with those effects applied, so now
+ // restore the original settings.
+ paint->setTextSkewX(saveSkewX);
+ paint->setFakeBoldText(savefakeBold);
+#endif
SkPaintOptionsAndroid paintOpts = paint->getPaintOptionsAndroid();
if (paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant) {
SkScalar size = paint->getTextSize();
@@ -463,10 +465,24 @@ public:
return spacing;
}
+ static jfloat ascent(JNIEnv* env, jobject paint) {
+ NPE_CHECK_RETURN_ZERO(env, paint);
+ SkPaint::FontMetrics metrics;
+ getMetricsInternal(env, paint, &metrics);
+ return SkScalarToFloat(metrics.fAscent);
+ }
+
+ static jfloat descent(JNIEnv* env, jobject paint) {
+ NPE_CHECK_RETURN_ZERO(env, paint);
+ SkPaint::FontMetrics metrics;
+ getMetricsInternal(env, paint, &metrics);
+ return SkScalarToFloat(metrics.fDescent);
+ }
+
static jfloat getFontMetrics(JNIEnv* env, jobject paint, jobject metricsObj) {
NPE_CHECK_RETURN_ZERO(env, paint);
SkPaint::FontMetrics metrics;
- SkScalar spacing = getMetricsInternal(GraphicsJNI::getNativePaint(env, paint), &metrics);
+ SkScalar spacing = getMetricsInternal(env, paint, &metrics);
if (metricsObj) {
SkASSERT(env->IsInstanceOf(metricsObj, gFontMetrics_class));
@@ -483,7 +499,7 @@ public:
NPE_CHECK_RETURN_ZERO(env, paint);
SkPaint::FontMetrics metrics;
- getMetricsInternal(GraphicsJNI::getNativePaint(env, paint), &metrics);
+ getMetricsInternal(env, paint, &metrics);
int ascent = SkScalarRoundToInt(metrics.fAscent);
int descent = SkScalarRoundToInt(metrics.fDescent);
int leading = SkScalarRoundToInt(metrics.fLeading);
@@ -830,13 +846,12 @@ public:
: layout(layout), path(path), x(x), y(y), paint(paint), glyphs(glyphs), pos(pos) {
}
- void operator()(SkTypeface* t, size_t start, size_t end) {
+ void operator()(size_t start, size_t end) {
for (size_t i = start; i < end; i++) {
glyphs[i] = layout.getGlyphId(i);
pos[i].fX = x + layout.getX(i);
pos[i].fY = y + layout.getY(i);
}
- paint->setTypeface(t);
if (start == 0) {
paint->getPosTextPath(glyphs + start, (end - start) << 1, pos + start, path);
} else {
@@ -871,7 +886,7 @@ public:
paint->setTextAlign(SkPaint::kLeft_Align);
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
GetTextFunctor f(layout, path, x, y, paint, glyphs, pos);
- MinikinUtils::forFontRun(layout, f);
+ MinikinUtils::forFontRun(layout, paint, f);
paint->setTextAlign(align);
delete[] glyphs;
delete[] pos;
diff --git a/core/jni/android/graphics/TypefaceImpl.cpp b/core/jni/android/graphics/TypefaceImpl.cpp
index 27df7cf0e215..1800d0c841f9 100644
--- a/core/jni/android/graphics/TypefaceImpl.cpp
+++ b/core/jni/android/graphics/TypefaceImpl.cpp
@@ -173,7 +173,7 @@ TypefaceImpl* TypefaceImpl_createFromFamilies(const jlong* families, size_t size
} else {
const FontStyle defaultStyle;
FontFamily* firstFamily = reinterpret_cast<FontFamily*>(families[0]);
- MinikinFont* mf = firstFamily->getClosestMatch(defaultStyle);
+ MinikinFont* mf = firstFamily->getClosestMatch(defaultStyle).font;
SkTypeface* skTypeface = reinterpret_cast<MinikinFontSkia*>(mf)->GetSkTypeface();
// TODO: probably better to query more precise style from family, will be important
// when we open up API to access 100..900 weights
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index a46ccd631ea6..d032cb6ac09f 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -656,13 +656,12 @@ public:
uirenderer::Rect& bounds)
: layout(layout), renderer(renderer), x(x), y(y), paint(paint), glyphs(glyphs),
pos(pos), totalAdvance(totalAdvance), bounds(bounds) { }
- void operator()(SkTypeface* t, size_t start, size_t end) {
+ void operator()(size_t start, size_t end) {
for (size_t i = start; i < end; i++) {
glyphs[i] = layout.getGlyphId(i);
pos[2 * i] = layout.getX(i);
pos[2 * i + 1] = layout.getY(i);
}
- paint->setTypeface(t);
size_t glyphsCount = end - start;
int bytesCount = glyphsCount * sizeof(jchar);
renderer->drawText((const char*) (glyphs + start), bytesCount, glyphsCount,
@@ -692,7 +691,7 @@ static void renderTextLayout(OpenGLRenderer* renderer, Layout* layout,
float totalAdvance = layout->getAdvance();
RenderTextFunctor f(*layout, renderer, x, y, paint, glyphs, pos, totalAdvance, bounds);
- MinikinUtils::forFontRun(*layout, f);
+ MinikinUtils::forFontRun(*layout, paint, f);
delete[] glyphs;
delete[] pos;
}
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index 6ae02e0aad95..a590dbf0dac3 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -211,8 +211,9 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj,
outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION,
env->GetFloatField(pointerCoordsObj, gPointerCoordsClassInfo.orientation));
- uint64_t bits = env->GetLongField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits);
- if (bits) {
+ BitSet64 bits =
+ BitSet64(env->GetLongField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits));
+ if (!bits.isEmpty()) {
jfloatArray valuesArray = jfloatArray(env->GetObjectField(pointerCoordsObj,
gPointerCoordsClassInfo.mPackedAxisValues));
if (valuesArray) {
@@ -221,11 +222,9 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj,
uint32_t index = 0;
do {
- uint32_t axis = __builtin_ctzll(bits);
- uint64_t axisBit = 1LL << axis;
- bits &= ~axisBit;
+ uint32_t axis = bits.clearFirstMarkedBit();
outRawPointerCoords->setAxisValue(axis, values[index++]);
- } while (bits);
+ } while (!bits.isEmpty());
env->ReleasePrimitiveArrayCritical(valuesArray, values, JNI_ABORT);
env->DeleteLocalRef(valuesArray);
@@ -275,21 +274,19 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer
env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.orientation,
rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
- const uint64_t unpackedAxisBits = 0
- | (1LL << AMOTION_EVENT_AXIS_X)
- | (1LL << AMOTION_EVENT_AXIS_Y)
- | (1LL << AMOTION_EVENT_AXIS_PRESSURE)
- | (1LL << AMOTION_EVENT_AXIS_SIZE)
- | (1LL << AMOTION_EVENT_AXIS_TOUCH_MAJOR)
- | (1LL << AMOTION_EVENT_AXIS_TOUCH_MINOR)
- | (1LL << AMOTION_EVENT_AXIS_TOOL_MAJOR)
- | (1LL << AMOTION_EVENT_AXIS_TOOL_MINOR)
- | (1LL << AMOTION_EVENT_AXIS_ORIENTATION);
-
uint64_t outBits = 0;
- uint64_t remainingBits = rawPointerCoords->bits & ~unpackedAxisBits;
- if (remainingBits) {
- uint32_t packedAxesCount = __builtin_popcountll(remainingBits);
+ BitSet64 bits = BitSet64(rawPointerCoords->bits);
+ bits.clearBit(AMOTION_EVENT_AXIS_X);
+ bits.clearBit(AMOTION_EVENT_AXIS_Y);
+ bits.clearBit(AMOTION_EVENT_AXIS_PRESSURE);
+ bits.clearBit(AMOTION_EVENT_AXIS_SIZE);
+ bits.clearBit(AMOTION_EVENT_AXIS_TOUCH_MAJOR);
+ bits.clearBit(AMOTION_EVENT_AXIS_TOUCH_MINOR);
+ bits.clearBit(AMOTION_EVENT_AXIS_TOOL_MAJOR);
+ bits.clearBit(AMOTION_EVENT_AXIS_TOOL_MINOR);
+ bits.clearBit(AMOTION_EVENT_AXIS_ORIENTATION);
+ if (!bits.isEmpty()) {
+ uint32_t packedAxesCount = bits.count();
jfloatArray outValuesArray = obtainPackedAxisValuesArray(env, packedAxesCount,
outPointerCoordsObj);
if (!outValuesArray) {
@@ -302,12 +299,10 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer
const float* values = rawPointerCoords->values;
uint32_t index = 0;
do {
- uint32_t axis = __builtin_ctzll(remainingBits);
- uint64_t axisBit = 1LL << axis;
- remainingBits &= ~axisBit;
- outBits |= axisBit;
+ uint32_t axis = bits.clearFirstMarkedBit();
+ outBits |= BitSet64::valueForBit(axis);
outValues[index++] = rawPointerCoords->getAxisValue(axis);
- } while (remainingBits);
+ } while (!bits.isEmpty());
env->ReleasePrimitiveArrayCritical(outValuesArray, outValues, 0);
env->DeleteLocalRef(outValuesArray);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index d844818cb506..c5fd83d995ad 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -74,6 +74,8 @@
<protected-broadcast android:name="android.intent.action.USER_FOREGROUND" />
<protected-broadcast android:name="android.intent.action.USER_SWITCHED" />
+ <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGED" />
+
<protected-broadcast android:name="android.app.action.ENTER_CAR_MODE" />
<protected-broadcast android:name="android.app.action.EXIT_CAR_MODE" />
<protected-broadcast android:name="android.app.action.ENTER_DESK_MODE" />
@@ -293,7 +295,7 @@
android:label="@string/permlab_sendSms"
android:description="@string/permdesc_sendSms" />
- <!-- Allows an application (Phone) to send a request to other applications
+ <!-- @SystemApi Allows an application (Phone) to send a request to other applications
to handle the respond-via-message action during incoming calls.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SEND_RESPOND_VIA_MESSAGE"
@@ -318,7 +320,7 @@
android:label="@string/permlab_receiveMms"
android:description="@string/permdesc_receiveMms" />
- <!-- Allows an application to receive emergency cell broadcast messages,
+ <!-- @SystemApi Allows an application to receive emergency cell broadcast messages,
to record or display them to the user.
<p>Not for use by third-party applications.
@hide Pending API council approval -->
@@ -398,10 +400,9 @@
android:label="@string/permlab_writeContacts"
android:description="@string/permdesc_writeContacts" />
- <!-- Allows an application to execute contacts directory search.
+ <!-- @SystemApi @hide Allows an application to execute contacts directory search.
This should only be used by ContactsProvider.
<p>Not for use by third-party applications. -->
- <!-- @hide -->
<permission android:name="android.permission.BIND_DIRECTORY_SEARCH"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="signature|system" />
@@ -686,20 +687,20 @@
android:label="@string/permlab_accessLocationExtraCommands"
android:description="@string/permdesc_accessLocationExtraCommands" />
- <!-- Allows an application to install a location provider into the Location Manager.
+ <!-- @SystemApi Allows an application to install a location provider into the Location Manager.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"
android:protectionLevel="signature|system"
android:label="@string/permlab_installLocationProvider"
android:description="@string/permdesc_installLocationProvider" />
- <!-- Allows HDMI-CEC service to access device and configuration files.
- @hide This should only be used by HDMI-CEC service.
+ <!-- @SystemApi @hide Allows HDMI-CEC service to access device and configuration files.
+ This should only be used by HDMI-CEC service.
-->
<permission android:name="android.permission.HDMI_CEC"
android:protectionLevel="signatureOrSystem" />
- <!-- Allows an application to use location features in hardware,
+ <!-- @SystemApi Allows an application to use location features in hardware,
such as the geofencing api.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.LOCATION_HARDWARE"
@@ -797,7 +798,7 @@
android:description="@string/permdesc_bluetoothAdmin"
android:label="@string/permlab_bluetoothAdmin" />
- <!-- Allows applications to pair bluetooth devices without user interaction.
+ <!-- @SystemApi Allows applications to pair bluetooth devices without user interaction.
This is not available to third party applications. -->
<permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
@@ -819,18 +820,18 @@
android:description="@string/permdesc_nfc"
android:label="@string/permlab_nfc" />
- <!-- Allows an internal user to use privileged ConnectivityManager APIs.
+ <!-- @SystemApi Allows an internal user to use privileged ConnectivityManager APIs.
@hide -->
<permission android:name="android.permission.CONNECTIVITY_INTERNAL"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="signature|system" />
- <!-- @hide -->
+ <!-- @SystemApi @hide -->
<permission android:name="android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="signature|system" />
- <!-- Allows access to the loop radio (Android@Home mesh network) device.
+ <!-- @SystemApi Allows access to the loop radio (Android@Home mesh network) device.
@hide -->
<permission android:name="android.permission.LOOP_RADIO"
android:permissionGroup="android.permission-group.NETWORK"
@@ -879,7 +880,7 @@
android:label="@string/permlab_manageAccounts"
android:description="@string/permdesc_manageAccounts" />
- <!-- Allows applications to call into AccountAuthenticators.
+ <!-- @SystemApi Allows applications to call into AccountAuthenticators.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.ACCOUNT_MANAGER"
android:permissionGroup="android.permission-group.ACCOUNTS"
@@ -970,7 +971,7 @@
android:description="@string/permgroupdesc_hardwareControls"
android:priority="260"/>
- <!-- Allows an application to manage preferences and permissions for USB devices
+ <!-- @SystemApi Allows an application to manage preferences and permissions for USB devices
@hide -->
<permission android:name="android.permission.MANAGE_USB"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
@@ -978,7 +979,7 @@
android:label="@string/permlab_manageUsb"
android:description="@string/permdesc_manageUsb" />
- <!-- Allows an application to access the MTP USB kernel driver.
+ <!-- @SystemApi Allows an application to access the MTP USB kernel driver.
For use only by the device side MTP implementation.
@hide -->
<permission android:name="android.permission.ACCESS_MTP"
@@ -1006,7 +1007,7 @@
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature" />
- <!-- Allows TvInputService to access underlying TV input hardware such as
+ <!-- @SystemApi Allows TvInputService to access underlying TV input hardware such as
built-in tuners and HDMI-in's.
@hide This should only be used by OEM's TvInputService's.
-->
@@ -1063,7 +1064,7 @@
android:label="@string/permlab_camera"
android:description="@string/permdesc_camera" />
- <!-- Allows disabling the transmit-indicator LED that is normally on when
+ <!-- @SystemApi Allows disabling the transmit-indicator LED that is normally on when
a camera is in use by an application.
@hide -->
<permission android:name="android.permission.CAMERA_DISABLE_TRANSMIT_LED"
@@ -1096,7 +1097,7 @@
android:label="@string/permlab_processOutgoingCalls"
android:description="@string/permdesc_processOutgoingCalls" />
- <!-- Allows modification of the telephony state - power on, mmi, etc.
+ <!-- @SystemApi Allows modification of the telephony state - power on, mmi, etc.
Does not include placing calls.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.MODIFY_PHONE_STATE"
@@ -1128,7 +1129,7 @@
android:label="@string/permlab_readPrecisePhoneState"
android:description="@string/permdesc_readPrecisePhoneState" />
- <!-- Allows read access to privileged phone state.
+ <!-- @SystemApi Allows read access to privileged phone state.
@hide Used internally. -->
<permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
android:permissionGroup="android.permission-group.PHONE_CALLS"
@@ -1151,7 +1152,7 @@
android:description="@string/permdesc_use_sip"
android:label="@string/permlab_use_sip" />
- <!-- Allows an application to request CallHandlerService implementations.
+ <!-- @SystemApi Allows an application to request CallHandlerService implementations.
@hide -->
<permission android:name="android.permission.BIND_CALL_SERVICE"
android:permissionGroup="android.permission-group.PHONE_CALLS"
@@ -1217,7 +1218,7 @@
android:description="@string/permdesc_sdcardWrite"
android:protectionLevel="dangerous" />
- <!-- Allows an application to write to internal media storage
+ <!-- @SystemApi Allows an application to write to internal media storage
@hide -->
<permission android:name="android.permission.WRITE_MEDIA_STORAGE"
android:permissionGroup="android.permission-group.STORAGE"
@@ -1267,14 +1268,15 @@
android:description="@string/permgroupdesc_appInfo"
android:priority="220" />
- <!-- Allows an application to get information about the currently
+ <!-- @SystemApi Allows an application to get information about the currently
or recently running tasks. -->
<permission android:name="android.permission.GET_TASKS"
android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="signature|system"
android:label="@string/permlab_getTasks"
android:description="@string/permdesc_getTasks" />
- <!-- @hide Allows an application to call APIs that allow it to do interactions
+
+ <!-- @SystemApi @hide Allows an application to call APIs that allow it to do interactions
across the users on the device, using singleton services and
user-targeted broadcasts. This permission is not available to
third party applications. -->
@@ -1293,7 +1295,7 @@
android:label="@string/permlab_interactAcrossUsersFull"
android:description="@string/permdesc_interactAcrossUsersFull" />
- <!-- @hide Allows an application to call APIs that allow it to query and manage
+ <!-- @SystemApi @hide Allows an application to call APIs that allow it to query and manage
users on the device. This permission is not available to
third party applications. -->
<permission android:name="android.permission.MANAGE_USERS"
@@ -1325,7 +1327,7 @@
android:label="@string/permlab_removeTasks"
android:description="@string/permdesc_removeTasks" />
- <!-- @hide Allows an application to create/manage/remove stacks -->
+ <!-- @SystemApi @hide Allows an application to create/manage/remove stacks -->
<permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="signature|system"
@@ -1419,7 +1421,7 @@
android:description="@string/permgroupdesc_systemClock"
android:priority="140" />
- <!-- Allows applications to set the system time.
+ <!-- @SystemApi Allows applications to set the system time.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SET_TIME"
android:protectionLevel="signature|system"
@@ -1525,7 +1527,7 @@
android:description="@string/permgroupdesc_systemTools"
android:priority="100" />
- <!-- @hide Change the screen compatibility mode of applications -->
+ <!-- @SystemApi @hide Change the screen compatibility mode of applications -->
<permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature"
@@ -1539,7 +1541,7 @@
android:description="@string/permdesc_sdcardAccessAll"
android:protectionLevel="signature" />
- <!-- Allows an application to modify the current configuration, such
+ <!-- @SystemApi Allows an application to modify the current configuration, such
as locale. -->
<permission android:name="android.permission.CHANGE_CONFIGURATION"
android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
@@ -1554,14 +1556,14 @@
android:label="@string/permlab_writeSettings"
android:description="@string/permdesc_writeSettings" />
- <!-- Allows an application to modify the Google service map.
+ <!-- @SystemApi Allows an application to modify the Google service map.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.WRITE_GSERVICES"
android:protectionLevel="signature|system"
android:label="@string/permlab_writeGservices"
android:description="@string/permdesc_writeGservices" />
- <!-- Allows an application to call
+ <!-- @SystemApi Allows an application to call
{@link android.app.ActivityManager#forceStopPackage}.
@hide -->
<permission android:name="android.permission.FORCE_STOP_PACKAGES"
@@ -1570,7 +1572,7 @@
android:label="@string/permlab_forceStopPackages"
android:description="@string/permdesc_forceStopPackages" />
- <!-- @hide Allows an application to retrieve the content of the active window
+ <!-- @SystemApi @hide Allows an application to retrieve the content of the active window
An active window is the window that has fired an accessibility event. -->
<permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
@@ -1578,7 +1580,7 @@
android:label="@string/permlab_retrieve_window_content"
android:description="@string/permdesc_retrieve_window_content" />
- <!-- Modify the global animation scaling factor.
+ <!-- @SystemApi Modify the global animation scaling factor.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SET_ANIMATION_SCALE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1637,7 +1639,7 @@
android:label="@string/permlab_broadcastSticky"
android:description="@string/permdesc_broadcastSticky" />
- <!-- Allows mounting and unmounting file systems for removable storage.
+ <!-- @SystemApi Allows mounting and unmounting file systems for removable storage.
<p>Not for use by third-party applications.-->
<permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1645,7 +1647,7 @@
android:label="@string/permlab_mount_unmount_filesystems"
android:description="@string/permdesc_mount_unmount_filesystems" />
- <!-- Allows formatting file systems for removable storage.
+ <!-- @SystemApi Allows formatting file systems for removable storage.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1693,7 +1695,7 @@
android:label="@string/permlab_asec_rename"
android:description="@string/permdesc_asec_rename" />
- <!-- Allows applications to write the apn settings.
+ <!-- @SystemApi Allows applications to write the apn settings.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.WRITE_APN_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1729,14 +1731,14 @@
android:label="@string/permlab_clearAppCache"
android:description="@string/permdesc_clearAppCache" />
- <!-- Allows an application to use any media decoder when decoding for playback
+ <!-- @SystemApi Allows an application to use any media decoder when decoding for playback
@hide -->
<permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"
android:protectionLevel="signature|system"
android:label="@string/permlab_anyCodecForPlayback"
android:description="@string/permdesc_anyCodecForPlayback" />
- <!-- Allows an application to install and/or uninstall CA certificates on
+ <!-- @SystemApi Allows an application to install and/or uninstall CA certificates on
behalf of the user.
@hide -->
<permission android:name="android.permission.MANAGE_CA_CERTIFICATES"
@@ -1744,20 +1746,23 @@
android:label="@string/permlab_manageCaCertificates"
android:description="@string/permdesc_manageCaCertificates" />
- <!-- Allows an application to do certain operations needed for
- interacting with the recovery (system update) system. -->
+ <!-- @SystemApi Allows an application to do certain operations
+ needed for interacting with the recovery (system update)
+ system.
+ @hide -->
<permission android:name="android.permission.RECOVERY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature|system"
android:label="@string/permlab_recovery"
android:description="@string/permdesc_recovery" />
- <!-- Allows the system to bind to an application's idle services
+ <!-- Allows the system to bind to an application's task services
@hide -->
- <permission android:name="android.permission.BIND_IDLE_SERVICE"
+ <permission android:name="android.permission.BIND_JOB_SERVICE"
android:protectionLevel="signature"
- android:label="@string/permlab_bindIdleService"
- android:description="@string/permdesc_bindIdleService" />
+ android:label="@string/permlab_bindJobService"
+ android:description="@string/permdesc_bindJobService" />
+ <uses-permission android:name="android.permission.BIND_JOB_SERVICE"/>
<!-- ========================================= -->
<!-- Permissions for special development tools -->
@@ -1773,7 +1778,7 @@
android:description="@string/permgroupdesc_developmentTools"
android:priority="310" />
- <!-- Allows an application to read or write the secure system settings.
+ <!-- @SystemApi Allows an application to read or write the secure system settings.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.WRITE_SECURE_SETTINGS"
android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
@@ -1781,7 +1786,7 @@
android:label="@string/permlab_writeSecureSettings"
android:description="@string/permdesc_writeSecureSettings" />
- <!-- Allows an application to retrieve state dump information from system services.
+ <!-- @SystemApi Allows an application to retrieve state dump information from system services.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.DUMP"
android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
@@ -1789,7 +1794,7 @@
android:label="@string/permlab_dump"
android:description="@string/permdesc_dump" />
- <!-- Allows an application to read the low-level system log files.
+ <!-- @SystemApi Allows an application to read the low-level system log files.
<p>Not for use by third-party applications, because
Log entries can contain the user's private information. -->
<permission android:name="android.permission.READ_LOGS"
@@ -1798,7 +1803,7 @@
android:label="@string/permlab_readLogs"
android:description="@string/permdesc_readLogs" />
- <!-- Configure an application for debugging.
+ <!-- @SystemApi Configure an application for debugging.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SET_DEBUG_APP"
android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
@@ -1806,7 +1811,7 @@
android:label="@string/permlab_setDebugApp"
android:description="@string/permdesc_setDebugApp" />
- <!-- Allows an application to set the maximum number of (not needed)
+ <!-- @SystemApi Allows an application to set the maximum number of (not needed)
application processes that can be running.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SET_PROCESS_LIMIT"
@@ -1815,7 +1820,7 @@
android:label="@string/permlab_setProcessLimit"
android:description="@string/permdesc_setProcessLimit" />
- <!-- Allows an application to control whether activities are immediately
+ <!-- @SystemApi Allows an application to control whether activities are immediately
finished when put in the background.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SET_ALWAYS_FINISH"
@@ -1824,7 +1829,7 @@
android:label="@string/permlab_setAlwaysFinish"
android:description="@string/permdesc_setAlwaysFinish" />
- <!-- Allow an application to request that a signal be sent to all persistent processes.
+ <!-- @SystemApi Allow an application to request that a signal be sent to all persistent processes.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES"
android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
@@ -1837,7 +1842,7 @@
<!-- ==================================== -->
<eat-comment />
- <!-- Allows applications to RW to diagnostic resources.
+ <!-- @SystemApi Allows applications to RW to diagnostic resources.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.DIAGNOSTIC"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1845,7 +1850,7 @@
android:description="@string/permdesc_diagnostic"
android:label="@string/permlab_diagnostic" />
- <!-- Allows an application to open, close, or disable the status bar
+ <!-- @SystemApi Allows an application to open, close, or disable the status bar
and its icons.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.STATUS_BAR"
@@ -1868,21 +1873,21 @@
android:description="@string/permdesc_forceBack"
android:protectionLevel="signature" />
- <!-- Allows an application to update device statistics.
+ <!-- @SystemApi Allows an application to update device statistics.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.UPDATE_DEVICE_STATS"
android:label="@string/permlab_updateBatteryStats"
android:description="@string/permdesc_updateBatteryStats"
android:protectionLevel="signature|system" />
- <!-- @hide Allows an application to collect battery statistics -->
+ <!-- @SystemApi @hide Allows an application to collect battery statistics -->
<permission android:name="android.permission.GET_APP_OPS_STATS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:label="@string/permlab_getAppOpsStats"
android:description="@string/permdesc_getAppOpsStats"
android:protectionLevel="signature|system|development" />
- <!-- Allows an application to update application operation statistics. Not for
+ <!-- @SystemApi Allows an application to update application operation statistics. Not for
use by third party apps. @hide -->
<permission android:name="android.permission.UPDATE_APP_OPS_STATS"
android:label="@string/permlab_updateAppOpsStats"
@@ -1955,7 +1960,7 @@
android:description="@string/permdesc_runSetActivityWatcher"
android:protectionLevel="signature" />
- <!-- Allows an application to call the activity manager shutdown() API
+ <!-- @SystemApi Allows an application to call the activity manager shutdown() API
to put the higher-level system there into a shutdown state.
@hide -->
<permission android:name="android.permission.SHUTDOWN"
@@ -1963,7 +1968,7 @@
android:description="@string/permdesc_shutdown"
android:protectionLevel="signature|system" />
- <!-- Allows an application to tell the activity manager to temporarily
+ <!-- @SystemApi Allows an application to tell the activity manager to temporarily
stop application switches, putting it into a special mode that
prevents applications from immediately switching away from some
critical UI such as the home screen.
@@ -2084,7 +2089,7 @@
android:description="@string/permdesc_bindDeviceAdmin"
android:protectionLevel="signature" />
- <!-- Required to add or remove another application as a device admin.
+ <!-- @SystemApi Required to add or remove another application as a device admin.
<p>Not for use by third-party applications.
@hide -->
<permission android:name="android.permission.MANAGE_DEVICE_ADMINS"
@@ -2123,7 +2128,7 @@
android:description="@string/permdesc_setKeyboardLayout"
android:protectionLevel="signature" />
- <!-- Allows an application to install packages.
+ <!-- @SystemApi Allows an application to install packages.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.INSTALL_PACKAGES"
android:label="@string/permlab_installPackages"
@@ -2137,28 +2142,28 @@
android:description="@string/permdesc_clearAppUserData"
android:protectionLevel="signature" />
- <!-- Allows an application to delete cache files.
+ <!-- @SystemApi Allows an application to delete cache files.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.DELETE_CACHE_FILES"
android:label="@string/permlab_deleteCacheFiles"
android:description="@string/permdesc_deleteCacheFiles"
android:protectionLevel="signature|system" />
- <!-- Allows an application to delete packages.
+ <!-- @SystemApi Allows an application to delete packages.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.DELETE_PACKAGES"
android:label="@string/permlab_deletePackages"
android:description="@string/permdesc_deletePackages"
android:protectionLevel="signature|system" />
- <!-- Allows an application to move location of installed package.
+ <!-- @SystemApi Allows an application to move location of installed package.
@hide -->
<permission android:name="android.permission.MOVE_PACKAGE"
android:label="@string/permlab_movePackage"
android:description="@string/permdesc_movePackage"
android:protectionLevel="signature|system" />
- <!-- Allows an application to change whether an application component (other than its own) is
+ <!-- @SystemApi Allows an application to change whether an application component (other than its own) is
enabled or not.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"
@@ -2179,7 +2184,7 @@
android:description="@string/permdesc_accessSurfaceFlinger"
android:protectionLevel="signature" />
- <!-- Allows an application to take screen shots and more generally
+ <!-- @SystemApi Allows an application to take screen shots and more generally
get access to the frame buffer data.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.READ_FRAME_BUFFER"
@@ -2188,7 +2193,7 @@
android:protectionLevel="signature|system" />
<!-- Allows an application to use InputFlinger's low level features.
- <p>Not for use by third-party applications. -->
+ @hide -->
<permission android:name="android.permission.ACCESS_INPUT_FLINGER"
android:label="@string/permlab_accessInputFlinger"
android:description="@string/permdesc_accessInputFlinger"
@@ -2210,14 +2215,14 @@
android:description="@string/permdesc_controlWifiDisplay"
android:protectionLevel="signature" />
- <!-- Allows an application to capture audio output.
+ <!-- @SystemApi Allows an application to capture audio output.
<p>Not for use by third-party applications.</p> -->
<permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"
android:label="@string/permlab_captureAudioOutput"
android:description="@string/permdesc_captureAudioOutput"
android:protectionLevel="signature|system" />
- <!-- Allows an application to capture audio for hotword detection.
+ <!-- @SystemApi Allows an application to capture audio for hotword detection.
<p>Not for use by third-party applications.</p>
@hide -->
<permission android:name="android.permission.CAPTURE_AUDIO_HOTWORD"
@@ -2225,7 +2230,7 @@
android:description="@string/permdesc_captureAudioHotword"
android:protectionLevel="signature|system" />
- <!-- Allows an application to modify audio routing and override policy decisions.
+ <!-- @SystemApi Allows an application to modify audio routing and override policy decisions.
<p>Not for use by third-party applications.</p>
@hide -->
<permission android:name="android.permission.MODIFY_AUDIO_ROUTING"
@@ -2233,21 +2238,21 @@
android:description="@string/permdesc_modifyAudioRouting"
android:protectionLevel="signature|system" />
- <!-- Allows an application to capture video output.
+ <!-- @SystemApi Allows an application to capture video output.
<p>Not for use by third-party applications.</p> -->
<permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"
android:label="@string/permlab_captureVideoOutput"
android:description="@string/permdesc_captureVideoOutput"
android:protectionLevel="signature|system" />
- <!-- Allows an application to capture secure video output.
+ <!-- @SystemApi Allows an application to capture secure video output.
<p>Not for use by third-party applications.</p> -->
<permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT"
android:label="@string/permlab_captureSecureVideoOutput"
android:description="@string/permdesc_captureSecureVideoOutput"
android:protectionLevel="signature|system" />
- <!-- Allows an application to know what content is playing and control its playback.
+ <!-- @SystemApi Allows an application to know what content is playing and control its playback.
<p>Not for use by third-party applications due to privacy of media consumption</p> -->
<permission android:name="android.permission.MEDIA_CONTENT_CONTROL"
android:label="@string/permlab_mediaContentControl"
@@ -2261,7 +2266,7 @@
android:description="@string/permdesc_brick"
android:protectionLevel="signature" />
- <!-- Required to be able to reboot the device.
+ <!-- @SystemApi Required to be able to reboot the device.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.REBOOT"
android:label="@string/permlab_reboot"
@@ -2313,20 +2318,20 @@
android:description="@string/permdesc_broadcastWapPush"
android:protectionLevel="signature" />
- <!-- Allows an application to broadcast a SCORE_NETWORKS request.
+ <!-- @SystemApi Allows an application to broadcast a SCORE_NETWORKS request.
<p>Not for use by third-party applications. @hide -->
<permission android:name="android.permission.BROADCAST_SCORE_NETWORKS"
android:label="@string/permlab_broadcastScoreNetworks"
android:description="@string/permdesc_broadcastScoreNetworks"
android:protectionLevel="signature|system" />
- <!-- Not for use by third-party applications. -->
+ <!-- @SystemApi Not for use by third-party applications. -->
<permission android:name="android.permission.MASTER_CLEAR"
android:label="@string/permlab_masterClear"
android:description="@string/permdesc_masterClear"
android:protectionLevel="signature|system" />
- <!-- Allows an application to call any phone number, including emergency
+ <!-- @SystemApi Allows an application to call any phone number, including emergency
numbers, without going through the Dialer user interface for the user
to confirm the call being placed.
<p>Not for use by third-party applications. -->
@@ -2335,13 +2340,13 @@
android:description="@string/permdesc_callPrivileged"
android:protectionLevel="signature|system" />
- <!-- Allows an application to perform CDMA OTA provisioning @hide -->
+ <!-- @SystemApi Allows an application to perform CDMA OTA provisioning @hide -->
<permission android:name="android.permission.PERFORM_CDMA_PROVISIONING"
android:label="@string/permlab_performCdmaProvisioning"
android:description="@string/permdesc_performCdmaProvisioning"
android:protectionLevel="signature|system" />
- <!-- Allows enabling/disabling location update notifications from
+ <!-- @SystemApi Allows enabling/disabling location update notifications from
the radio.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.CONTROL_LOCATION_UPDATES"
@@ -2349,7 +2354,7 @@
android:description="@string/permdesc_locationUpdates"
android:protectionLevel="signature|system" />
- <!-- Allows read/write access to the "properties" table in the checkin
+ <!-- @SystemApi Allows read/write access to the "properties" table in the checkin
database, to change values that get uploaded.
<p>Not for use by third-party applications. -->
<permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"
@@ -2357,21 +2362,21 @@
android:description="@string/permdesc_checkinProperties"
android:protectionLevel="signature|system" />
- <!-- Allows an application to collect component usage
+ <!-- @SystemApi Allows an application to collect component usage
statistics @hide -->
<permission android:name="android.permission.PACKAGE_USAGE_STATS"
android:label="@string/permlab_pkgUsageStats"
android:description="@string/permdesc_pkgUsageStats"
android:protectionLevel="signature|system" />
- <!-- Allows an application to collect battery statistics -->
+ <!-- @SystemApi Allows an application to collect battery statistics -->
<permission android:name="android.permission.BATTERY_STATS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:label="@string/permlab_batteryStats"
android:description="@string/permdesc_batteryStats"
android:protectionLevel="signature|system" />
- <!-- Allows an application to control the backup and restore process.
+ <!-- @SystemApi Allows an application to control the backup and restore process.
<p>Not for use by third-party applications.
@hide pending API council -->
<permission android:name="android.permission.BACKUP"
@@ -2387,14 +2392,14 @@
android:description="@string/permdesc_confirm_full_backup"
android:protectionLevel="signature" />
- <!-- Must be required by a {@link android.widget.RemoteViewsService},
+ <!-- @SystemApi Must be required by a {@link android.widget.RemoteViewsService},
to ensure that only the system can bind to it. -->
<permission android:name="android.permission.BIND_REMOTEVIEWS"
android:label="@string/permlab_bindRemoteViews"
android:description="@string/permdesc_bindRemoteViews"
android:protectionLevel="signature|system" />
- <!-- Allows an application to tell the AppWidget service which application
+ <!-- @SystemApi Allows an application to tell the AppWidget service which application
can access AppWidget's data. The normal user flow is that a user
picks an AppWidget to go into a particular host, thereby giving that
host application access to the private data from the AppWidget app.
@@ -2406,14 +2411,14 @@
android:description="@string/permdesc_bindGadget"
android:protectionLevel="signature|system" />
- <!-- Private permission, to restrict who can bring up a dialog to add a new
+ <!-- @SystemApi Private permission, to restrict who can bring up a dialog to add a new
keyguard widget
@hide -->
<permission android:name="android.permission.BIND_KEYGUARD_APPWIDGET"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="signature|system" />
- <!-- Internal permission allowing an application to query/set which
+ <!-- @SystemApi Internal permission allowing an application to query/set which
applications can bind AppWidgets.
@hide -->
<permission android:name="android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
@@ -2429,7 +2434,7 @@
android:description="@string/permdesc_changeBackgroundDataSetting"
android:label="@string/permlab_changeBackgroundDataSetting" />
- <!-- This permission can be used on content providers to allow the global
+ <!-- @SystemApi This permission can be used on content providers to allow the global
search system to access their data. Typically it used when the
provider has some permissions protecting it (which global search
would not be expected to hold), and added as a read-only permission
@@ -2452,32 +2457,32 @@
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature" />
- <!-- Internal permission to allows an application to read indexable data.
+ <!-- @SystemApi Internal permission to allows an application to read indexable data.
@hide -->
<permission android:name="android.permission.READ_SEARCH_INDEXABLES"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature|system" />
- <!-- Allows applications to set a live wallpaper.
+ <!-- @SystemApi Allows applications to set a live wallpaper.
@hide XXX Change to signature once the picker is moved to its
own apk as Ghod Intended. -->
<permission android:name="android.permission.SET_WALLPAPER_COMPONENT"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature|system" />
- <!-- Allows applications to read dream settings and dream state.
+ <!-- @SystemApi Allows applications to read dream settings and dream state.
@hide -->
<permission android:name="android.permission.READ_DREAM_STATE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature|system" />
- <!-- Allows applications to write dream settings, and start or stop dreaming.
+ <!-- @SystemApi Allows applications to write dream settings, and start or stop dreaming.
@hide -->
<permission android:name="android.permission.WRITE_DREAM_STATE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature|system" />
- <!-- Allow an application to read and write the cache partition.
+ <!-- @SystemApi Allow an application to read and write the cache partition.
@hide -->
<permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM"
android:label="@string/permlab_cache_filesystem"
@@ -2494,13 +2499,13 @@
android:description="@string/permlab_copyProtectedData"
android:protectionLevel="signature" />
- <!-- Internal permission protecting access to the encryption methods
+ <!-- @SystemApi Internal permission protecting access to the encryption methods
@hide
-->
<permission android:name="android.permission.CRYPT_KEEPER"
android:protectionLevel="signature|system" />
- <!-- Allows an application to read historical network usage for
+ <!-- @SystemApi Allows an application to read historical network usage for
specific networks and applications. @hide -->
<permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY"
android:label="@string/permlab_readNetworkUsageHistory"
@@ -2514,7 +2519,7 @@
android:description="@string/permdesc_manageNetworkPolicy"
android:protectionLevel="signature" />
- <!-- Allows an application to account its network traffic against other UIDs. Used
+ <!-- @SystemApi Allows an application to account its network traffic against other UIDs. Used
by system services like download manager and media server. Not for use by
third party apps. @hide -->
<permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING"
@@ -2522,7 +2527,7 @@
android:description="@string/permdesc_modifyNetworkAccounting"
android:protectionLevel="signature|system" />
- <!-- Allows an application to mark traffic as from another user for per user routing.
+ <!-- @SystemApi Allows an application to mark traffic as from another user for per user routing.
Used by system wide services like media server that execute delegated network connections
for users.
@hide
@@ -2539,7 +2544,7 @@
android:protectionLevel="signature" />
<uses-permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE"/>
- <!-- @hide Package verifier needs to have this permission before the PackageManager will
+ <!-- @SystemApi @hide Package verifier needs to have this permission before the PackageManager will
trust it to verify packages.
-->
<permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
@@ -2556,7 +2561,7 @@
android:description="@string/permdesc_bindPackageVerifier"
android:protectionLevel="signature" />
- <!-- Allows applications to access serial ports via the SerialManager.
+ <!-- @SystemApi Allows applications to access serial ports via the SerialManager.
@hide -->
<permission android:name="android.permission.SERIAL_PORT"
android:label="@string/permlab_serialPort"
@@ -2573,7 +2578,8 @@
android:label="@string/permlab_accessContentProvidersExternally"
android:description="@string/permdesc_accessContentProvidersExternally"
android:protectionLevel="signature" />
- <!-- Allows an application to hold an UpdateLock, recommending that a headless
+
+ <!-- @SystemApi Allows an application to hold an UpdateLock, recommending that a headless
OTA reboot *not* occur while the lock is held.
@hide -->
<permission android:name="android.permission.UPDATE_LOCK"
@@ -2581,7 +2587,7 @@
android:description="@string/permdesc_updateLock"
android:protectionLevel="signatureOrSystem" />
- <!-- Allows an application to read the current set of notifications, including
+ <!-- @SystemApi Allows an application to read the current set of notifications, including
any metadata and intents attached.
@hide -->
<permission android:name="android.permission.ACCESS_NOTIFICATIONS"
@@ -2610,7 +2616,7 @@
android:label="@string/permlab_trust_listener"
android:description="@string/permdesc_trust_listener" />
- <!-- Allows an application to provide a trust agent.
+ <!-- @SystemApi Allows an application to provide a trust agent.
@hide For security reasons, this is a platform-only permission. -->
<permission android:name="android.permission.PROVIDE_TRUST_AGENT"
android:protectionLevel="signatureOrSystem"
@@ -2643,7 +2649,7 @@
android:description="@string/permdesc_bindConditionProviderService"
android:protectionLevel="signature" />
- <!-- Allows an application to call into a carrier setup flow. It is up to the
+ <!-- @SystemApi Allows an application to call into a carrier setup flow. It is up to the
carrier setup application to enforce that this permission is required
@hide This is not a third-party API (intended for OEMs and system apps). -->
<permission android:name="android.permission.INVOKE_CARRIER_SETUP"
@@ -2651,14 +2657,14 @@
android:description="@string/permdesc_invokeCarrierSetup"
android:protectionLevel="signature|system" />
- <!-- Allows an application to listen for network condition observations.
+ <!-- @SystemApi Allows an application to listen for network condition observations.
@hide This is not a third-party API (intended for system apps). -->
<permission android:name="android.permission.ACCESS_NETWORK_CONDITIONS"
android:label="@string/permlab_accessNetworkConditions"
android:description="@string/permdesc_accessNetworkConditions"
android:protectionLevel="signature|system" />
- <!-- Allows an application to provision and access DRM certificates
+ <!-- @SystemApi Allows an application to provision and access DRM certificates
@hide This is not a third-party API (intended for system apps). -->
<permission android:name="android.permission.ACCESS_DRM_CERTIFICATES"
android:label="@string/permlab_accessDrmCertificates"
@@ -2682,7 +2688,8 @@
android:theme="@style/Theme.Holo.Dialog.Alert"
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true"
- android:multiprocess="true">
+ android:multiprocess="true"
+ android:documentLaunchMode="never">
<intent-filter>
<action android:name="android.intent.action.CHOOSER" />
<category android:name="android.intent.category.DEFAULT" />
@@ -2704,7 +2711,7 @@
</activity-alias>
<activity-alias android:name="com.android.internal.app.ForwardIntentToManagedProfile"
android:targetActivity="com.android.internal.app.IntentForwarderActivity"
- android:icon="@drawable/work_icon"
+ android:icon="@drawable/ic_afw_icon"
android:exported="true"
android:label="@string/managed_profile_label">
</activity-alias>
@@ -2871,11 +2878,8 @@
</service>
<service android:name="com.android.server.MountServiceIdler"
- android:exported="false"
- android:permission="android.permission.BIND_IDLE_SERVICE" >
- <intent-filter>
- <action android:name="android.service.idle.IdleService" />
- </intent-filter>
+ android:exported="true"
+ android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
</application>
diff --git a/core/res/res/anim/activity_close_enter.xml b/core/res/res/anim/activity_close_enter.xml
index 84e4a19a23c7..a67b0ca38519 100644
--- a/core/res/res/anim/activity_close_enter.xml
+++ b/core/res/res/anim/activity_close_enter.xml
@@ -18,7 +18,8 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
+ <alpha android:fromAlpha="0.7" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="300"/>
+ android:interpolator="@interpolator/linear_out_slow_in"
+ android:duration="250"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_close_exit.xml b/core/res/res/anim/activity_close_exit.xml
index 32f6d3845edf..52c3adf10b4e 100644
--- a/core/res/res/anim/activity_close_exit.xml
+++ b/core/res/res/anim/activity_close_exit.xml
@@ -20,13 +20,13 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" android:zAdjustment="top">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/decelerate_cubic"
+ android:interpolator="@interpolator/accelerate_quart"
+ android:fillEnabled="true"
+ android:fillBefore="false" android:fillAfter="true"
+ android:startOffset="100"
+ android:duration="150"/>
+ <translate android:fromYDelta="0%" android:toYDelta="5%"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="300"/>
- <scale android:fromXScale="1.0" android:toXScale=".8"
- android:fromYScale="1.0" android:toYScale=".8"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="300"/>
+ android:interpolator="@interpolator/accelerate_quint"
+ android:duration="250"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_open_enter.xml b/core/res/res/anim/activity_open_enter.xml
index d553bdfc98ef..1d949d2f7446 100644
--- a/core/res/res/anim/activity_open_enter.xml
+++ b/core/res/res/anim/activity_open_enter.xml
@@ -21,15 +21,12 @@
android:shareInterpolator="false"
android:zAdjustment="top">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:interpolator="@interpolator/decelerate_cubic"
+ android:interpolator="@interpolator/decelerate_quart"
android:fillEnabled="true"
android:fillBefore="false" android:fillAfter="true"
- android:duration="300"/>
- <scale android:fromXScale=".8" android:toXScale="1.0"
- android:fromYScale=".8" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_cubic"
- android:fillEnabled="true"
- android:fillBefore="false" android:fillAfter="true"
- android:duration="300"/>
+ android:duration="200"/>
+ <translate android:fromYDelta="8%" android:toYDelta="0"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/decelerate_quint"
+ android:duration="350"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/activity_open_exit.xml b/core/res/res/anim/activity_open_exit.xml
index 2d105d185baa..3a84197f8f63 100644
--- a/core/res/res/anim/activity_open_exit.xml
+++ b/core/res/res/anim/activity_open_exit.xml
@@ -19,8 +19,8 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#ff000000" android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.7"
android:fillEnabled="true" android:fillBefore="false" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quint"
- android:duration="300"/>
+ android:interpolator="@interpolator/fast_out_slow_in"
+ android:duration="217"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/button_state_list_anim_quantum.xml b/core/res/res/anim/button_state_list_anim_material.xml
index 01989a4edaf1..01989a4edaf1 100644
--- a/core/res/res/anim/button_state_list_anim_quantum.xml
+++ b/core/res/res/anim/button_state_list_anim_material.xml
diff --git a/core/res/res/anim/popup_enter_quantum.xml b/core/res/res/anim/popup_enter_material.xml
index 79de26ba144f..79de26ba144f 100644
--- a/core/res/res/anim/popup_enter_quantum.xml
+++ b/core/res/res/anim/popup_enter_material.xml
diff --git a/core/res/res/anim/popup_exit_quantum.xml b/core/res/res/anim/popup_exit_material.xml
index 7d7d5c5468f9..7d7d5c5468f9 100644
--- a/core/res/res/anim/popup_exit_quantum.xml
+++ b/core/res/res/anim/popup_exit_material.xml
diff --git a/core/res/res/anim/task_close_enter.xml b/core/res/res/anim/task_close_enter.xml
index 9a747a122dd2..b07f470dd5f5 100644
--- a/core/res/res/anim/task_close_enter.xml
+++ b/core/res/res/anim/task_close_enter.xml
@@ -18,25 +18,25 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
+ android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
- <alpha android:fromAlpha="0" android:toAlpha="1.0"
+ <alpha android:fromAlpha="0.6" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quad"
- android:startOffset="300"
- android:duration="400"/>
+ android:interpolator="@interpolator/decelerate_cubic"
+ android:startOffset="600"
+ android:duration="133"/>
- <translate android:fromYDelta="-120%" android:toYDelta="0"
+ <translate android:fromYDelta="10%" android:toYDelta="0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quint"
+ android:interpolator="@interpolator/decelerate_cubic"
android:startOffset="300"
- android:duration="400" />
+ android:duration="433" />
- <scale android:fromXScale=".5" android:toXScale="1.0"
- android:fromYScale=".5" android:toYScale="1.0"
+ <scale android:fromXScale=".9" android:toXScale="1.0"
+ android:fromYScale=".9" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="0%p"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quad"
+ android:interpolator="@interpolator/fast_out_slow_in"
android:startOffset="300"
- android:duration="400" />
+ android:duration="433" />
</set> \ No newline at end of file
diff --git a/core/res/res/anim/task_close_exit.xml b/core/res/res/anim/task_close_exit.xml
index 35b1aa37838c..d23c74ffc160 100644
--- a/core/res/res/anim/task_close_exit.xml
+++ b/core/res/res/anim/task_close_exit.xml
@@ -18,24 +18,18 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
+ android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
<alpha android:fromAlpha="1.0" android:toAlpha="0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:interpolator="@interpolator/accelerate_quad"
- android:duration="300"/>
+ android:startOffset="250"
+ android:duration="167"/>
- <translate android:fromYDelta="0" android:toYDelta="120%"
+ <translate android:fromYDelta="0" android:toYDelta="110%"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/accelerate_cubic"
- android:duration="300"/>
-
- <scale android:fromXScale="1.0" android:toXScale="0.5"
- android:fromYScale="1.0" android:toYScale="0.5"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:pivotX="50%p" android:pivotY="100%p"
- android:interpolator="@interpolator/accelerate_quad"
- android:duration="300" />
+ android:interpolator="@interpolator/accelerate_quint"
+ android:duration="417"/>
<!-- This is needed to keep the animation running while task_open_enter completes -->
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
diff --git a/core/res/res/anim/task_open_enter.xml b/core/res/res/anim/task_open_enter.xml
index 5e4ae1874ec6..8321ea4ad8d5 100644
--- a/core/res/res/anim/task_open_enter.xml
+++ b/core/res/res/anim/task_open_enter.xml
@@ -22,21 +22,13 @@
<alpha android:fromAlpha="0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quad"
+ android:interpolator="@interpolator/decelerate_quart"
android:startOffset="300"
- android:duration="400"/>
+ android:duration="167"/>
- <translate android:fromYDelta="120%" android:toYDelta="0"
+ <translate android:fromYDelta="110%" android:toYDelta="0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:interpolator="@interpolator/decelerate_quint"
android:startOffset="300"
- android:duration="400" />
-
- <scale android:fromXScale=".5" android:toXScale="1.0"
- android:fromYScale=".5" android:toYScale="1.0"
- android:pivotX="50%p" android:pivotY="100%p"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/decelerate_quad"
- android:startOffset="300"
- android:duration="400" />
+ android:duration="417" />
</set> \ No newline at end of file
diff --git a/core/res/res/anim/task_open_exit.xml b/core/res/res/anim/task_open_exit.xml
index 0ba35d72f766..78d0fb015ce3 100644
--- a/core/res/res/anim/task_open_exit.xml
+++ b/core/res/res/anim/task_open_exit.xml
@@ -20,22 +20,22 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="normal">
- <alpha android:fromAlpha="1.0" android:toAlpha="0"
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.6"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:interpolator="@interpolator/accelerate_quad"
- android:duration="300"/>
+ android:interpolator="@interpolator/accelerate_cubic"
+ android:duration="133"/>
- <translate android:fromYDelta="0" android:toYDelta="-120%"
+ <translate android:fromYDelta="0" android:toYDelta="10%"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
android:interpolator="@interpolator/accelerate_cubic"
- android:duration="300"/>
+ android:duration="433"/>
- <scale android:fromXScale="1.0" android:toXScale="0.5"
- android:fromYScale="1.0" android:toYScale="0.5"
+ <scale android:fromXScale="1.0" android:toXScale="0.9"
+ android:fromYScale="1.0" android:toYScale="0.9"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:pivotX="50%p" android:pivotY="0%p"
- android:interpolator="@interpolator/accelerate_quad"
- android:duration="300" />
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:interpolator="@interpolator/fast_out_slow_in"
+ android:duration="433" />
<!-- This is needed to keep the animation running while task_open_enter completes -->
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
diff --git a/core/res/res/anim/wallpaper_open_enter.xml b/core/res/res/anim/wallpaper_open_enter.xml
index 12a1bdfc202f..e70f0e7d54b5 100644
--- a/core/res/res/anim/wallpaper_open_enter.xml
+++ b/core/res/res/anim/wallpaper_open_enter.xml
@@ -21,5 +21,5 @@
android:detachWallpaper="true" android:shareInterpolator="false" android:zAdjustment="normal">
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="375"/>
+ android:duration="225"/>
</set> \ No newline at end of file
diff --git a/core/res/res/anim/wallpaper_open_exit.xml b/core/res/res/anim/wallpaper_open_exit.xml
index b0f97d166c8a..696912b257ac 100644
--- a/core/res/res/anim/wallpaper_open_exit.xml
+++ b/core/res/res/anim/wallpaper_open_exit.xml
@@ -19,14 +19,22 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" android:zAdjustment="top">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@interpolator/accelerate_decelerate"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="200" />
- <scale android:fromXScale="1.0" android:toXScale="0.5"
- android:fromYScale="1.0" android:toYScale="0.5"
- android:pivotX="50%p" android:pivotY="50%p"
- android:interpolator="@interpolator/decelerate_quad"
- android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
- android:duration="375" />
+
+ <alpha android:fromAlpha="1.0" android:toAlpha="0"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/accelerate_quad"
+ android:startOffset="250"
+ android:duration="167"/>
+
+ <translate android:fromYDelta="0" android:toYDelta="110%"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:interpolator="@interpolator/fast_out_linear_in"
+ android:duration="225"/>
+
+ <scale android:fromXScale="1.0" android:toXScale="1.0"
+ android:fromYScale="1.0" android:toYScale="1.0"
+ android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+ android:pivotX="50%p" android:pivotY="50%p"
+ android:interpolator="@interpolator/fast_out_slow_in"
+ android:duration="225" />
</set> \ No newline at end of file
diff --git a/core/res/res/animator/fragment_open_enter.xml b/core/res/res/animator/fragment_open_enter.xml
index 8cd0e4e7e668..4ae24b9e07dd 100644
--- a/core/res/res/animator/fragment_open_enter.xml
+++ b/core/res/res/animator/fragment_open_enter.xml
@@ -19,13 +19,13 @@
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:interpolator="@interpolator/decelerate_cubic"
- android:valueFrom="0.8" android:valueTo="1.0"
+ android:valueFrom="0.95" android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="scaleY"
android:duration="300"/>
<objectAnimator
android:interpolator="@interpolator/decelerate_cubic"
- android:valueFrom="0.8" android:valueTo="1.0"
+ android:valueFrom="0.95" android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="scaleX"
android:duration="300"/>
diff --git a/core/res/res/color/background_cache_hint_selector_quantum_dark.xml b/core/res/res/color/background_cache_hint_selector_material_dark.xml
index ab6650177da1..e7c9426b9dc1 100644
--- a/core/res/res/color/background_cache_hint_selector_quantum_dark.xml
+++ b/core/res/res/color/background_cache_hint_selector_material_dark.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_accelerated="false" android:color="@android:color/background_quantum_dark" />
+ <item android:state_accelerated="false" android:color="@android:color/background_material_dark" />
<item android:color="@android:color/transparent" />
</selector>
diff --git a/core/res/res/color/background_cache_hint_selector_quantum_light.xml b/core/res/res/color/background_cache_hint_selector_material_light.xml
index fb940a9038ac..96f1f5954c3b 100644
--- a/core/res/res/color/background_cache_hint_selector_quantum_light.xml
+++ b/core/res/res/color/background_cache_hint_selector_material_light.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_accelerated="false" android:color="@android:color/background_quantum_light" />
+ <item android:state_accelerated="false" android:color="@android:color/background_material_light" />
<item android:color="@android:color/transparent" />
</selector>
diff --git a/core/res/res/color/btn_default_quantum_dark.xml b/core/res/res/color/btn_default_material_dark.xml
index ec0f140e8361..59555ae27b93 100644
--- a/core/res/res/color/btn_default_quantum_dark.xml
+++ b/core/res/res/color/btn_default_material_dark.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@color/button_quantum_dark"/>
- <item android:color="@color/button_quantum_dark"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@color/button_material_dark"/>
+ <item android:color="@color/button_material_dark"/>
</selector>
diff --git a/core/res/res/color/btn_default_quantum_light.xml b/core/res/res/color/btn_default_material_light.xml
index 9536d242dd01..6511a22ed92f 100644
--- a/core/res/res/color/btn_default_quantum_light.xml
+++ b/core/res/res/color/btn_default_material_light.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@color/button_quantum_light"/>
- <item android:color="@color/button_quantum_light"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@color/button_material_light"/>
+ <item android:color="@color/button_material_light"/>
</selector>
diff --git a/core/res/res/color/primary_text_disable_only_quantum_dark.xml b/core/res/res/color/primary_text_disable_only_material_dark.xml
index 60a91f2cc0db..cf7acaafa0b1 100644
--- a/core/res/res/color/primary_text_disable_only_quantum_dark.xml
+++ b/core/res/res/color/primary_text_disable_only_material_dark.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_dark"/>
- <item android:color="@android:color/bright_foreground_quantum_dark"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_material_dark"/>
+ <item android:color="@android:color/bright_foreground_material_dark"/>
</selector>
diff --git a/core/res/res/color/primary_text_disable_only_quantum_light.xml b/core/res/res/color/primary_text_disable_only_material_light.xml
index ced90517e8f9..bf5d2c0d5c5d 100644
--- a/core/res/res/color/primary_text_disable_only_quantum_light.xml
+++ b/core/res/res/color/primary_text_disable_only_material_light.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_light"/>
- <item android:color="@android:color/bright_foreground_quantum_light"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_material_light"/>
+ <item android:color="@android:color/bright_foreground_material_light"/>
</selector>
diff --git a/core/res/res/color/primary_text_quantum_light.xml b/core/res/res/color/primary_text_material_dark.xml
index 1ec163434b75..caef9d04b648 100644
--- a/core/res/res/color/primary_text_quantum_light.xml
+++ b/core/res/res/color/primary_text_material_dark.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_quantum_light"/>
- <item android:color="@color/primary_text_default_quantum_light"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_material_dark"/>
+ <item android:color="@color/primary_text_default_material_dark"/>
</selector>
diff --git a/core/res/res/color/primary_text_quantum_dark.xml b/core/res/res/color/primary_text_material_light.xml
index 1fcd0e34fdf3..81a593bd812e 100644
--- a/core/res/res/color/primary_text_quantum_dark.xml
+++ b/core/res/res/color/primary_text_material_light.xml
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_quantum_dark"/>
- <item android:color="@color/primary_text_default_quantum_dark"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_material_light"/>
+ <item android:color="@color/primary_text_default_material_light"/>
</selector>
diff --git a/core/res/res/color/search_url_text_quantum_dark.xml b/core/res/res/color/search_url_text_material_dark.xml
index 5263fd70b682..5263fd70b682 100644
--- a/core/res/res/color/search_url_text_quantum_dark.xml
+++ b/core/res/res/color/search_url_text_material_dark.xml
diff --git a/core/res/res/color/search_url_text_quantum_light.xml b/core/res/res/color/search_url_text_material_light.xml
index 5263fd70b682..5263fd70b682 100644
--- a/core/res/res/color/search_url_text_quantum_light.xml
+++ b/core/res/res/color/search_url_text_material_light.xml
diff --git a/core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-hdpi/ab_share_pack_mtrl_alpha.9.png
index b07da0cf092c..b07da0cf092c 100644
--- a/core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/ab_share_pack_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-hdpi/ab_solid_shadow_mtrl_alpha.9.png
index e49ad542eaec..e49ad542eaec 100644
--- a/core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/ab_solid_shadow_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_cab_done_mtrl_alpha.9.png
index 992a8ff85dd8..992a8ff85dd8 100644
--- a/core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/btn_cab_done_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_000.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_000.png
index 3cb407320801..3cb407320801 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_001.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_001.png
index 8fd148052c14..8fd148052c14 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_002.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_002.png
index d35b579006ac..d35b579006ac 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_003.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_003.png
index 543c6bcf55cd..543c6bcf55cd 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_004.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_004.png
index 4fc3c4098496..4fc3c4098496 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_005.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_005.png
index c184535b39cb..c184535b39cb 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_006.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_006.png
index 9f9dd4345355..9f9dd4345355 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_007.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_007.png
index 8c629cea8c6e..8c629cea8c6e 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_008.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_008.png
index 81134b574fd1..81134b574fd1 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_009.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_009.png
index baa586091822..baa586091822 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_010.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_010.png
index d7e283667025..d7e283667025 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_011.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_011.png
index 6f247952a6f8..6f247952a6f8 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_012.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_012.png
index 22f997d83527..22f997d83527 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_013.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_013.png
index 85f4471fdb0a..85f4471fdb0a 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_014.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_014.png
index ad483c9d171e..ad483c9d171e 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_015.png b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_015.png
index f24c2fb4be79..f24c2fb4be79 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_off_qntm_015.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_000.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_000.png
index 7a9e9bd2b96b..7a9e9bd2b96b 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_001.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_001.png
index af0490253e38..af0490253e38 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_002.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_002.png
index 32a6e943566c..32a6e943566c 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_003.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_003.png
index c1b4b3743e00..c1b4b3743e00 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_004.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_004.png
index 34d3adeb3ff4..34d3adeb3ff4 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_005.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_005.png
index 3d5db5378210..3d5db5378210 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_006.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_006.png
index ea354372d277..ea354372d277 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_007.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_007.png
index 48744f82cc0f..48744f82cc0f 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_008.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_008.png
index f65451740c6e..f65451740c6e 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_009.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_009.png
index 16f959ae9a9d..16f959ae9a9d 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_010.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_010.png
index 98c754b77302..98c754b77302 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_011.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_011.png
index 5827dc2141f7..5827dc2141f7 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_012.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_012.png
index 9850d74bb495..9850d74bb495 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_013.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_013.png
index 03ab06b401f7..03ab06b401f7 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_014.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_014.png
index 11cdd88906f6..11cdd88906f6 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_015.png b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_015.png
index 874edbff6221..874edbff6221 100644
--- a/core/res/res/drawable-hdpi/btn_check_to_on_qntm_015.png
+++ b/core/res/res/drawable-hdpi/btn_check_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png
index 7cc3c1121dc9..7cc3c1121dc9 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_default_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_touched_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png
index 70397d21dfb9..70397d21dfb9 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_touched_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_touched_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_mtrl_alpha.9.png
index 171688f8e26e..171688f8e26e 100644
--- a/core/res/res/drawable-hdpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_000.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_000.png
index da88e986cbac..da88e986cbac 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_001.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_001.png
index 907d92d844eb..907d92d844eb 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_002.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_002.png
index 9d24dc16d665..9d24dc16d665 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_003.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_003.png
index 8aa26058e367..8aa26058e367 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_004.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_004.png
index b4cdf022542b..b4cdf022542b 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_005.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_005.png
index 0724ed7ae9ea..0724ed7ae9ea 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_006.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_006.png
index c9bd4e3330b7..c9bd4e3330b7 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_007.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_007.png
index 5630ec38fe3a..5630ec38fe3a 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_008.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_008.png
index 4bf666c0ceec..4bf666c0ceec 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_009.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_009.png
index dffaa077e2ba..dffaa077e2ba 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_010.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_010.png
index 5f86e18c9039..5f86e18c9039 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_011.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_011.png
index 9b50aef2b140..9b50aef2b140 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_012.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_012.png
index 1cf5e7f20416..1cf5e7f20416 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_013.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_013.png
index 2bb641ab4b4e..2bb641ab4b4e 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_014.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_014.png
index 08e7485288b4..08e7485288b4 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_015.png b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_015.png
index 519b5a3db1f8..519b5a3db1f8 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_off_qntm_015.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_000.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_000.png
index 0d3e1e7a16be..0d3e1e7a16be 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_001.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_001.png
index 88c4a9ec59f9..88c4a9ec59f9 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_002.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_002.png
index 8fa2e88f329e..8fa2e88f329e 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_003.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_003.png
index 53dd9d75d659..53dd9d75d659 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_004.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_004.png
index e2351952401b..e2351952401b 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_005.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_005.png
index 172128421455..172128421455 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_006.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_006.png
index 31819fad8921..31819fad8921 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_007.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_007.png
index 5de44b969804..5de44b969804 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_008.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_008.png
index aa20f65467a2..aa20f65467a2 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_009.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_009.png
index c379ba7018f7..c379ba7018f7 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_010.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_010.png
index e23b41029ed6..e23b41029ed6 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_011.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_011.png
index a9543dc43607..a9543dc43607 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_012.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_012.png
index 2473b78aac75..2473b78aac75 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_013.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_013.png
index b4acc9c0b8fd..b4acc9c0b8fd 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_014.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_014.png
index c9cf3442f6ba..c9cf3442f6ba 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_015.png b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_015.png
index a8c390efa22a..a8c390efa22a 100644
--- a/core/res/res/drawable-hdpi/btn_radio_to_on_qntm_015.png
+++ b/core/res/res/drawable-hdpi/btn_radio_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_rating_star_off_mtrl_alpha.png
index 51a895dcb066..51a895dcb066 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_rating_star_on_mtrl_alpha.png
index 2f59488d2b95..2f59488d2b95 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_star_mtrl_alpha.png
index e11896f66e22..e11896f66e22 100644
--- a/core/res/res/drawable-hdpi/btn_star_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/btn_star_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_000.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_000.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_001.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_001.png
index e062f61df370..e062f61df370 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_002.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_002.png
index 7737646ab8ef..7737646ab8ef 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_003.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_003.png
index 65ff45e75f9d..65ff45e75f9d 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_004.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_004.png
index 11aaec068e79..11aaec068e79 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_005.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_005.png
index 9e1b60fb3cfa..9e1b60fb3cfa 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_006.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_006.png
index 1e45687118d5..1e45687118d5 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_007.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_007.png
index 1e45687118d5..1e45687118d5 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_008.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_008.png
index 6c484566e4ba..6c484566e4ba 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_009.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_009.png
index a4d084b300ba..a4d084b300ba 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_010.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_010.png
index 1e1a1b0bd9f2..1e1a1b0bd9f2 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_011.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_011.png
index 1e1a1b0bd9f2..1e1a1b0bd9f2 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_012.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_012.png
index 1e1a1b0bd9f2..1e1a1b0bd9f2 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_013.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_013.png
index 1e1a1b0bd9f2..1e1a1b0bd9f2 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_014.png b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_014.png
index 1e1a1b0bd9f2..1e1a1b0bd9f2 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_off_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_000.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_000.png
index cf09f975391f..cf09f975391f 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_000.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_001.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_001.png
index 3218e6642316..3218e6642316 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_001.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_002.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_002.png
index 0acff03618d8..0acff03618d8 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_002.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_003.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_003.png
index c93adf418230..c93adf418230 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_003.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_004.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_004.png
index 5d8ddc9684b1..5d8ddc9684b1 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_004.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_005.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_005.png
index 47206a41b0e1..47206a41b0e1 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_005.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_006.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_006.png
index 7d6a91f6a885..7d6a91f6a885 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_006.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_007.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_007.png
index e062f61df370..e062f61df370 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_007.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_008.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_008.png
index b0f0dde38251..b0f0dde38251 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_008.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_009.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_009.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_009.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_010.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_010.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_010.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_011.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_011.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_011.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_012.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_012.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_012.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_013.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_013.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_013.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_014.png b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_014.png
index c54f8d777e1e..c54f8d777e1e 100644
--- a/core/res/res/drawable-hdpi/btn_switch_to_on_qntm_014.png
+++ b/core/res/res/drawable-hdpi/btn_switch_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_indicator_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_toggle_indicator_mtrl_alpha.9.png
index 68e17ad88371..68e17ad88371 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_toggle_mtrl_alpha.9.png
index 879d9c29bb46..879d9c29bb46 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-hdpi/expander_close_mtrl_alpha.9.png
index 7bf9d90c80d3..7bf9d90c80d3 100644
--- a/core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/expander_close_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-hdpi/expander_open_mtrl_alpha.9.png
index d427a204fdce..d427a204fdce 100644
--- a/core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/expander_open_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-hdpi/fastscroll_thumb_mtrl_alpha.png
index 2000422dd0f4..2000422dd0f4 100644
--- a/core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/fastscroll_track_mtrl_alpha.9.png
index 61ef6f6bf071..61ef6f6bf071 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_ab_back_mtrl_am_alpha.png
index f0910d896404..f0910d896404 100644
--- a/core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_ab_back_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_afw_icon.png b/core/res/res/drawable-hdpi/ic_afw_icon.png
new file mode 100644
index 000000000000..fc986fed0812
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_afw_icon.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_cab_done_mtrl_alpha.png
index 56354596a889..56354596a889 100644
--- a/core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_cab_done_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_clear_mtrl_alpha.png
index 381356355204..381356355204 100644
--- a/core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_clear_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_commit_search_api_mtrl_alpha.png
index 47263ea749cf..47263ea749cf 100644
--- a/core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_commit_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_corp_badge.png b/core/res/res/drawable-hdpi/ic_corp_badge.png
deleted file mode 100644
index f6473757242f..000000000000
--- a/core/res/res/drawable-hdpi/ic_corp_badge.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_dialog_alert_mtrl_alpha.png
index 95cfb32c9366..95cfb32c9366 100644
--- a/core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_dialog_alert_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_find_next_mtrl_alpha.png
index 6d5edac40386..6d5edac40386 100644
--- a/core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_find_next_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_find_previous_mtrl_alpha.png
index a5921afe8d6f..a5921afe8d6f 100644
--- a/core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_find_previous_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_go_search_api_mtrl_alpha.png
index aa23c591e496..aa23c591e496 100644
--- a/core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_go_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png
index e0a2ba1eefa3..e0a2ba1eefa3 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_alpha.png
index d37e8ee8049f..d37e8ee8049f 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_alpha.png
index 0c604d99b496..0c604d99b496 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_alpha.png
index 2c3f4ff4100a..2c3f4ff4100a 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_alpha.png
index 991c50e14b73..991c50e14b73 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_alpha.png
index 05fb919c46e7..05fb919c46e7 100644
--- a/core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_menu_copy_mtrl_am_alpha.png
index d6d1f2fcaba9..d6d1f2fcaba9 100644
--- a/core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_copy_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_cut_mtrl_alpha.png
index ec8db6f6a3f7..ec8db6f6a3f7 100644
--- a/core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_cut_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_find_mtrl_alpha.png
index 0f9d41f92214..0f9d41f92214 100644
--- a/core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_find_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_mtrl_alpha.png
index 1ba12950c81d..1ba12950c81d 100644
--- a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_menu_paste_mtrl_am_alpha.png
index bf4472209383..bf4472209383 100644
--- a/core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_paste_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_search_mtrl_alpha.png
index a0501b38f22f..a0501b38f22f 100644
--- a/core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_search_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_selectall_mtrl_alpha.png
index 853974182d64..853974182d64 100644
--- a/core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_share_mtrl_alpha.png
index 0eaceddf1605..0eaceddf1605 100644
--- a/core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_menu_share_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_search_api_mtrl_alpha.png
index cac32b5ef7e5..cac32b5ef7e5 100644
--- a/core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_voice_search_api_mtrl_alpha.png
index 25b89355605a..25b89355605a 100644
--- a/core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/ic_voice_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png b/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
index b9b400fb3a01..b9b400fb3a01 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_qntm_alpha.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
index b1601f4e4fae..b1601f4e4fae 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_qntm_alpha.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png
index a038a13bd445..a038a13bd445 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-hdpi/list_divider_mtrl_alpha.9.png
index 77845df97040..77845df97040 100644
--- a/core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/list_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-hdpi/list_section_divider_mtrl_alpha.9.png
index 20baf2a8a4e7..20baf2a8a4e7 100644
--- a/core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/list_section_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_accessibility_features.png b/core/res/res/drawable-hdpi/perm_group_accessibility_features.png
index 7a1948ed186d..c2b5960609a5 100644
--- a/core/res/res/drawable-hdpi/perm_group_accessibility_features.png
+++ b/core/res/res/drawable-hdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_accounts.png b/core/res/res/drawable-hdpi/perm_group_accounts.png
index 68a7c88aab6d..5ac28e7c4c24 100644
--- a/core/res/res/drawable-hdpi/perm_group_accounts.png
+++ b/core/res/res/drawable-hdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_affects_battery.png b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
index 14adad139f94..945b4686db18 100644
--- a/core/res/res/drawable-hdpi/perm_group_affects_battery.png
+++ b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_app_info.png b/core/res/res/drawable-hdpi/perm_group_app_info.png
index a263d33c2370..754529edbf6c 100644
--- a/core/res/res/drawable-hdpi/perm_group_app_info.png
+++ b/core/res/res/drawable-hdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_audio_settings.png b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
index 4e152afd7b5f..7e5808aafadd 100644
--- a/core/res/res/drawable-hdpi/perm_group_audio_settings.png
+++ b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bluetooth.png b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
index 22ab06aaecc1..dac707158f77 100644
--- a/core/res/res/drawable-hdpi/perm_group_bluetooth.png
+++ b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bookmarks.png b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
index 069bd85420fb..0cb0c1d8ba5a 100644
--- a/core/res/res/drawable-hdpi/perm_group_bookmarks.png
+++ b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_calendar.png b/core/res/res/drawable-hdpi/perm_group_calendar.png
index 8fe55e72355f..1ef032fea281 100644
--- a/core/res/res/drawable-hdpi/perm_group_calendar.png
+++ b/core/res/res/drawable-hdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_camera.png b/core/res/res/drawable-hdpi/perm_group_camera.png
index 02031476d487..fb5a2f5dec9b 100644
--- a/core/res/res/drawable-hdpi/perm_group_camera.png
+++ b/core/res/res/drawable-hdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_device_alarms.png b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
index 4010c7a20354..f38c5fe74f38 100644
--- a/core/res/res/drawable-hdpi/perm_group_device_alarms.png
+++ b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_display.png b/core/res/res/drawable-hdpi/perm_group_display.png
index f60c7e2bdd52..c10c5d87ed64 100644
--- a/core/res/res/drawable-hdpi/perm_group_display.png
+++ b/core/res/res/drawable-hdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_location.png b/core/res/res/drawable-hdpi/perm_group_location.png
index 2cc0ba63b5b5..6989b1627ec6 100644
--- a/core/res/res/drawable-hdpi/perm_group_location.png
+++ b/core/res/res/drawable-hdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_messages.png b/core/res/res/drawable-hdpi/perm_group_messages.png
index 013bc8f17f0c..21929b642d33 100644
--- a/core/res/res/drawable-hdpi/perm_group_messages.png
+++ b/core/res/res/drawable-hdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_microphone.png b/core/res/res/drawable-hdpi/perm_group_microphone.png
index c94b0ba3953b..9f8a681afd7c 100644
--- a/core/res/res/drawable-hdpi/perm_group_microphone.png
+++ b/core/res/res/drawable-hdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_network.png b/core/res/res/drawable-hdpi/perm_group_network.png
index f7907ef82638..0ecb7b23708b 100644
--- a/core/res/res/drawable-hdpi/perm_group_network.png
+++ b/core/res/res/drawable-hdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_personal_info.png b/core/res/res/drawable-hdpi/perm_group_personal_info.png
index dcfb1606fd88..e1b8a5b0be6b 100644
--- a/core/res/res/drawable-hdpi/perm_group_personal_info.png
+++ b/core/res/res/drawable-hdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_phone_calls.png b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
index 1decd84fbf33..8fa802eb6247 100644
--- a/core/res/res/drawable-hdpi/perm_group_phone_calls.png
+++ b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_screenlock.png b/core/res/res/drawable-hdpi/perm_group_screenlock.png
index 6abde49cd407..b5a19eec4ac8 100644
--- a/core/res/res/drawable-hdpi/perm_group_screenlock.png
+++ b/core/res/res/drawable-hdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_shortrange_network.png b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
index f7907ef82638..99ca933c5da2 100644
--- a/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
+++ b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_social_info.png b/core/res/res/drawable-hdpi/perm_group_social_info.png
index e7e24885ae4b..dcf67e4aaabd 100644
--- a/core/res/res/drawable-hdpi/perm_group_social_info.png
+++ b/core/res/res/drawable-hdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_status_bar.png b/core/res/res/drawable-hdpi/perm_group_status_bar.png
index 73760b23de0c..e3f6ed9e0b4c 100644
--- a/core/res/res/drawable-hdpi/perm_group_status_bar.png
+++ b/core/res/res/drawable-hdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_storage.png b/core/res/res/drawable-hdpi/perm_group_storage.png
index 642ce2055be0..598e1ccc7c83 100644
--- a/core/res/res/drawable-hdpi/perm_group_storage.png
+++ b/core/res/res/drawable-hdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_sync_settings.png b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
index 0bc15069c9d3..1ca6b173e9df 100644
--- a/core/res/res/drawable-hdpi/perm_group_sync_settings.png
+++ b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_clock.png b/core/res/res/drawable-hdpi/perm_group_system_clock.png
index 7e4e293b7e3b..3dd468274dd2 100644
--- a/core/res/res/drawable-hdpi/perm_group_system_clock.png
+++ b/core/res/res/drawable-hdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_tools.png b/core/res/res/drawable-hdpi/perm_group_system_tools.png
index 00a4c03d3deb..ae1ba2a19ab2 100644
--- a/core/res/res/drawable-hdpi/perm_group_system_tools.png
+++ b/core/res/res/drawable-hdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
index fc41348d2758..62fbcdccc3fe 100644
--- a/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
index 7fa88aaf17d8..c62dd4c1bda9 100644
--- a/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_voicemail.png b/core/res/res/drawable-hdpi/perm_group_voicemail.png
index 0ce5d1dceae5..3b245d642ffb 100644
--- a/core/res/res/drawable-hdpi/perm_group_voicemail.png
+++ b/core/res/res/drawable-hdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_wallpaper.png b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
index 5db0361b6462..e40c4f024ed2 100644
--- a/core/res/res/drawable-hdpi/perm_group_wallpaper.png
+++ b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_background_qntm_mult.9.png b/core/res/res/drawable-hdpi/popup_background_mtrl_mult.9.png
index 385734ee46f7..385734ee46f7 100644
--- a/core/res/res/drawable-hdpi/popup_background_qntm_mult.9.png
+++ b/core/res/res/drawable-hdpi/popup_background_mtrl_mult.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-hdpi/progress_mtrl_alpha.9.png
index b11de9e1c4bc..b11de9e1c4bc 100644
--- a/core/res/res/drawable-hdpi/progress_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/progress_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-hdpi/progress_primary_mtrl_alpha.9.png
index a278ed7a75d9..a278ed7a75d9 100644
--- a/core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_mtrl_alpha.9.png
index a5166f2a911c..a5166f2a911c 100644
--- a/core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/scrollbar_handle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_000.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_000.png
index 281923edc48e..281923edc48e 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_000.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_001.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_001.png
index e91d4fb86948..e91d4fb86948 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_001.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_002.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_002.png
index 15badedfdb4e..15badedfdb4e 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_002.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_003.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_003.png
index 3d5899fb427a..3d5899fb427a 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_003.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_004.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_004.png
index e2277bd9b3f4..e2277bd9b3f4 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_004.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_005.png b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_005.png
index b502e22ded9b..b502e22ded9b 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_from_pressed_qntm_005.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_from_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_off_mtrl_alpha.png
index 5a9952823c10..5a9952823c10 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_off_pressed_mtrl_alpha.png
index 10ce2bcb9c4c..10ce2bcb9c4c 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_on_mtrl_alpha.png
index 79de664548c8..79de664548c8 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_on_pressed_mtrl_alpha.png
index 0678dbb22ca7..0678dbb22ca7 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_000.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_000.png
index a70be2cfd634..a70be2cfd634 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_000.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_001.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_001.png
index 9442316473f9..9442316473f9 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_001.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_002.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_002.png
index 33db4a885cbd..33db4a885cbd 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_002.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_003.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_003.png
index 4e1cd16f1132..4e1cd16f1132 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_003.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_004.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_004.png
index d5254f461af8..d5254f461af8 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_004.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_005.png b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_005.png
index 7aa0a3edebc6..7aa0a3edebc6 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_to_pressed_qntm_005.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_to_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrubber_primary_mtrl_alpha.9.png
index 4cfb1a7c7e1f..4cfb1a7c7e1f 100644
--- a/core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrubber_track_mtrl_alpha.9.png
index 32ddf7a9e06e..32ddf7a9e06e 100644
--- a/core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-hdpi/spinner_mtrl_am_alpha.9.png
index 66673d34f2b1..66673d34f2b1 100644
--- a/core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png
+++ b/core/res/res/drawable-hdpi/spinner_mtrl_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/switch_track_mtrl_alpha.9.png
index ac1fc23f746b..ac1fc23f746b 100644
--- a/core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_indicator_qntm_alpha.9.png b/core/res/res/drawable-hdpi/tab_indicator_mtrl_alpha.9.png
index 21b213579a6a..21b213579a6a 100644
--- a/core/res/res/drawable-hdpi/tab_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/tab_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png
index 0179433e7f1d..0179433e7f1d 100644
--- a/core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_left_mtrl_alpha.png
index 9cdc25b4581d..9cdc25b4581d 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_left_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_middle_mtrl_alpha.png
index df2fdb89535c..df2fdb89535c 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_middle_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_right_mtrl_alpha.png
index 276d48091592..276d48091592 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_right_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_activated_mtrl_alpha.9.png
index 7c77a45d228b..7c77a45d228b 100644
--- a/core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/textfield_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_default_mtrl_alpha.9.png
index bc6da211f159..bc6da211f159 100644
--- a/core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/textfield_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_search_activated_mtrl_alpha.9.png
index 7bcebcd14147..7bcebcd14147 100644
--- a/core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_search_default_mtrl_alpha.9.png
index eb1d94599876..eb1d94599876 100644
--- a/core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-hdpi/textfield_search_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/work_icon.png b/core/res/res/drawable-hdpi/work_icon.png
index e90866becc84..be8a36e8c716 100644
--- a/core/res/res/drawable-hdpi/work_icon.png
+++ b/core/res/res/drawable-hdpi/work_icon.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png b/core/res/res/drawable-ldpi/ab_solid_shadow_mtrl.9.png
index 098a315930a9..098a315930a9 100644
--- a/core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png
+++ b/core/res/res/drawable-ldpi/ab_solid_shadow_mtrl.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png b/core/res/res/drawable-ldpi/ab_transparent_mtrl_alpha.9.png
index 4d4cb4f2d324..4d4cb4f2d324 100644
--- a/core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/ab_transparent_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_check_off_mtrl_alpha.png
index fbe176f728f3..fbe176f728f3 100644
--- a/core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_check_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_check_on_mtrl_alpha.png
index 5fd18e5ba677..5fd18e5ba677 100644
--- a/core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_check_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_qntm_alpha.9.png b/core/res/res/drawable-ldpi/btn_mtrl_alpha.9.png
index 1b648dbed489..1b648dbed489 100644
--- a/core/res/res/drawable-ldpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_off_mtrl_alpha.png
index d17081fddfb7..d17081fddfb7 100644
--- a/core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_radio_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_off_pressed_mtrl_alpha.png
index ac275765bebf..ac275765bebf 100644
--- a/core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_radio_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_on_mtrl_alpha.png
index f31d37f1c189..f31d37f1c189 100644
--- a/core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_radio_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_on_pressed_mtrl_alpha.png
index 458abafaf65a..458abafaf65a 100644
--- a/core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_radio_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_star_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_star_mtrl_alpha.png
index ae665fd669c3..ae665fd669c3 100644
--- a/core/res/res/drawable-ldpi/btn_star_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/btn_star_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-ldpi/expander_close_mtrl_alpha.9.png
index 19ac6f556971..19ac6f556971 100644
--- a/core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/expander_close_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-ldpi/expander_open_mtrl_alpha.9.png
index e51f018cca56..e51f018cca56 100644
--- a/core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/expander_open_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-ldpi/fastscroll_thumb_mtrl_alpha.png
index c901730b55ce..c901730b55ce 100644
--- a/core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/fastscroll_thumb_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-ldpi/fastscroll_track_mtrl_alpha.9.png
index 833dac9445d9..833dac9445d9 100644
--- a/core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/fastscroll_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_ab_back_mtrl_am_alpha.png
index 96e86b6751d1..96e86b6751d1 100644
--- a/core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_ab_back_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_cab_done_mtrl_alpha.png
index 8ee05465c8ec..8ee05465c8ec 100644
--- a/core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_cab_done_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_dialog_alert_mtrl_alpha.png
index f604e8b4dd48..f604e8b4dd48 100644
--- a/core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_dialog_alert_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_find_next_mtrl_alpha.png
index dd6fe2041ead..dd6fe2041ead 100644
--- a/core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_find_next_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_find_previous_mtrl_alpha.png
index d4598ba70686..d4598ba70686 100644
--- a/core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_find_previous_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_menu_copy_mtrl_am_alpha.png
index 565280b3a2c5..565280b3a2c5 100644
--- a/core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_copy_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_cut_mtrl_alpha.png
index dbedece56a16..dbedece56a16 100644
--- a/core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_cut_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_find_mtrl_alpha.png
index c82857788872..c82857788872 100644
--- a/core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_find_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_moreoverflow_mtrl_alpha.png
index d47f81ec6ad7..d47f81ec6ad7 100644
--- a/core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_moreoverflow_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_menu_paste_mtrl_am_alpha.png
index 430141b13083..430141b13083 100644
--- a/core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_paste_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_search_mtrl_alpha.png
index ec759fb8c306..ec759fb8c306 100644
--- a/core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_search_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_selectall_mtrl_alpha.png
index 7b520bc8a866..7b520bc8a866 100644
--- a/core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_selectall_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_share_mtrl_alpha.png
index db1e146991b4..db1e146991b4 100644
--- a/core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/ic_menu_share_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-ldpi/list_divider_mtrl_alpha.9.png
index 77845df97040..77845df97040 100644
--- a/core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/list_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-ldpi/list_section_divider_mtrl_alpha.9.png
index f1a0362575c5..f1a0362575c5 100644
--- a/core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/list_section_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/progress_qntm_alpha.9.png b/core/res/res/drawable-ldpi/progress_mtrl_alpha.9.png
index a58128f44b0a..a58128f44b0a 100644
--- a/core/res/res/drawable-ldpi/progress_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/progress_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-ldpi/progress_primary_mtrl_alpha.9.png
index eb0933b94906..eb0933b94906 100644
--- a/core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/progress_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-ldpi/scrollbar_handle_mtrl_alpha.9.png
index 3e301ef7363d..3e301ef7363d 100644
--- a/core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/scrollbar_handle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_off_mtrl_alpha.png
index bf6ce6c46aef..bf6ce6c46aef 100644
--- a/core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/scrubber_control_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_off_pressed_mtrl_alpha.png
index df88c4eb0d23..df88c4eb0d23 100644
--- a/core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/scrubber_control_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_on_mtrl_alpha.png
index 85a06b9d0eee..85a06b9d0eee 100644
--- a/core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/scrubber_control_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_on_pressed_mtrl_alpha.png
index 458abafaf65a..458abafaf65a 100644
--- a/core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-ldpi/scrubber_control_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-ldpi/scrubber_primary_mtrl_alpha.9.png
index 6f997906d154..6f997906d154 100644
--- a/core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/scrubber_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-ldpi/spinner_mtrl_am_alpha.9.png
index 368a9b09b4ec..368a9b09b4ec 100644
--- a/core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png
+++ b/core/res/res/drawable-ldpi/spinner_mtrl_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_off_mtrl_alpha.9.png
index 9cd2df3eb590..9cd2df3eb590 100644
--- a/core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/switch_off_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_on_mtrl_alpha.9.png
index f9b287a2c5b2..f9b287a2c5b2 100644
--- a/core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/switch_on_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_track_mtrl_alpha.9.png
index a58128f44b0a..a58128f44b0a 100644
--- a/core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-ldpi/text_cursor_mtrl_alpha.9.png
index 4aaa79f20e59..4aaa79f20e59 100644
--- a/core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/text_cursor_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-ldpi/textfield_activated_mtrl_alpha.9.png
index d12ec067adad..d12ec067adad 100644
--- a/core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/textfield_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-ldpi/textfield_default_mtrl_alpha.9.png
index 6f0c57f4d9d6..6f0c57f4d9d6 100644
--- a/core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-ldpi/textfield_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-mdpi/ab_share_pack_mtrl_alpha.9.png
index f31730dcc549..f31730dcc549 100644
--- a/core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/ab_share_pack_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-mdpi/ab_solid_shadow_mtrl_alpha.9.png
index ebdea0098054..ebdea0098054 100644
--- a/core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/ab_solid_shadow_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_cab_done_mtrl_alpha.9.png
index 5903856d80e0..5903856d80e0 100644
--- a/core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/btn_cab_done_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_000.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_000.png
index 97598180770e..97598180770e 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_001.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_001.png
index 4eb2c4f975c3..4eb2c4f975c3 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_002.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_002.png
index e6d6b426b376..e6d6b426b376 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_003.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_003.png
index 03cb23aee156..03cb23aee156 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_004.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_004.png
index bfe3c3df7ae4..bfe3c3df7ae4 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_005.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_005.png
index 65bdf42f21f9..65bdf42f21f9 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_006.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_006.png
index 44f9614b103f..44f9614b103f 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_007.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_007.png
index cf8ec3828932..cf8ec3828932 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_008.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_008.png
index 4d624b34982b..4d624b34982b 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_009.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_009.png
index 7c4eb7f047ea..7c4eb7f047ea 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_010.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_010.png
index e90dd310e623..e90dd310e623 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_011.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_011.png
index 831c0e86fbb1..831c0e86fbb1 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_012.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_012.png
index 7355dfd6296a..7355dfd6296a 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_013.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_013.png
index be71a69795bd..be71a69795bd 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_014.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_014.png
index a4a185bc85b7..a4a185bc85b7 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_015.png b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_015.png
index 8d0386f575cb..8d0386f575cb 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_off_qntm_015.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_000.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_000.png
index 70793c474816..70793c474816 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_001.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_001.png
index 632082b8ad3a..632082b8ad3a 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_002.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_002.png
index e7fc5fbb402f..e7fc5fbb402f 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_003.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_003.png
index 91a0a33935e0..91a0a33935e0 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_004.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_004.png
index 3bd90d6d5a49..3bd90d6d5a49 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_005.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_005.png
index 5ac39ecac6d4..5ac39ecac6d4 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_006.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_006.png
index 418198348f89..418198348f89 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_007.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_007.png
index c8b04df5938b..c8b04df5938b 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_008.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_008.png
index b7b3a9f2f857..b7b3a9f2f857 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_009.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_009.png
index 62bc4eda6299..62bc4eda6299 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_010.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_010.png
index ac463ad1405c..ac463ad1405c 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_011.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_011.png
index 12b605dcc27b..12b605dcc27b 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_012.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_012.png
index 63a3c6ae0315..63a3c6ae0315 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_013.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_013.png
index 17660c49a366..17660c49a366 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_014.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_014.png
index 7d9de3d1161a..7d9de3d1161a 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_015.png b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_015.png
index 8aa1be2b6d84..8aa1be2b6d84 100644
--- a/core/res/res/drawable-mdpi/btn_check_to_on_qntm_015.png
+++ b/core/res/res/drawable-mdpi/btn_check_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_default_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_code_lock_default_mtrl_alpha.png
index 14d0b32b6e3d..14d0b32b6e3d 100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_default_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png
index 9cfbdf9470db..9cfbdf9470db 100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_mtrl_alpha.9.png
index fc51595d40e8..fc51595d40e8 100644
--- a/core/res/res/drawable-mdpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_on_mtrl_alpha.png
index 04a8edb66c80..04a8edb66c80 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_mtrl_alpha.png
index 3c304bfd5258..3c304bfd5258 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_000.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_000.png
index a2b7fcee3b52..a2b7fcee3b52 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_001.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_001.png
index fe0d3b1f81fc..fe0d3b1f81fc 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_002.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_002.png
index d66d00d603b2..d66d00d603b2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_003.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_003.png
index 2f2f5cdffd48..2f2f5cdffd48 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_004.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_004.png
index 72c9495e634d..72c9495e634d 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_005.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_005.png
index 7d9090f61486..7d9090f61486 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_006.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_006.png
index c5442e8fbf8d..c5442e8fbf8d 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_007.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_007.png
index ca80cdb81277..ca80cdb81277 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_008.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_008.png
index d41a10b3175b..d41a10b3175b 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_009.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_009.png
index 262c8386b6d4..262c8386b6d4 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_010.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_010.png
index 7f6ea8bad9e4..7f6ea8bad9e4 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_011.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_011.png
index 8d50a81750f5..8d50a81750f5 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_012.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_012.png
index 0725a68e28a9..0725a68e28a9 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_013.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_013.png
index 6191a4bdeea2..6191a4bdeea2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_014.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_014.png
index 1904d740f1f4..1904d740f1f4 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_015.png b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_015.png
index bec8dda9bfc9..bec8dda9bfc9 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_off_qntm_015.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_000.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_000.png
index 54ef48082e73..54ef48082e73 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_001.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_001.png
index 55c516372262..55c516372262 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_002.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_002.png
index 0fe2a897b063..0fe2a897b063 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_003.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_003.png
index 86efab744b95..86efab744b95 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_004.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_004.png
index c0a5ca58c405..c0a5ca58c405 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_005.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_005.png
index ec55175df1a6..ec55175df1a6 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_006.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_006.png
index 3e4a6907d1e6..3e4a6907d1e6 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_007.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_007.png
index da49734da8b0..da49734da8b0 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_008.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_008.png
index 471cda1f9d68..471cda1f9d68 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_009.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_009.png
index d5602621d3db..d5602621d3db 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_010.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_010.png
index f6096b475a0a..f6096b475a0a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_011.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_011.png
index 9e2500bf1668..9e2500bf1668 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_012.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_012.png
index efbac9949e14..efbac9949e14 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_013.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_013.png
index 676f0ca9280a..676f0ca9280a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_014.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_014.png
index 4803157bb7fb..4803157bb7fb 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_015.png b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_015.png
index 4f8a162a0b45..4f8a162a0b45 100644
--- a/core/res/res/drawable-mdpi/btn_radio_to_on_qntm_015.png
+++ b/core/res/res/drawable-mdpi/btn_radio_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_rating_star_off_mtrl_alpha.png
index d38aed243f01..d38aed243f01 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_rating_star_on_mtrl_alpha.png
index 87dade392c8e..87dade392c8e 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_star_mtrl_alpha.png
index 7ce950db6a09..7ce950db6a09 100644
--- a/core/res/res/drawable-mdpi/btn_star_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/btn_star_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_000.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_000.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_001.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_001.png
index 36171684c06f..36171684c06f 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_002.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_002.png
index e4366f447ca1..e4366f447ca1 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_003.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_003.png
index ea4533b3ac88..ea4533b3ac88 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_004.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_004.png
index 94aedbbb23c1..94aedbbb23c1 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_005.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_005.png
index ef84578953b6..ef84578953b6 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_006.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_006.png
index 4de2321cf181..4de2321cf181 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_007.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_007.png
index 4de2321cf181..4de2321cf181 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_008.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_008.png
index d62fbd510b2b..d62fbd510b2b 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_009.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_009.png
index 3d87c4e932f2..3d87c4e932f2 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_010.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_010.png
index 536ed46bcd5c..536ed46bcd5c 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_011.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_011.png
index 536ed46bcd5c..536ed46bcd5c 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_012.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_012.png
index 536ed46bcd5c..536ed46bcd5c 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_013.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_013.png
index 536ed46bcd5c..536ed46bcd5c 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_014.png b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_014.png
index 536ed46bcd5c..536ed46bcd5c 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_off_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_000.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_000.png
index f5b660d56c31..f5b660d56c31 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_000.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_001.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_001.png
index 9e4db6c51e78..9e4db6c51e78 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_001.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_002.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_002.png
index 7de21283ddf5..7de21283ddf5 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_002.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_003.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_003.png
index 1980c2ceca1e..1980c2ceca1e 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_003.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_004.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_004.png
index 6e73ef038ba1..6e73ef038ba1 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_004.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_005.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_005.png
index f89739282ea1..f89739282ea1 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_005.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_006.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_006.png
index 74a6ebd70d28..74a6ebd70d28 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_006.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_007.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_007.png
index 36171684c06f..36171684c06f 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_007.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_008.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_008.png
index 884eb666f88e..884eb666f88e 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_008.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_009.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_009.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_009.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_010.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_010.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_010.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_011.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_011.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_011.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_012.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_012.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_012.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_013.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_013.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_013.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_014.png b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_014.png
index 8c3f26c3d4dd..8c3f26c3d4dd 100644
--- a/core/res/res/drawable-mdpi/btn_switch_to_on_qntm_014.png
+++ b/core/res/res/drawable-mdpi/btn_switch_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_indicator_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_toggle_indicator_mtrl_alpha.9.png
index e5bfaced9bcb..e5bfaced9bcb 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_toggle_mtrl_alpha.9.png
index dca86eae0d33..dca86eae0d33 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-mdpi/expander_close_mtrl_alpha.9.png
index 6070397cc84e..6070397cc84e 100644
--- a/core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/expander_close_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-mdpi/expander_open_mtrl_alpha.9.png
index 29a3a1a459e6..29a3a1a459e6 100644
--- a/core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/expander_open_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-mdpi/fastscroll_thumb_mtrl_alpha.png
index 4984f9c04563..4984f9c04563 100644
--- a/core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/fastscroll_track_mtrl_alpha.9.png
index 404180821c40..404180821c40 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_ab_back_mtrl_am_alpha.png
index e196bbee20f7..e196bbee20f7 100644
--- a/core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_ab_back_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_afw_icon.png b/core/res/res/drawable-mdpi/ic_afw_icon.png
new file mode 100644
index 000000000000..deb7966a9148
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_afw_icon.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_cab_done_mtrl_alpha.png
index 541184a7cea7..541184a7cea7 100644
--- a/core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_cab_done_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_clear_mtrl_alpha.png
index d43e4d1fa266..d43e4d1fa266 100644
--- a/core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_clear_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_commit_search_api_mtrl_alpha.png
index 42ac8ca683d9..42ac8ca683d9 100644
--- a/core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_commit_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_dialog_alert_mtrl_alpha.png
index 8a882f907b4a..8a882f907b4a 100644
--- a/core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_dialog_alert_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_find_next_mtrl_alpha.png
index 1cfdb3fe6140..1cfdb3fe6140 100644
--- a/core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_find_next_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_find_previous_mtrl_alpha.png
index 0d3c009d0767..0d3c009d0767 100644
--- a/core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_find_previous_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_go_search_api_mtrl_alpha.png
index b5f61765867d..b5f61765867d 100644
--- a/core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_go_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_alpha.png
index ec4304737060..ec4304737060 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png
index a652117aa3fe..a652117aa3fe 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png
index 35d1c56f8221..35d1c56f8221 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png
index 264188b7dcff..264188b7dcff 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png
index 06ae66594203..06ae66594203 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png
index a69e301631db..a69e301631db 100644
--- a/core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_menu_copy_mtrl_am_alpha.png
index 3fae32dc8b44..3fae32dc8b44 100644
--- a/core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_copy_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_cut_mtrl_alpha.png
index 61ff6316ab9f..61ff6316ab9f 100644
--- a/core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_cut_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_find_mtrl_alpha.png
index 6be897d23315..6be897d23315 100644
--- a/core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_find_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_mtrl_alpha.png
index 841509682598..841509682598 100644
--- a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_menu_paste_mtrl_am_alpha.png
index 112c26887985..112c26887985 100644
--- a/core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_paste_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_search_mtrl_alpha.png
index c5de7683c146..c5de7683c146 100644
--- a/core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_search_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_selectall_mtrl_alpha.png
index 64149563e80a..64149563e80a 100644
--- a/core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_share_mtrl_alpha.png
index e0d5ac4e5e66..e0d5ac4e5e66 100644
--- a/core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_menu_share_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_search_api_mtrl_alpha.png
index 9137fea85ee4..9137fea85ee4 100644
--- a/core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_voice_search_api_mtrl_alpha.png
index 3f1eee39e20c..3f1eee39e20c 100644
--- a/core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/ic_voice_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
index 2fb1325216fa..2fb1325216fa 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_qntm_alpha.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
index 07d4afd694f7..07d4afd694f7 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_qntm_alpha.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png
index ea8c2b4ed8a5..ea8c2b4ed8a5 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-mdpi/list_divider_mtrl_alpha.9.png
index 77845df97040..77845df97040 100644
--- a/core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/list_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-mdpi/list_section_divider_mtrl_alpha.9.png
index 11ae4f4055bd..11ae4f4055bd 100644
--- a/core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/list_section_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_accessibility_features.png b/core/res/res/drawable-mdpi/perm_group_accessibility_features.png
index df5c14778185..57c4167151c5 100644
--- a/core/res/res/drawable-mdpi/perm_group_accessibility_features.png
+++ b/core/res/res/drawable-mdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_accounts.png b/core/res/res/drawable-mdpi/perm_group_accounts.png
index 0c4dd02e9fb5..ce4e6838ec63 100644
--- a/core/res/res/drawable-mdpi/perm_group_accounts.png
+++ b/core/res/res/drawable-mdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_affects_battery.png b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
index 511921d9234a..55a0b798558e 100644
--- a/core/res/res/drawable-mdpi/perm_group_affects_battery.png
+++ b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_app_info.png b/core/res/res/drawable-mdpi/perm_group_app_info.png
index e715177a4deb..8393586edc90 100644
--- a/core/res/res/drawable-mdpi/perm_group_app_info.png
+++ b/core/res/res/drawable-mdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_audio_settings.png b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
index 26ff28ea1f24..734429f6c9a1 100644
--- a/core/res/res/drawable-mdpi/perm_group_audio_settings.png
+++ b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bluetooth.png b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
index effa4056dbd1..4b79c1a6cc29 100644
--- a/core/res/res/drawable-mdpi/perm_group_bluetooth.png
+++ b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bookmarks.png b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
index 21036320d6f4..ca3d45368786 100644
--- a/core/res/res/drawable-mdpi/perm_group_bookmarks.png
+++ b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_calendar.png b/core/res/res/drawable-mdpi/perm_group_calendar.png
index e22fd7f0c91b..d2ad9d69e073 100644
--- a/core/res/res/drawable-mdpi/perm_group_calendar.png
+++ b/core/res/res/drawable-mdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_camera.png b/core/res/res/drawable-mdpi/perm_group_camera.png
index 463654bb4abb..1727cf127be5 100644
--- a/core/res/res/drawable-mdpi/perm_group_camera.png
+++ b/core/res/res/drawable-mdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_device_alarms.png b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
index 134813181b03..48339cd776d6 100644
--- a/core/res/res/drawable-mdpi/perm_group_device_alarms.png
+++ b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_display.png b/core/res/res/drawable-mdpi/perm_group_display.png
index ea51240f1cee..9738f15fcc24 100644
--- a/core/res/res/drawable-mdpi/perm_group_display.png
+++ b/core/res/res/drawable-mdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_location.png b/core/res/res/drawable-mdpi/perm_group_location.png
index 2fcb1249c15a..7ad1e029c237 100644
--- a/core/res/res/drawable-mdpi/perm_group_location.png
+++ b/core/res/res/drawable-mdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_messages.png b/core/res/res/drawable-mdpi/perm_group_messages.png
index 6f3ecf83bec9..12c5d88c0a11 100644
--- a/core/res/res/drawable-mdpi/perm_group_messages.png
+++ b/core/res/res/drawable-mdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_microphone.png b/core/res/res/drawable-mdpi/perm_group_microphone.png
index b4717a360a31..f6015b556c96 100644
--- a/core/res/res/drawable-mdpi/perm_group_microphone.png
+++ b/core/res/res/drawable-mdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_network.png b/core/res/res/drawable-mdpi/perm_group_network.png
index a624e4255cc8..c575d703d4b0 100644
--- a/core/res/res/drawable-mdpi/perm_group_network.png
+++ b/core/res/res/drawable-mdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_personal_info.png b/core/res/res/drawable-mdpi/perm_group_personal_info.png
index cf56fa50d76e..13ec27e3c744 100644
--- a/core/res/res/drawable-mdpi/perm_group_personal_info.png
+++ b/core/res/res/drawable-mdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_phone_calls.png b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
index 467f37f00bc7..e373c2cfb4af 100644
--- a/core/res/res/drawable-mdpi/perm_group_phone_calls.png
+++ b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_screenlock.png b/core/res/res/drawable-mdpi/perm_group_screenlock.png
index f8b351e1bf41..9d9bb756a83f 100644
--- a/core/res/res/drawable-mdpi/perm_group_screenlock.png
+++ b/core/res/res/drawable-mdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_shortrange_network.png b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
index a624e4255cc8..5d35676b3eb6 100644
--- a/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
+++ b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_social_info.png b/core/res/res/drawable-mdpi/perm_group_social_info.png
index 8ae10f114909..4ca0767136aa 100644
--- a/core/res/res/drawable-mdpi/perm_group_social_info.png
+++ b/core/res/res/drawable-mdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_status_bar.png b/core/res/res/drawable-mdpi/perm_group_status_bar.png
index 86868ab24bdd..f10536b36780 100644
--- a/core/res/res/drawable-mdpi/perm_group_status_bar.png
+++ b/core/res/res/drawable-mdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_storage.png b/core/res/res/drawable-mdpi/perm_group_storage.png
index 61ff8a34e235..b7a06fbb3934 100644
--- a/core/res/res/drawable-mdpi/perm_group_storage.png
+++ b/core/res/res/drawable-mdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_sync_settings.png b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
index 9049f47f4c3e..f5ef82b24e2f 100644
--- a/core/res/res/drawable-mdpi/perm_group_sync_settings.png
+++ b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_clock.png b/core/res/res/drawable-mdpi/perm_group_system_clock.png
index 554dd0fc6513..3a676428a7b7 100644
--- a/core/res/res/drawable-mdpi/perm_group_system_clock.png
+++ b/core/res/res/drawable-mdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_tools.png b/core/res/res/drawable-mdpi/perm_group_system_tools.png
index 845a5935b8eb..fd282e612459 100644
--- a/core/res/res/drawable-mdpi/perm_group_system_tools.png
+++ b/core/res/res/drawable-mdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
index 188343de6ab6..a303dc1afd57 100644
--- a/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
index 04b9cdc54e63..2fc4056457b7 100644
--- a/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_voicemail.png b/core/res/res/drawable-mdpi/perm_group_voicemail.png
index 163046bce128..108a72586c68 100644
--- a/core/res/res/drawable-mdpi/perm_group_voicemail.png
+++ b/core/res/res/drawable-mdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_wallpaper.png b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
index 5b96e08acdcf..aa06f3888aa2 100644
--- a/core/res/res/drawable-mdpi/perm_group_wallpaper.png
+++ b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_background_qntm_mult.9.png b/core/res/res/drawable-mdpi/popup_background_mtrl_mult.9.png
index e9204993dc43..e9204993dc43 100644
--- a/core/res/res/drawable-mdpi/popup_background_qntm_mult.9.png
+++ b/core/res/res/drawable-mdpi/popup_background_mtrl_mult.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-mdpi/progress_mtrl_alpha.9.png
index 8991421d0445..8991421d0445 100644
--- a/core/res/res/drawable-mdpi/progress_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/progress_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-mdpi/progress_primary_mtrl_alpha.9.png
index 07cbed8eda7c..07cbed8eda7c 100644
--- a/core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_mtrl_alpha.9.png
index 1834b2e9606a..1834b2e9606a 100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_000.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_000.png
index 377a6b4dace6..377a6b4dace6 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_000.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_001.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_001.png
index 0859f6283bad..0859f6283bad 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_001.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_002.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_002.png
index bf5cdcd03772..bf5cdcd03772 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_002.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_003.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_003.png
index 4cd177d6aae1..4cd177d6aae1 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_003.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_004.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_004.png
index dfe39cabdef6..dfe39cabdef6 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_004.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_005.png b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_005.png
index 5d3ab9988aec..5d3ab9988aec 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_from_pressed_qntm_005.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_from_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_off_mtrl_alpha.png
index e40cba8999c2..e40cba8999c2 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_off_pressed_mtrl_alpha.png
index 1f4b46ad0792..1f4b46ad0792 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_on_mtrl_alpha.png
index 437a3e3dde7c..437a3e3dde7c 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_on_pressed_mtrl_alpha.png
index 3c304bfd5258..3c304bfd5258 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_000.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_000.png
index 80922eb13053..80922eb13053 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_000.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_001.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_001.png
index aa7704478579..aa7704478579 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_001.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_002.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_002.png
index 7b099dbf532e..7b099dbf532e 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_002.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_003.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_003.png
index 088c86aa6eef..088c86aa6eef 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_003.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_004.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_004.png
index 3c6b9bcb64e1..3c6b9bcb64e1 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_004.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_005.png b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_005.png
index adf51004f270..adf51004f270 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_to_pressed_qntm_005.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_to_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrubber_primary_mtrl_alpha.9.png
index a4ab0a1e395f..a4ab0a1e395f 100644
--- a/core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrubber_track_mtrl_alpha.9.png
index db9e172d3bcc..db9e172d3bcc 100644
--- a/core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-mdpi/spinner_mtrl_am_alpha.9.png
index 5e245bced3a0..5e245bced3a0 100644
--- a/core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png
+++ b/core/res/res/drawable-mdpi/spinner_mtrl_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/switch_track_mtrl_alpha.9.png
index b6538e453cf6..b6538e453cf6 100644
--- a/core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_indicator_qntm_alpha.9.png b/core/res/res/drawable-mdpi/tab_indicator_mtrl_alpha.9.png
index b69529cb7841..b69529cb7841 100644
--- a/core/res/res/drawable-mdpi/tab_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/tab_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png
index e5760be70067..e5760be70067 100644
--- a/core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_left_mtrl_alpha.png
index 95c0168cdc36..95c0168cdc36 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_left_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_middle_mtrl_alpha.png
index e54d32ee2050..e54d32ee2050 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_middle_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_right_mtrl_alpha.png
index 569332abfeaa..569332abfeaa 100644
--- a/core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png
+++ b/core/res/res/drawable-mdpi/text_select_handle_right_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_activated_mtrl_alpha.9.png
index 7a722950f8fa..7a722950f8fa 100644
--- a/core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/textfield_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_default_mtrl_alpha.9.png
index 483931fa6b69..483931fa6b69 100644
--- a/core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/textfield_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_search_activated_mtrl_alpha.9.png
index ef4ebc0f03ed..ef4ebc0f03ed 100644
--- a/core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_search_default_mtrl_alpha.9.png
index 9ddbcf5e422e..9ddbcf5e422e 100644
--- a/core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/ab_share_pack_mtrl_alpha.9.png
index 8337ffe7f0f3..8337ffe7f0f3 100644
--- a/core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/ab_share_pack_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/ab_solid_shadow_mtrl_alpha.9.png
index f51af638f647..f51af638f647 100644
--- a/core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/ab_solid_shadow_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_mtrl_alpha.9.png
index d0d0b1e3ec6f..d0d0b1e3ec6f 100644
--- a/core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/btn_cab_done_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_000.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_000.png
index 2347643c5a02..2347643c5a02 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_001.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_001.png
index 70aaa01b3b6c..70aaa01b3b6c 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_002.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_002.png
index 01e498a166f7..01e498a166f7 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_003.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_003.png
index 71d1cf72d3f1..71d1cf72d3f1 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_004.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_004.png
index d1e7b1de597b..d1e7b1de597b 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_005.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_005.png
index 7db7d06fda50..7db7d06fda50 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_006.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_006.png
index dadb62edb139..dadb62edb139 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_007.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_007.png
index f87f74457f57..f87f74457f57 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_008.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_008.png
index be99d87fc7a1..be99d87fc7a1 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_009.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_009.png
index f83bc0533728..f83bc0533728 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_010.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_010.png
index 870071d858e6..870071d858e6 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_011.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_011.png
index 3a18414e8d05..3a18414e8d05 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_012.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_012.png
index f3d1187184d6..f3d1187184d6 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_013.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_013.png
index 4078cca97719..4078cca97719 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_014.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_014.png
index d4849b51abcf..d4849b51abcf 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_015.png b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_015.png
index 6e2af72dd59e..6e2af72dd59e 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_off_qntm_015.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_000.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_000.png
index 9244174b9105..9244174b9105 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_001.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_001.png
index 8c7fe9563f74..8c7fe9563f74 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_002.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_002.png
index 71eb1d0c1304..71eb1d0c1304 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_003.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_003.png
index 613f38af1104..613f38af1104 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_004.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_004.png
index 2d20ccca93a9..2d20ccca93a9 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_005.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_005.png
index 407f78db8bc9..407f78db8bc9 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_006.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_006.png
index 1bf24b01b9ef..1bf24b01b9ef 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_007.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_007.png
index a450bd02d16f..a450bd02d16f 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_008.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_008.png
index 63ba593f26f9..63ba593f26f9 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_009.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_009.png
index 6d05e5aed625..6d05e5aed625 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_010.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_010.png
index 1c8cd8f8df8b..1c8cd8f8df8b 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_011.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_011.png
index b8bc56432396..b8bc56432396 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_012.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_012.png
index 3d801282ec6c..3d801282ec6c 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_013.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_013.png
index c21dfbaa8734..c21dfbaa8734 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_014.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_014.png
index 2dfe90d1df03..2dfe90d1df03 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_015.png b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_015.png
index 5f40d737d7f0..5f40d737d7f0 100644
--- a/core/res/res/drawable-xhdpi/btn_check_to_on_qntm_015.png
+++ b/core/res/res/drawable-xhdpi/btn_check_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_default_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_code_lock_default_mtrl_alpha.png
index 0c457b4459f9..0c457b4459f9 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_default_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_touched_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png
index 020d699fa6e8..020d699fa6e8 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_touched_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_touched_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_mtrl_alpha.9.png
index 30d732a30b19..30d732a30b19 100644
--- a/core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_on_mtrl_alpha.png
index be4aaf34fe53..be4aaf34fe53 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_mtrl_alpha.png
index a7ed0f880383..a7ed0f880383 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_000.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_000.png
index b54c6ffa8f87..b54c6ffa8f87 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_001.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_001.png
index fff70569d6a4..fff70569d6a4 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_002.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_002.png
index 026462d6a2fe..026462d6a2fe 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_003.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_003.png
index 26cc8dea8212..26cc8dea8212 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_004.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_004.png
index c055fff5912f..c055fff5912f 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_005.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_005.png
index a22e780b449d..a22e780b449d 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_006.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_006.png
index 357374c098d0..357374c098d0 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_007.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_007.png
index 71d4667b8e02..71d4667b8e02 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_008.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_008.png
index 2ed175e9fe67..2ed175e9fe67 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_009.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_009.png
index e0f7d8e799bc..e0f7d8e799bc 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_010.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_010.png
index 62b057840e4c..62b057840e4c 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_011.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_011.png
index 4d6ef4a2eb41..4d6ef4a2eb41 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_012.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_012.png
index 37cee2dcd16d..37cee2dcd16d 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_013.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_013.png
index a8bc25f6dccb..a8bc25f6dccb 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_014.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_014.png
index cf68d9364362..cf68d9364362 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_015.png b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_015.png
index 96834bcbe1a5..96834bcbe1a5 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_off_qntm_015.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_000.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_000.png
index d068dbeb8cee..d068dbeb8cee 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_001.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_001.png
index 4aabb1efdcbb..4aabb1efdcbb 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_002.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_002.png
index bbac8e40a0bb..bbac8e40a0bb 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_003.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_003.png
index 2fc745988f17..2fc745988f17 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_004.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_004.png
index 83c6d0ea4d97..83c6d0ea4d97 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_005.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_005.png
index 45c08d7bac34..45c08d7bac34 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_006.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_006.png
index 05b7dfb71970..05b7dfb71970 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_007.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_007.png
index baf9964df339..baf9964df339 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_008.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_008.png
index d6e0369a6d98..d6e0369a6d98 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_009.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_009.png
index 3f352703a4be..3f352703a4be 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_010.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_010.png
index a5b34dc91f0f..a5b34dc91f0f 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_011.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_011.png
index 361967baf61f..361967baf61f 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_012.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_012.png
index c478bb7669f0..c478bb7669f0 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_013.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_013.png
index 075fa0c985ae..075fa0c985ae 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_014.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_014.png
index d9e364bd0efc..d9e364bd0efc 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_015.png b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_015.png
index 99244967ed94..99244967ed94 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_to_on_qntm_015.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_mtrl_alpha.png
index 33ec44c89a17..33ec44c89a17 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_mtrl_alpha.png
index 0166d70cde97..0166d70cde97 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_star_mtrl_alpha.png
index a85bc069add9..a85bc069add9 100644
--- a/core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/btn_star_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_000.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_000.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_001.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_001.png
index 7bd99fe8c35a..7bd99fe8c35a 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_002.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_002.png
index 2ef623bcbde9..2ef623bcbde9 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_003.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_003.png
index 19db3e0633bc..19db3e0633bc 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_004.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_004.png
index 984c3c5ed008..984c3c5ed008 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_005.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_005.png
index 645419000454..645419000454 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_006.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_006.png
index cee939377417..cee939377417 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_007.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_007.png
index cee939377417..cee939377417 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_008.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_008.png
index 437ffdd1ba25..437ffdd1ba25 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_009.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_009.png
index d2e14ad75509..d2e14ad75509 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_010.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_010.png
index 4e2f5bc005f0..4e2f5bc005f0 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_011.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_011.png
index 4e2f5bc005f0..4e2f5bc005f0 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_012.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_012.png
index 4e2f5bc005f0..4e2f5bc005f0 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_013.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_013.png
index 4e2f5bc005f0..4e2f5bc005f0 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_014.png b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_014.png
index 4e2f5bc005f0..4e2f5bc005f0 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_off_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_000.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_000.png
index f1bcfa30c139..f1bcfa30c139 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_001.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_001.png
index ede2fecab72a..ede2fecab72a 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_002.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_002.png
index 94ce01730c73..94ce01730c73 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_003.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_003.png
index 647cfe3a7f40..647cfe3a7f40 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_004.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_004.png
index b3bf92363612..b3bf92363612 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_005.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_005.png
index ae95b2be8ca1..ae95b2be8ca1 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_006.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_006.png
index b8e4bd62ecdb..b8e4bd62ecdb 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_006.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_007.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_007.png
index ec6d6d7ecaec..ec6d6d7ecaec 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_007.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_008.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_008.png
index c0e493f4b3ec..c0e493f4b3ec 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_008.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_009.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_009.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_009.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_010.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_010.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_010.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_011.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_011.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_011.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_012.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_012.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_012.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_013.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_013.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_013.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_014.png b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_014.png
index 2494fd413ef7..2494fd413ef7 100644
--- a/core/res/res/drawable-xhdpi/btn_switch_to_on_qntm_014.png
+++ b/core/res/res/drawable-xhdpi/btn_switch_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_indicator_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_toggle_indicator_mtrl_alpha.9.png
index dff391fe8c5c..dff391fe8c5c 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_toggle_mtrl_alpha.9.png
index b135338b31e4..b135338b31e4 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/expander_close_mtrl_alpha.9.png
index 43dccf311a85..43dccf311a85 100644
--- a/core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/expander_close_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/expander_open_mtrl_alpha.9.png
index 181be1a59db0..181be1a59db0 100644
--- a/core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/expander_open_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_mtrl_alpha.png
index 9534f78363cf..9534f78363cf 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_mtrl_alpha.9.png
index 02f017483acc..02f017483acc 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_ab_back_mtrl_am_alpha.png
index 4385b2bec2b2..4385b2bec2b2 100644
--- a/core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_ab_back_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_afw_icon.png b/core/res/res/drawable-xhdpi/ic_afw_icon.png
new file mode 100644
index 000000000000..ec4f44b1a452
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_afw_icon.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_cab_done_mtrl_alpha.png
index 3d6d734eae48..3d6d734eae48 100644
--- a/core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_cab_done_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_clear_mtrl_alpha.png
index ddacb59ff51d..ddacb59ff51d 100644
--- a/core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_clear_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_commit_search_api_mtrl_alpha.png
index c10a1b723d6e..c10a1b723d6e 100644
--- a/core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_commit_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_corp_badge.png b/core/res/res/drawable-xhdpi/ic_corp_badge.png
deleted file mode 100644
index 80d848df9912..000000000000
--- a/core/res/res/drawable-xhdpi/ic_corp_badge.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_dialog_alert_mtrl_alpha.png
index 2229bf311084..2229bf311084 100644
--- a/core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_dialog_alert_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_find_next_mtrl_alpha.png
index 9038282d0f39..9038282d0f39 100644
--- a/core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_find_next_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_find_previous_mtrl_alpha.png
index 579347f253e9..579347f253e9 100644
--- a/core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_find_previous_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_go_search_api_mtrl_alpha.png
index bd80981c3c4b..bd80981c3c4b 100644
--- a/core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_go_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_alpha.png
index a020d64f1e93..a020d64f1e93 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png
index e75ffb811e04..e75ffb811e04 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png
index 1b9fc1258296..1b9fc1258296 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png
index f63d47e13a04..f63d47e13a04 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png
index fe005d94231a..fe005d94231a 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png
index ea86408b4fd5..ea86408b4fd5 100644
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_copy_mtrl_am_alpha.png
index b690d7c56f95..b690d7c56f95 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_copy_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_cut_mtrl_alpha.png
index 10c206746af0..10c206746af0 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_cut_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_find_mtrl_alpha.png
index dd5460f1b3e1..dd5460f1b3e1 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_find_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_mtrl_alpha.png
index f91b718478ac..f91b718478ac 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_paste_mtrl_am_alpha.png
index 4024627238cf..4024627238cf 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_paste_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_search_mtrl_alpha.png
index 4602b35f17e1..4602b35f17e1 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_search_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_selectall_mtrl_alpha.png
index f7c026181418..f7c026181418 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_selectall_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_share_mtrl_alpha.png
index 7accf52ac310..7accf52ac310 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_share_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_search_api_mtrl_alpha.png
index 513ee8ba7910..513ee8ba7910 100644
--- a/core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_voice_search_api_mtrl_alpha.png
index c1c23d04d905..c1c23d04d905 100644
--- a/core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/ic_voice_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
index fda5e37f6743..fda5e37f6743 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_qntm_alpha.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
index 75d0221d6cfe..75d0221d6cfe 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_qntm_alpha.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png
index 225799b44000..225799b44000 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/list_divider_mtrl_alpha.9.png
index 77845df97040..77845df97040 100644
--- a/core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/list_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/list_section_divider_mtrl_alpha.9.png
index e053b392d47c..e053b392d47c 100644
--- a/core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/list_section_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png b/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png
index 9edbada1699f..53a12a186214 100644
--- a/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png
+++ b/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_accounts.png b/core/res/res/drawable-xhdpi/perm_group_accounts.png
index b2cad91abc39..ca622e9886ad 100644
--- a/core/res/res/drawable-xhdpi/perm_group_accounts.png
+++ b/core/res/res/drawable-xhdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_affects_battery.png b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
index 123e0a2e24f0..3527aa7c30d5 100644
--- a/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
+++ b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_app_info.png b/core/res/res/drawable-xhdpi/perm_group_app_info.png
index 83736339794c..902b795a0e86 100644
--- a/core/res/res/drawable-xhdpi/perm_group_app_info.png
+++ b/core/res/res/drawable-xhdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_audio_settings.png b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
index 7c103953ab43..8100212ab80c 100644
--- a/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
+++ b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bluetooth.png b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
index ce58d66a71fc..754da87b67f0 100644
--- a/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
+++ b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bookmarks.png b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
index db28d89a7a87..44525bc2f220 100644
--- a/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
+++ b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_calendar.png b/core/res/res/drawable-xhdpi/perm_group_calendar.png
index d49b88372e7b..9821c2723f85 100644
--- a/core/res/res/drawable-xhdpi/perm_group_calendar.png
+++ b/core/res/res/drawable-xhdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_camera.png b/core/res/res/drawable-xhdpi/perm_group_camera.png
index 5287e0033257..23b7167e40a9 100644
--- a/core/res/res/drawable-xhdpi/perm_group_camera.png
+++ b/core/res/res/drawable-xhdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_device_alarms.png b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
index c52148d61bcb..615578e5c63e 100644
--- a/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
+++ b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_display.png b/core/res/res/drawable-xhdpi/perm_group_display.png
index 90fcc73d9e46..14892139eb68 100644
--- a/core/res/res/drawable-xhdpi/perm_group_display.png
+++ b/core/res/res/drawable-xhdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_location.png b/core/res/res/drawable-xhdpi/perm_group_location.png
index 99dbcbcacc85..d949cdbad7de 100644
--- a/core/res/res/drawable-xhdpi/perm_group_location.png
+++ b/core/res/res/drawable-xhdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_messages.png b/core/res/res/drawable-xhdpi/perm_group_messages.png
index c674d543a4d0..dbb9aba62252 100644
--- a/core/res/res/drawable-xhdpi/perm_group_messages.png
+++ b/core/res/res/drawable-xhdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_microphone.png b/core/res/res/drawable-xhdpi/perm_group_microphone.png
index 9c2a6b68e698..8887a418eb70 100644
--- a/core/res/res/drawable-xhdpi/perm_group_microphone.png
+++ b/core/res/res/drawable-xhdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_network.png b/core/res/res/drawable-xhdpi/perm_group_network.png
index 855788907963..ebe034fc0ef9 100644
--- a/core/res/res/drawable-xhdpi/perm_group_network.png
+++ b/core/res/res/drawable-xhdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_personal_info.png b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
index 3a1419a7609b..5ae4111a140b 100644
--- a/core/res/res/drawable-xhdpi/perm_group_personal_info.png
+++ b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_phone_calls.png b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
index 9a2490574776..9e1d2caf39fb 100644
--- a/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
+++ b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_screenlock.png b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
index 49f526e56642..96d6873b2c76 100644
--- a/core/res/res/drawable-xhdpi/perm_group_screenlock.png
+++ b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
index 855788907963..2f0c2d91e068 100644
--- a/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
+++ b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_social_info.png b/core/res/res/drawable-xhdpi/perm_group_social_info.png
index 1ecda401d91d..842662c25e84 100644
--- a/core/res/res/drawable-xhdpi/perm_group_social_info.png
+++ b/core/res/res/drawable-xhdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_status_bar.png b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
index 19a611be3117..810332025017 100644
--- a/core/res/res/drawable-xhdpi/perm_group_status_bar.png
+++ b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_storage.png b/core/res/res/drawable-xhdpi/perm_group_storage.png
index 85753f10b969..a2d4d5e9b3d7 100644
--- a/core/res/res/drawable-xhdpi/perm_group_storage.png
+++ b/core/res/res/drawable-xhdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_sync_settings.png b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
index 7249716c8609..252a2a01d7e4 100644
--- a/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
+++ b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_clock.png b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
index bf829e4cf1bf..da8a9152e7ff 100644
--- a/core/res/res/drawable-xhdpi/perm_group_system_clock.png
+++ b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_tools.png b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
index 8a942b62b79b..047c60cf801d 100644
--- a/core/res/res/drawable-xhdpi/perm_group_system_tools.png
+++ b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
index 345b29f256df..35d7d5fd9872 100644
--- a/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
index f0a98a3129a1..74e25ac09c10 100644
--- a/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_voicemail.png b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
index 53417baa956a..430964d642fd 100644
--- a/core/res/res/drawable-xhdpi/perm_group_voicemail.png
+++ b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_wallpaper.png b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
index 6cac9bf5a6ac..3b698d89b952 100644
--- a/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
+++ b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_background_qntm_mult.9.png b/core/res/res/drawable-xhdpi/popup_background_mtrl_mult.9.png
index a081ceb95dbe..a081ceb95dbe 100644
--- a/core/res/res/drawable-xhdpi/popup_background_qntm_mult.9.png
+++ b/core/res/res/drawable-xhdpi/popup_background_mtrl_mult.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/progress_mtrl_alpha.9.png
index 4970f5673d0e..4970f5673d0e 100644
--- a/core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/progress_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/progress_primary_mtrl_alpha.9.png
index 5c7e5cd29f52..5c7e5cd29f52 100644
--- a/core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/progress_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_mtrl_alpha.9.png
index 3c816c7d3ee9..3c816c7d3ee9 100644
--- a/core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_000.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_000.png
index ea09a31327cc..ea09a31327cc 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_001.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_001.png
index f9a4391c0c90..f9a4391c0c90 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_002.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_002.png
index d9606e1207f7..d9606e1207f7 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_003.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_003.png
index df2d9d0be5dd..df2d9d0be5dd 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_004.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_004.png
index 625a32200e8a..625a32200e8a 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_005.png b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_005.png
index 79e8dde5f1cf..79e8dde5f1cf 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_from_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_off_mtrl_alpha.png
index 729e0bfa01a4..729e0bfa01a4 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_mtrl_alpha.png
index 754b32137794..754b32137794 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_on_mtrl_alpha.png
index d018a7cf1a2a..d018a7cf1a2a 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_mtrl_alpha.png
index a7ed0f880383..a7ed0f880383 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_000.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_000.png
index e99c2661238d..e99c2661238d 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_000.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_001.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_001.png
index f0329a40fc2d..f0329a40fc2d 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_001.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_002.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_002.png
index 42c40b79f72e..42c40b79f72e 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_002.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_003.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_003.png
index 807491f21100..807491f21100 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_003.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_004.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_004.png
index dfec9cc4db03..dfec9cc4db03 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_004.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_005.png b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_005.png
index 0ed59ea24fbf..0ed59ea24fbf 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_qntm_005.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_to_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrubber_primary_mtrl_alpha.9.png
index 2b4734d25ed4..2b4734d25ed4 100644
--- a/core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrubber_track_mtrl_alpha.9.png
index 805cb291f5e2..805cb291f5e2 100644
--- a/core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/scrubber_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-xhdpi/spinner_mtrl_am_alpha.9.png
index 79a260bf03a1..79a260bf03a1 100644
--- a/core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_mtrl_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/switch_track_mtrl_alpha.9.png
index d6a0ab27e632..d6a0ab27e632 100644
--- a/core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_indicator_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/tab_indicator_mtrl_alpha.9.png
index 5610d8c8d2ec..5610d8c8d2ec 100644
--- a/core/res/res/drawable-xhdpi/tab_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/tab_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png
index 39392149d2e8..39392149d2e8 100644
--- a/core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_left_mtrl_alpha.png
index a01ac1030a5c..a01ac1030a5c 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_left_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_middle_mtrl_alpha.png
index c1ca323b4a16..c1ca323b4a16 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_middle_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_right_mtrl_alpha.png
index d3602d9888ec..d3602d9888ec 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_right_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_activated_mtrl_alpha.9.png
index 16c376a41e34..16c376a41e34 100644
--- a/core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_default_mtrl_alpha.9.png
index e3bd904608f2..e3bd904608f2 100644
--- a/core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_search_activated_mtrl_alpha.9.png
index 1a2546fe8958..1a2546fe8958 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_search_default_mtrl_alpha.9.png
index 500ec3325637..500ec3325637 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_search_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/ab_share_pack_mtrl_alpha.9.png
index 469f7361627c..469f7361627c 100644
--- a/core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/ab_share_pack_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/ab_solid_shadow_mtrl_alpha.9.png
index e8a94dc27d0a..e8a94dc27d0a 100644
--- a/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/ab_solid_shadow_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_cab_done_mtrl_alpha.9.png
index e1c55add43ad..e1c55add43ad 100644
--- a/core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_cab_done_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_000.png
index b75438101a22..b75438101a22 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_001.png
index 517d7a7cf3f2..517d7a7cf3f2 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_002.png
index 2c1d5b608985..2c1d5b608985 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_003.png
index 0c6ff7ef9e2a..0c6ff7ef9e2a 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_004.png
index 07966019a1f7..07966019a1f7 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_005.png
index 9b4e0f8f748a..9b4e0f8f748a 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_006.png
index 25767eb5b3fd..25767eb5b3fd 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_007.png
index cd0951f593dc..cd0951f593dc 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_008.png
index 9ae8165f0369..9ae8165f0369 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_009.png
index efd9bc6f9faf..efd9bc6f9faf 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_010.png
index fccbc9dce08f..fccbc9dce08f 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_011.png
index dddafca50ca3..dddafca50ca3 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_012.png
index 7e37433dd1de..7e37433dd1de 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_013.png
index 9bc22def39b2..9bc22def39b2 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_014.png
index 507ed108b9fc..507ed108b9fc 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_015.png b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_015.png
index 6a21c7fca1ca..6a21c7fca1ca 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_off_qntm_015.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_000.png
index 0d544d90b068..0d544d90b068 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_001.png
index 39da0ac74f9d..39da0ac74f9d 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_002.png
index d5ada1242e34..d5ada1242e34 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_003.png
index d4e096c9b47d..d4e096c9b47d 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_004.png
index 468a9b479d22..468a9b479d22 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_005.png
index ea3cd2edf313..ea3cd2edf313 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_006.png
index 0652cb098f83..0652cb098f83 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_007.png
index 768d2b06a5f3..768d2b06a5f3 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_008.png
index 1d06a905774c..1d06a905774c 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_009.png
index 8a70a80f529a..8a70a80f529a 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_010.png
index bf9ec7fcd8b7..bf9ec7fcd8b7 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_011.png
index cff07b9e21e3..cff07b9e21e3 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_012.png
index 40f997e21b81..40f997e21b81 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_013.png
index 6ba84ec58bb9..6ba84ec58bb9 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_014.png
index 766610e543f1..766610e543f1 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_015.png b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_015.png
index 810a02942f66..810a02942f66 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_to_on_qntm_015.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_code_lock_default_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png
index 1b6c9b573df5..1b6c9b573df5 100755
--- a/core/res/res/drawable-xxhdpi/btn_code_lock_default_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_code_lock_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_code_lock_touched_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_code_lock_touched_mtrl_alpha.png
index dd13af8a9c0c..dd13af8a9c0c 100755
--- a/core/res/res/drawable-xxhdpi/btn_code_lock_touched_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_code_lock_touched_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_mtrl_alpha.9.png
index 7d29d1823b8f..7d29d1823b8f 100644
--- a/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00000_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00000_mtrl_alpha.png
index 4779944d8b56..4779944d8b56 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00000_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00000_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00001_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00001_mtrl_alpha.png
index 866f7b7aa67a..866f7b7aa67a 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00001_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00001_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00002_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00002_mtrl_alpha.png
index 76aae5799688..76aae5799688 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00002_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00002_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00003_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00003_mtrl_alpha.png
index 0cd470a12cda..0cd470a12cda 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00003_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00003_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00004_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00004_mtrl_alpha.png
index 0015b3921172..0015b3921172 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00004_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00004_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00005_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00005_mtrl_alpha.png
index 2f69f5b12c39..2f69f5b12c39 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00005_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00005_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00006_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00006_mtrl_alpha.png
index 77142fdc96b4..77142fdc96b4 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00006_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00006_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00007_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00007_mtrl_alpha.png
index 2f812778ca1a..2f812778ca1a 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00007_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00007_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00008_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00008_mtrl_alpha.png
index d37fe60a498d..d37fe60a498d 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00008_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00008_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00009_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00009_mtrl_alpha.png
index cb620799c319..cb620799c319 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00009_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00009_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00010_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00010_mtrl_alpha.png
index 82dc42859a55..82dc42859a55 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00010_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00010_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00011_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00011_mtrl_alpha.png
index 2cba2fb7adae..2cba2fb7adae 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00011_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00011_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00012_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00012_mtrl_alpha.png
index 5de19529a92b..5de19529a92b 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00012_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00012_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00013_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00013_mtrl_alpha.png
index 1c22a1728fbb..1c22a1728fbb 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00013_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00013_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00014_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00014_mtrl_alpha.png
index 7f652fc8ef94..7f652fc8ef94 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00014_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00014_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_anim_00015_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_anim_00015_mtrl_alpha.png
index 076acbd0d512..076acbd0d512 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_anim_00015_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_anim_00015_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_000.png
index cbc3833946d2..cbc3833946d2 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_001.png
index 4243895ce74c..4243895ce74c 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_002.png
index b522d371fa77..b522d371fa77 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_003.png
index 647b965ecb0e..647b965ecb0e 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_004.png
index a31749704f3f..a31749704f3f 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_005.png
index 0e4b25f33348..0e4b25f33348 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_006.png
index 6e279d9aa273..6e279d9aa273 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_007.png
index f0840cc862f9..f0840cc862f9 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_008.png
index 140e9e8c8982..140e9e8c8982 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_009.png
index 5cf8ec5994e0..5cf8ec5994e0 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_010.png
index f9624d863629..f9624d863629 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_011.png
index 899df8cef33c..899df8cef33c 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_012.png
index 6543e1cb13fd..6543e1cb13fd 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_013.png
index cd758ddee2a5..cd758ddee2a5 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_014.png
index 72d950cbb271..72d950cbb271 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_015.png b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_015.png
index 07bdbc970ba4..07bdbc970ba4 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_off_qntm_015.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_000.png
index c9af24b3f2fa..c9af24b3f2fa 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_001.png
index 01de3f5b9e9f..01de3f5b9e9f 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_002.png
index f428bc57c526..f428bc57c526 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_003.png
index ab5c0083ba9e..ab5c0083ba9e 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_004.png
index 5b157cf01609..5b157cf01609 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_005.png
index 1210be200fdf..1210be200fdf 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_006.png
index e6b4140a0eaa..e6b4140a0eaa 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_007.png
index b678e0805905..b678e0805905 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_008.png
index 6ca2a69e6f02..6ca2a69e6f02 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_009.png
index 7de608e828e1..7de608e828e1 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_010.png
index b2bbcceb6b45..b2bbcceb6b45 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_011.png
index 6950db3cb817..6950db3cb817 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_012.png
index c79075699315..c79075699315 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_013.png
index ed5d888bfd57..ed5d888bfd57 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_014.png
index 81a4a63b3fad..81a4a63b3fad 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_015.png b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_015.png
index db1d93af6709..db1d93af6709 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_to_on_qntm_015.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_rating_star_off_mtrl_alpha.png
index 4b49faf1d6b7..4b49faf1d6b7 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_rating_star_on_mtrl_alpha.png
index 561d9ef27e5a..561d9ef27e5a 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_star_mtrl_alpha.png
index 7488ff95fb90..7488ff95fb90 100644
--- a/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/btn_star_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_000.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_001.png
index eff3dd0c90ef..eff3dd0c90ef 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_002.png
index 000a23a75817..000a23a75817 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_003.png
index 394d661d57de..394d661d57de 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_004.png
index 4e7311d00c62..4e7311d00c62 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_005.png
index d9dcf91c6f41..d9dcf91c6f41 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_006.png
index 674142e62afe..674142e62afe 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_007.png
index 674142e62afe..674142e62afe 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_008.png
index 9d4026aa0c5d..9d4026aa0c5d 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_009.png
index bb4b4266ca22..bb4b4266ca22 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_010.png
index a37076d7e8cb..a37076d7e8cb 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_011.png
index a37076d7e8cb..a37076d7e8cb 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_012.png
index a37076d7e8cb..a37076d7e8cb 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_013.png
index a37076d7e8cb..a37076d7e8cb 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_014.png
index a37076d7e8cb..a37076d7e8cb 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_000.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_000.png
index 22e995130095..22e995130095 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_001.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_001.png
index 14e6b397bc94..14e6b397bc94 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_002.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_002.png
index 86b2c01afd43..86b2c01afd43 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_003.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_003.png
index 1c565df50609..1c565df50609 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_004.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_004.png
index b825449d2c69..b825449d2c69 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_005.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_005.png
index 170c2343f701..170c2343f701 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_006.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_006.png
index 54770075547b..54770075547b 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_007.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_007.png
index eff3dd0c90ef..eff3dd0c90ef 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_008.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_008.png
index e3fd96aeb9e5..e3fd96aeb9e5 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_009.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_009.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_010.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_010.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_011.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_011.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_012.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_012.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_013.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_013.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_014.png b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_014.png
index 198ac07c00e2..198ac07c00e2 100644
--- a/core/res/res/drawable-xxhdpi/btn_switch_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxhdpi/btn_switch_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_indicator_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_indicator_mtrl_alpha.9.png
index 0d6a39ad497c..0d6a39ad497c 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_mtrl_alpha.9.png
index f235aed7ca8a..f235aed7ca8a 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_close_mtrl_alpha.9.png
index e78fff65d277..e78fff65d277 100644
--- a/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/expander_close_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_open_mtrl_alpha.9.png
index a3d09657b99b..a3d09657b99b 100644
--- a/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/expander_open_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-xxhdpi/fastscroll_thumb_mtrl_alpha.png
index 55a73e744aae..55a73e744aae 100644
--- a/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/fastscroll_thumb_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/fastscroll_track_mtrl_alpha.9.png
index be64a94a8b0c..be64a94a8b0c 100644
--- a/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/fastscroll_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_ab_back_mtrl_am_alpha.png
index ca15853f073e..ca15853f073e 100644
--- a/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_ab_back_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_afw_icon.png b/core/res/res/drawable-xxhdpi/ic_afw_icon.png
new file mode 100644
index 000000000000..688837790051
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_afw_icon.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_cab_done_mtrl_alpha.png
index 1f9c734187ac..1f9c734187ac 100644
--- a/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_cab_done_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_clear_mtrl_alpha.png
index 21ed91440ff3..21ed91440ff3 100644
--- a/core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_clear_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_commit_search_api_mtrl_alpha.png
index fc1b8b442676..fc1b8b442676 100644
--- a/core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_commit_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_corp_badge.png b/core/res/res/drawable-xxhdpi/ic_corp_badge.png
deleted file mode 100644
index 885e2ac76cfb..000000000000
--- a/core/res/res/drawable-xxhdpi/ic_corp_badge.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_dialog_alert_mtrl_alpha.png
index 10e07562e95f..10e07562e95f 100644
--- a/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_dialog_alert_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_next_mtrl_alpha.png
index e3a7e9e68f77..e3a7e9e68f77 100644
--- a/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_find_next_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_previous_mtrl_alpha.png
index f9cf16cf011c..f9cf16cf011c 100644
--- a/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_find_previous_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_go_search_api_mtrl_alpha.png
index 8e1ab5bbfb07..8e1ab5bbfb07 100644
--- a/core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_go_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_alpha.png
index 6fad4a641e81..6fad4a641e81 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png
index 44d98d56d2b5..44d98d56d2b5 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png
index c807b50ad076..c807b50ad076 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png
index d54f44acb84b..d54f44acb84b 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png
index 17c1d9945b12..17c1d9945b12 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png
index 906401e6f03f..906401e6f03f 100644
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_copy_mtrl_am_alpha.png
index 7c3a58b29c87..7c3a58b29c87 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_copy_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_cut_mtrl_alpha.png
index 2200642f863a..2200642f863a 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_cut_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_find_mtrl_alpha.png
index d35b337f2f80..d35b337f2f80 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_find_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_mtrl_alpha.png
index ff1759b8f94a..ff1759b8f94a 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_paste_mtrl_am_alpha.png
index 28c0ae0ee600..28c0ae0ee600 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_paste_mtrl_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_search_mtrl_alpha.png
index cb295a3f1a3d..cb295a3f1a3d 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_search_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_selectall_mtrl_alpha.png
index 6430d450ca95..6430d450ca95 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_selectall_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_share_mtrl_alpha.png
index 66f7d1627b55..66f7d1627b55 100644
--- a/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_menu_share_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_search_api_mtrl_alpha.png
index 81b13aa55567..81b13aa55567 100644
--- a/core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_voice_search_api_mtrl_alpha.png
index d95f1d03c14e..d95f1d03c14e 100644
--- a/core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/ic_voice_search_api_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
index d3e80be41aa5..d3e80be41aa5 100644
--- a/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_qntm_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
index a11b6ddfdcaf..a11b6ddfdcaf 100644
--- a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_default_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_qntm_alpha.png b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png
index eae7ea895131..eae7ea895131 100644
--- a/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/indicator_code_lock_point_area_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_divider_mtrl_alpha.9.png
index 0fafd1a049df..0fafd1a049df 100644
--- a/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/list_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_section_divider_mtrl_alpha.9.png
index 491fab9358a5..491fab9358a5 100644
--- a/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/list_section_divider_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_accessibility_features.png b/core/res/res/drawable-xxhdpi/perm_group_accessibility_features.png
index 75cfa8f2b9d4..5a63b68f8ee4 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_accessibility_features.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_accounts.png b/core/res/res/drawable-xxhdpi/perm_group_accounts.png
index 148c5d183aad..2fc3baa02c7a 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_accounts.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_affects_battery.png b/core/res/res/drawable-xxhdpi/perm_group_affects_battery.png
index b453a9781105..63561be92e9f 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_affects_battery.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_app_info.png b/core/res/res/drawable-xxhdpi/perm_group_app_info.png
index c723e781ce71..fc407f3b9dbc 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_app_info.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_audio_settings.png b/core/res/res/drawable-xxhdpi/perm_group_audio_settings.png
index 36109e598290..23b5d9788a29 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_audio_settings.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_bluetooth.png b/core/res/res/drawable-xxhdpi/perm_group_bluetooth.png
index f5450106dd35..2dc9b230c98c 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_bluetooth.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_bookmarks.png b/core/res/res/drawable-xxhdpi/perm_group_bookmarks.png
index ddfcfd549038..883bad30cdd6 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_bookmarks.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_calendar.png b/core/res/res/drawable-xxhdpi/perm_group_calendar.png
index 75f7f772e398..08f047410ef8 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_calendar.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_camera.png b/core/res/res/drawable-xxhdpi/perm_group_camera.png
index 2ee83f6da42e..88a3d0e9a563 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_camera.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_device_alarms.png b/core/res/res/drawable-xxhdpi/perm_group_device_alarms.png
index 4218c296f5e5..12ab22f84c66 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_device_alarms.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_display.png b/core/res/res/drawable-xxhdpi/perm_group_display.png
index a03e6705775d..44e695eac921 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_display.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_location.png b/core/res/res/drawable-xxhdpi/perm_group_location.png
index 4ac3fb405209..3a83d8bdfa9b 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_location.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_messages.png b/core/res/res/drawable-xxhdpi/perm_group_messages.png
index f406a9d5db7d..9e2ef73da431 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_messages.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_microphone.png b/core/res/res/drawable-xxhdpi/perm_group_microphone.png
index 6137b8695d7e..65a6bf221cfa 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_microphone.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_network.png b/core/res/res/drawable-xxhdpi/perm_group_network.png
index 72d2ef0d217a..4bdb1bad25f8 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_network.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_personal_info.png b/core/res/res/drawable-xxhdpi/perm_group_personal_info.png
index fe18ec9763ea..c81a2a537dbd 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_personal_info.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_phone_calls.png b/core/res/res/drawable-xxhdpi/perm_group_phone_calls.png
index acfa435d7c74..e4daafb02bcd 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_phone_calls.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_screenlock.png b/core/res/res/drawable-xxhdpi/perm_group_screenlock.png
index 2fd88ff5f2fd..3097363b5e96 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_screenlock.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_shortrange_network.png b/core/res/res/drawable-xxhdpi/perm_group_shortrange_network.png
index 72d2ef0d217a..6b21718f44b5 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_shortrange_network.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_social_info.png b/core/res/res/drawable-xxhdpi/perm_group_social_info.png
index 73076e0c827a..076fd194030a 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_social_info.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_status_bar.png b/core/res/res/drawable-xxhdpi/perm_group_status_bar.png
index 380fd66c90a7..eda264b1d6c0 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_status_bar.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_storage.png b/core/res/res/drawable-xxhdpi/perm_group_storage.png
index b2da3aecdab9..837211e74722 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_storage.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_sync_settings.png b/core/res/res/drawable-xxhdpi/perm_group_sync_settings.png
index 60aecd17b7b6..15ab0fc1d11a 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_sync_settings.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_system_clock.png b/core/res/res/drawable-xxhdpi/perm_group_system_clock.png
index 30cc29cf1b01..91494975323d 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_system_clock.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_system_tools.png b/core/res/res/drawable-xxhdpi/perm_group_system_tools.png
index 129c221737ec..0332e40e0d0c 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_system_tools.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_user_dictionary.png b/core/res/res/drawable-xxhdpi/perm_group_user_dictionary.png
index 020167f25b24..5b6ea3b0089a 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_user_dictionary.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-xxhdpi/perm_group_user_dictionary_write.png
index 6218f6223064..d92e71912afc 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_user_dictionary_write.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_voicemail.png b/core/res/res/drawable-xxhdpi/perm_group_voicemail.png
index 336cb6b3f6b3..8f08516d2b50 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_voicemail.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/perm_group_wallpaper.png b/core/res/res/drawable-xxhdpi/perm_group_wallpaper.png
index e7d8f43cee51..9c87e9aeb145 100644
--- a/core/res/res/drawable-xxhdpi/perm_group_wallpaper.png
+++ b/core/res/res/drawable-xxhdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/popup_background_qntm_mult.9.png b/core/res/res/drawable-xxhdpi/popup_background_mtrl_mult.9.png
index fb7d715fae95..fb7d715fae95 100644
--- a/core/res/res/drawable-xxhdpi/popup_background_qntm_mult.9.png
+++ b/core/res/res/drawable-xxhdpi/popup_background_mtrl_mult.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_mtrl_alpha.9.png
index 74a259bb3114..74a259bb3114 100644
--- a/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/progress_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_primary_mtrl_alpha.9.png
index 2d4eb3f5b03d..2d4eb3f5b03d 100644
--- a/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/progress_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrollbar_handle_mtrl_alpha.9.png
index c1c0622112e9..c1c0622112e9 100644
--- a/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/scrollbar_handle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_000.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_000.png
index 46aa533e2f6f..46aa533e2f6f 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_001.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_001.png
index a74946965385..a74946965385 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_002.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_002.png
index ef43f003ee1b..ef43f003ee1b 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_003.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_003.png
index eebddc3840c4..eebddc3840c4 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_004.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_004.png
index 44b654d75431..44b654d75431 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_005.png b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_005.png
index 6e768c172f8d..6e768c172f8d 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_from_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_mtrl_alpha.png
index a2b5716f6d32..a2b5716f6d32 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_mtrl_alpha.png
index 0319bd83f1c7..0319bd83f1c7 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_mtrl_alpha.png
index caabc2c1bc21..caabc2c1bc21 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_mtrl_alpha.png
index b46ee1c528ed..b46ee1c528ed 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_000.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_000.png
index 2ac6daed61e5..2ac6daed61e5 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_000.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_001.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_001.png
index 91c49cee0249..91c49cee0249 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_001.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_002.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_002.png
index 4b4bd1f1dfeb..4b4bd1f1dfeb 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_002.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_003.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_003.png
index 637e5968eaeb..637e5968eaeb 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_003.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_004.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_004.png
index 42d4d2a49a77..42d4d2a49a77 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_004.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_005.png b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_005.png
index 995d1b27435e..995d1b27435e 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_qntm_005.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_to_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrubber_primary_mtrl_alpha.9.png
index 6a82af5081a5..6a82af5081a5 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_primary_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrubber_track_mtrl_alpha.9.png
index c3791fc66147..c3791fc66147 100644
--- a/core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/scrubber_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-xxhdpi/spinner_mtrl_am_alpha.9.png
index b8c78b591965..b8c78b591965 100644
--- a/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/spinner_mtrl_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_track_mtrl_alpha.9.png
index a8067cbed3d0..a8067cbed3d0 100644
--- a/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_indicator_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/tab_indicator_mtrl_alpha.9.png
index 248f4f8604de..248f4f8604de 100644
--- a/core/res/res/drawable-xxhdpi/tab_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/tab_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png
index 432c3859f98b..432c3859f98b 100644
--- a/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_left_mtrl_alpha.png
index 75085ce6d48b..75085ce6d48b 100644
--- a/core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_left_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_middle_mtrl_alpha.png
index 5753d8940053..5753d8940053 100644
--- a/core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_middle_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_right_mtrl_alpha.png
index e2eb5bed2330..e2eb5bed2330 100644
--- a/core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_right_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_activated_mtrl_alpha.9.png
index a22f35203e79..a22f35203e79 100644
--- a/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/textfield_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_default_mtrl_alpha.9.png
index b0504e031683..b0504e031683 100644
--- a/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/textfield_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_search_activated_mtrl_alpha.9.png
index cd5b00fb2553..cd5b00fb2553 100644
--- a/core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/textfield_search_activated_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_search_default_mtrl_alpha.9.png
index 5ee867ca2d2d..5ee867ca2d2d 100644
--- a/core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxhdpi/textfield_search_default_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_000.png
index f0ff1a70f3a1..f0ff1a70f3a1 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_001.png
index b382df365d01..b382df365d01 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_002.png
index 8cb4ce2e4129..8cb4ce2e4129 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_003.png
index 4db2b0104275..4db2b0104275 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_004.png
index 8c4709b74e24..8c4709b74e24 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_005.png
index 1ad960ab330f..1ad960ab330f 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_006.png
index e47cc20b3cee..e47cc20b3cee 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_007.png
index c4d0d51cf2cc..c4d0d51cf2cc 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_008.png
index 915d56afe323..915d56afe323 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_009.png
index 85795cbad9e7..85795cbad9e7 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_010.png
index 157fd9102cac..157fd9102cac 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_011.png
index 9d446de2dcab..9d446de2dcab 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_012.png
index dfac1f030f0c..dfac1f030f0c 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_013.png
index aed6c08d832c..aed6c08d832c 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_014.png
index 1b8bd6b312e3..1b8bd6b312e3 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_015.png b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_015.png
index 5dd0e5ba60a6..5dd0e5ba60a6 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_off_qntm_015.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_000.png
index 5dd0e5ba60a6..5dd0e5ba60a6 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_001.png
index 1a31ad9a9a9a..1a31ad9a9a9a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_002.png
index 63c7f1290461..63c7f1290461 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_003.png
index 847dd0899730..847dd0899730 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_004.png
index b93f3cc18c1a..b93f3cc18c1a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_005.png
index 1e3dea77a588..1e3dea77a588 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_006.png
index 5a85238b2b79..5a85238b2b79 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_007.png
index 35960cace82a..35960cace82a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_008.png
index 6db55553c110..6db55553c110 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_009.png
index a9c5851c7bf7..a9c5851c7bf7 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_010.png
index 38465bda1274..38465bda1274 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_011.png
index 15942dc1fd85..15942dc1fd85 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_012.png
index 67d0d649e5d9..67d0d649e5d9 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_013.png
index 69b5c1b9b95e..69b5c1b9b95e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_014.png
index 0e5d3315523e..0e5d3315523e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_015.png b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_015.png
index f0ff1a70f3a1..f0ff1a70f3a1 100644
--- a/core/res/res/drawable-xxxhdpi/btn_check_to_on_qntm_015.png
+++ b/core/res/res/drawable-xxxhdpi/btn_check_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xxxhdpi/btn_mtrl_alpha.9.png
index 01eeefef38bb..01eeefef38bb 100644
--- a/core/res/res/drawable-xxxhdpi/btn_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxxhdpi/btn_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_000.png
index 44028af07b6c..44028af07b6c 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_001.png
index ec13a868ae02..ec13a868ae02 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_002.png
index 43754eb90260..43754eb90260 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_003.png
index 39d1d64e9e84..39d1d64e9e84 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_004.png
index f36f88391874..f36f88391874 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_005.png
index 7a4cc5ca4e0a..7a4cc5ca4e0a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_006.png
index 80a21ecd9979..80a21ecd9979 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_007.png
index 2141104cf866..2141104cf866 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_008.png
index 203bd5110587..203bd5110587 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_009.png
index 5df6fc589f01..5df6fc589f01 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_010.png
index 6d0fced07d8e..6d0fced07d8e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_011.png
index 8c0c3726463f..8c0c3726463f 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_012.png
index 4fa6f53e41f1..4fa6f53e41f1 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_013.png
index d3dbf7da643d..d3dbf7da643d 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_014.png
index 4ccf8deaec05..4ccf8deaec05 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_015.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_015.png
index adef8718013e..adef8718013e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_off_qntm_015.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_off_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_000.png
index adef8718013e..adef8718013e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_001.png
index 9fc355646fc2..9fc355646fc2 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_002.png
index 7f00609fa385..7f00609fa385 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_003.png
index e4aa58d3ab31..e4aa58d3ab31 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_004.png
index fe4e4b773880..fe4e4b773880 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_005.png
index 86666cae0eec..86666cae0eec 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_006.png
index 608faaf3b12a..608faaf3b12a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_007.png
index ec95422dcafe..ec95422dcafe 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_008.png
index 76e27547e61c..76e27547e61c 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_009.png
index 3853eac24678..3853eac24678 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_010.png
index 621aff1b7c8e..621aff1b7c8e 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_011.png
index d24be2a00925..d24be2a00925 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_012.png
index df338922847a..df338922847a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_013.png
index ff4b818e529f..ff4b818e529f 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_014.png
index d9793ae57bb0..d9793ae57bb0 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_015.png b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_015.png
index 44028af07b6c..44028af07b6c 100644
--- a/core/res/res/drawable-xxxhdpi/btn_radio_to_on_qntm_015.png
+++ b/core/res/res/drawable-xxxhdpi/btn_radio_to_on_mtrl_015.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_000.png
index 8b202c6fdf02..8b202c6fdf02 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_001.png
index 3b497f32d799..3b497f32d799 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_002.png
index 532b6de8071a..532b6de8071a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_003.png
index 403b2fe31ff5..403b2fe31ff5 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_004.png
index 8c5086c2d2a3..8c5086c2d2a3 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_005.png
index d4870f8af095..d4870f8af095 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_006.png
index c05adf57a496..c05adf57a496 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_007.png
index 99b205609492..99b205609492 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_008.png
index d8393580b34a..d8393580b34a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_009.png
index 913f94d7cf8f..913f94d7cf8f 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_010.png
index 7f325b31a233..7f325b31a233 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_011.png
index 149a9aaa7f61..149a9aaa7f61 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_012.png
index 95c219ee2f07..95c219ee2f07 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_013.png
index 462a128d6c04..462a128d6c04 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_014.png
index 5911d1681550..5911d1681550 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_off_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_off_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_000.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_000.png
index e0c6d85d6ed0..e0c6d85d6ed0 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_001.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_001.png
index 56799436d0ab..56799436d0ab 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_002.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_002.png
index 54b636de91f1..54b636de91f1 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_003.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_003.png
index bf9fac0f3746..bf9fac0f3746 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_004.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_004.png
index 25d53195173b..25d53195173b 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_005.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_005.png
index d2df59506774..d2df59506774 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_006.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_006.png
index 7700bdeccfd7..7700bdeccfd7 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_006.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_006.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_007.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_007.png
index 883f98b2582b..883f98b2582b 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_007.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_007.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_008.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_008.png
index b3b2108f3d30..b3b2108f3d30 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_008.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_008.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_009.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_009.png
index 3aad5964608a..3aad5964608a 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_009.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_009.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_010.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_010.png
index 2017e17b2cbe..2017e17b2cbe 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_010.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_010.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_011.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_011.png
index 1fc2700ccbea..1fc2700ccbea 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_011.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_011.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_012.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_012.png
index bb8b0f2610b1..bb8b0f2610b1 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_012.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_012.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_013.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_013.png
index 66ab8f63b461..66ab8f63b461 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_013.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_013.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_014.png b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_014.png
index e3424db5a53f..e3424db5a53f 100644
--- a/core/res/res/drawable-xxxhdpi/btn_switch_to_on_qntm_014.png
+++ b/core/res/res/drawable-xxxhdpi/btn_switch_to_on_mtrl_014.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_toggle_indicator_qntm_alpha.9.png b/core/res/res/drawable-xxxhdpi/btn_toggle_indicator_mtrl_alpha.9.png
index c06740bd8828..c06740bd8828 100755
--- a/core/res/res/drawable-xxxhdpi/btn_toggle_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxxhdpi/btn_toggle_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/btn_toggle_qntm_alpha.9.png b/core/res/res/drawable-xxxhdpi/btn_toggle_mtrl_alpha.9.png
index 7556167452fe..7556167452fe 100755
--- a/core/res/res/drawable-xxxhdpi/btn_toggle_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxxhdpi/btn_toggle_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png b/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
index 23214fa188d7..23214fa188d7 100644
--- a/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_qntm_alpha.png
+++ b/core/res/res/drawable-xxxhdpi/indicator_code_lock_drag_direction_up_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_accessibility_features.png b/core/res/res/drawable-xxxhdpi/perm_group_accessibility_features.png
new file mode 100644
index 000000000000..8cebecfea0ff
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_accounts.png b/core/res/res/drawable-xxxhdpi/perm_group_accounts.png
new file mode 100644
index 000000000000..1d9db83f4372
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_affects_battery.png b/core/res/res/drawable-xxxhdpi/perm_group_affects_battery.png
new file mode 100644
index 000000000000..3b6300afb95a
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_app_info.png b/core/res/res/drawable-xxxhdpi/perm_group_app_info.png
new file mode 100644
index 000000000000..b54b98a05f32
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_audio_settings.png b/core/res/res/drawable-xxxhdpi/perm_group_audio_settings.png
new file mode 100644
index 000000000000..ec88cdd117be
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_bluetooth.png b/core/res/res/drawable-xxxhdpi/perm_group_bluetooth.png
new file mode 100644
index 000000000000..6f6409d7a498
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_bookmarks.png b/core/res/res/drawable-xxxhdpi/perm_group_bookmarks.png
new file mode 100644
index 000000000000..f8f3f44e8c5d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_calendar.png b/core/res/res/drawable-xxxhdpi/perm_group_calendar.png
new file mode 100644
index 000000000000..d6243b1bf02a
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_camera.png b/core/res/res/drawable-xxxhdpi/perm_group_camera.png
new file mode 100644
index 000000000000..fdc4b44fb59b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_device_alarms.png b/core/res/res/drawable-xxxhdpi/perm_group_device_alarms.png
new file mode 100644
index 000000000000..00707d4d3b86
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_display.png b/core/res/res/drawable-xxxhdpi/perm_group_display.png
new file mode 100644
index 000000000000..ca4f44bc2ee7
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_location.png b/core/res/res/drawable-xxxhdpi/perm_group_location.png
new file mode 100644
index 000000000000..a1019b2c5653
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_messages.png b/core/res/res/drawable-xxxhdpi/perm_group_messages.png
new file mode 100644
index 000000000000..f7165fede2e9
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_microphone.png b/core/res/res/drawable-xxxhdpi/perm_group_microphone.png
new file mode 100644
index 000000000000..a85e4cddfc3b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_network.png b/core/res/res/drawable-xxxhdpi/perm_group_network.png
new file mode 100644
index 000000000000..07f1eb717c24
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_personal_info.png b/core/res/res/drawable-xxxhdpi/perm_group_personal_info.png
new file mode 100644
index 000000000000..11eb4536ff36
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_phone_calls.png b/core/res/res/drawable-xxxhdpi/perm_group_phone_calls.png
new file mode 100644
index 000000000000..f4e6b9fb96de
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_screenlock.png b/core/res/res/drawable-xxxhdpi/perm_group_screenlock.png
new file mode 100644
index 000000000000..d559dce5ac3a
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_shortrange_network.png b/core/res/res/drawable-xxxhdpi/perm_group_shortrange_network.png
new file mode 100644
index 000000000000..3998ab6f4c6b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_social_info.png b/core/res/res/drawable-xxxhdpi/perm_group_social_info.png
new file mode 100644
index 000000000000..3b17e391df61
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_status_bar.png b/core/res/res/drawable-xxxhdpi/perm_group_status_bar.png
new file mode 100644
index 000000000000..1b02702ad470
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_storage.png b/core/res/res/drawable-xxxhdpi/perm_group_storage.png
new file mode 100644
index 000000000000..918b3ed0e295
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_sync_settings.png b/core/res/res/drawable-xxxhdpi/perm_group_sync_settings.png
new file mode 100644
index 000000000000..12f90c5eb5fe
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_system_clock.png b/core/res/res/drawable-xxxhdpi/perm_group_system_clock.png
new file mode 100644
index 000000000000..afd968b80259
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_system_tools.png b/core/res/res/drawable-xxxhdpi/perm_group_system_tools.png
new file mode 100644
index 000000000000..dfcb702523b2
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary.png b/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary.png
new file mode 100644
index 000000000000..32942ca8aa53
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 000000000000..343551fde7a9
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_voicemail.png b/core/res/res/drawable-xxxhdpi/perm_group_voicemail.png
new file mode 100644
index 000000000000..7aeb7863f956
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/perm_group_wallpaper.png b/core/res/res/drawable-xxxhdpi/perm_group_wallpaper.png
new file mode 100644
index 000000000000..3c084718b860
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_000.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_000.png
index 0c8f7468d6b3..0c8f7468d6b3 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_001.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_001.png
index 5db9deb5acaf..5db9deb5acaf 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_002.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_002.png
index 3aca6d3ec56d..3aca6d3ec56d 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_003.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_003.png
index 746c74fdbd6d..746c74fdbd6d 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_004.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_004.png
index 454a5b21ac70..454a5b21ac70 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_005.png b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_005.png
index 80ad8cc3730e..80ad8cc3730e 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_from_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_000.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_000.png
index cfd0db49ad9e..cfd0db49ad9e 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_000.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_000.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_001.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_001.png
index 845092f33bdb..845092f33bdb 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_001.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_001.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_002.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_002.png
index 0042db46c87a..0042db46c87a 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_002.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_002.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_003.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_003.png
index 77b29012440d..77b29012440d 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_003.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_003.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_004.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_004.png
index fb3c23879f68..fb3c23879f68 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_004.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_004.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_005.png b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_005.png
index 0d28c45c11c5..0d28c45c11c5 100644
--- a/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_qntm_005.png
+++ b/core/res/res/drawable-xxxhdpi/scrubber_control_to_pressed_mtrl_005.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xxxhdpi/switch_track_mtrl_alpha.9.png
index fb07f2af4ec8..fb07f2af4ec8 100644
--- a/core/res/res/drawable-xxxhdpi/switch_track_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxxhdpi/switch_track_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/tab_indicator_qntm_alpha.9.png b/core/res/res/drawable-xxxhdpi/tab_indicator_mtrl_alpha.9.png
index 5813179d4ca5..5813179d4ca5 100644
--- a/core/res/res/drawable-xxxhdpi/tab_indicator_qntm_alpha.9.png
+++ b/core/res/res/drawable-xxxhdpi/tab_indicator_mtrl_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable/ab_share_pack_quantum.xml b/core/res/res/drawable/ab_share_pack_material.xml
index 7d33ff4d7304..1f0478e8b62c 100644
--- a/core/res/res/drawable/ab_share_pack_quantum.xml
+++ b/core/res/res/drawable/ab_share_pack_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ab_share_pack_qntm_alpha"
+ android:src="@drawable/ab_share_pack_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ab_solid_shadow_quantum.xml b/core/res/res/drawable/ab_solid_shadow_material.xml
index 88e142adc40a..eee52c8e2098 100644
--- a/core/res/res/drawable/ab_solid_shadow_quantum.xml
+++ b/core/res/res/drawable/ab_solid_shadow_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ab_solid_shadow_qntm_alpha"
+ android:src="@drawable/ab_solid_shadow_mtrl_alpha"
android:tint="@color/black" />
diff --git a/core/res/res/drawable/activated_background_quantum.xml b/core/res/res/drawable/activated_background_material.xml
index e06c9f22f7e5..e06c9f22f7e5 100644
--- a/core/res/res/drawable/activated_background_quantum.xml
+++ b/core/res/res/drawable/activated_background_material.xml
diff --git a/core/res/res/drawable/btn_borderless_quantum.xml b/core/res/res/drawable/btn_borderless_material.xml
index 2cd7ed631f63..a459089472d5 100644
--- a/core/res/res/drawable/btn_borderless_quantum.xml
+++ b/core/res/res/drawable/btn_borderless_material.xml
@@ -15,7 +15,7 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?attr/colorControlHighlight">
+ android:color="?attr/colorControlHighlight">
<item android:id="@id/mask"
- android:drawable="@drawable/btn_qntm_alpha" />
+ android:drawable="@drawable/btn_mtrl_alpha" />
</ripple>
diff --git a/core/res/res/drawable/btn_cab_done_quantum.xml b/core/res/res/drawable/btn_cab_done_material.xml
index 51e06bbe9864..36cc19653445 100644
--- a/core/res/res/drawable/btn_cab_done_quantum.xml
+++ b/core/res/res/drawable/btn_cab_done_material.xml
@@ -21,11 +21,11 @@
<color android:color="?attr/colorControlHighlight" />
</item>
<item android:state_focused="true" android:state_enabled="true">
- <nine-patch android:src="@drawable/btn_cab_done_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_cab_done_mtrl_alpha"
android:tint="?attr/colorControlHighlight" />
</item>
<item android:state_enabled="true">
- <nine-patch android:src="@drawable/btn_cab_done_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_cab_done_mtrl_alpha"
android:tint="?attr/colorButtonNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/btn_check_quantum_anim.xml b/core/res/res/drawable/btn_check_material_anim.xml
index b16875e1a98e..73b8a3ed07be 100644
--- a/core/res/res/drawable/btn_check_quantum_anim.xml
+++ b/core/res/res/drawable/btn_check_material_anim.xml
@@ -16,118 +16,118 @@
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_checked="true">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_015" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_015" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_enabled="false">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_000" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_000" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_checked="true" android:id="@+id/on">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
<item android:id="@+id/off">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_000" android:tint="?attr/colorControlNormal" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_000" android:tint="?attr/colorControlNormal" />
</item>
<transition android:fromId="@+id/off" android:toId="@+id/on">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_000" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_000" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_001" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_001" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_002" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_002" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_003" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_003" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_004" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_004" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_005" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_005" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_006" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_006" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_007" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_007" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_008" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_008" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_009" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_009" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_010" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_010" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_011" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_011" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_012" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_012" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_013" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_013" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_014" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_014" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_on_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_on_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
<transition android:fromId="@+id/on" android:toId="@+id/off">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_000" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_000" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_001" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_001" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_002" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_002" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_003" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_003" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_004" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_004" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_005" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_005" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_006" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_006" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_007" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_007" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_008" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_008" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_009" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_009" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_010" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_010" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_011" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_011" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_012" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_012" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_013" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_013" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_014" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_014" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_check_to_off_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_check_to_off_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
diff --git a/core/res/res/drawable/btn_default_quantum.xml b/core/res/res/drawable/btn_default_material.xml
index 61193feb7c3b..9cee3ab4cec3 100644
--- a/core/res/res/drawable/btn_default_quantum.xml
+++ b/core/res/res/drawable/btn_default_material.xml
@@ -15,9 +15,9 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?attr/colorControlHighlight">
+ android:color="?attr/colorControlHighlight">
<item>
- <nine-patch android:src="@drawable/btn_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_mtrl_alpha"
android:tint="?attr/colorButtonNormal" />
</item>
</ripple>
diff --git a/core/res/res/drawable/btn_radio_quantum_anim.xml b/core/res/res/drawable/btn_radio_material_anim.xml
index cd9b518b6d55..0be590eb3f53 100644
--- a/core/res/res/drawable/btn_radio_quantum_anim.xml
+++ b/core/res/res/drawable/btn_radio_material_anim.xml
@@ -16,118 +16,118 @@
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_checked="true">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_015" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_015" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_enabled="false">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_000" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_000" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_checked="true" android:id="@+id/on">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
<item android:id="@+id/off">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_000" android:tint="?attr/colorControlNormal" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_000" android:tint="?attr/colorControlNormal" />
</item>
<transition android:fromId="@+id/off" android:toId="@+id/on">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_000" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_000" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_001" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_001" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_002" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_002" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_003" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_003" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_004" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_004" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_005" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_005" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_006" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_006" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_007" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_007" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_008" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_008" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_009" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_009" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_010" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_010" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_011" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_011" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_012" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_012" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_013" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_013" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_014" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_014" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_on_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_on_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
<transition android:fromId="@+id/on" android:toId="@+id/off">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_000" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_000" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_001" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_001" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_002" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_002" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_003" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_003" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_004" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_004" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_005" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_005" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_006" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_006" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_007" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_007" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_008" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_008" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_009" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_009" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_010" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_010" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_011" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_011" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_012" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_012" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_013" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_013" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_014" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_014" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_radio_to_off_qntm_015" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_radio_to_off_mtrl_015" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
diff --git a/core/res/res/drawable/btn_star_quantum.xml b/core/res/res/drawable/btn_star_material.xml
index 512cd57515a1..29862d282fd2 100644
--- a/core/res/res/drawable/btn_star_quantum.xml
+++ b/core/res/res/drawable/btn_star_material.xml
@@ -16,15 +16,15 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
- <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ <bitmap android:src="@drawable/btn_star_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item android:state_pressed="true">
- <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ <bitmap android:src="@drawable/btn_star_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ <bitmap android:src="@drawable/btn_star_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/btn_toggle_quantum.xml b/core/res/res/drawable/btn_toggle_material.xml
index e235598c1b0c..73fe4d3e1a1a 100644
--- a/core/res/res/drawable/btn_toggle_quantum.xml
+++ b/core/res/res/drawable/btn_toggle_material.xml
@@ -21,9 +21,9 @@
android:insetRight="4dp">
<layer-list android:paddingMode="stack">
<item>
- <ripple android:tint="?attr/colorControlHighlight">
+ <ripple android:color="?attr/colorControlHighlight">
<item>
- <nine-patch android:src="@drawable/btn_toggle_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_toggle_mtrl_alpha"
android:tint="?attr/colorButtonNormal" />
</item>
</ripple>
@@ -31,11 +31,11 @@
<item>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
- <nine-patch android:src="@drawable/btn_toggle_indicator_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_toggle_indicator_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:state_checked="true">
- <nine-patch android:src="@drawable/btn_toggle_indicator_qntm_alpha"
+ <nine-patch android:src="@drawable/btn_toggle_indicator_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
</selector>
diff --git a/core/res/res/drawable/dialog_background_quantum.xml b/core/res/res/drawable/dialog_background_material.xml
index 7e5b00305c1b..7e5b00305c1b 100644
--- a/core/res/res/drawable/dialog_background_quantum.xml
+++ b/core/res/res/drawable/dialog_background_material.xml
diff --git a/core/res/res/drawable/edit_text_quantum.xml b/core/res/res/drawable/edit_text_material.xml
index ab2580a991e2..86cec8f7ed57 100644
--- a/core/res/res/drawable/edit_text_quantum.xml
+++ b/core/res/res/drawable/edit_text_material.xml
@@ -15,20 +15,19 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?attr/colorControlActivated"
- android:tintMode="src_over">
+ android:color="?attr/colorControlActivated">
<item>
<selector>
<item android:state_enabled="false">
- <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal"
android:alpha="?attr/disabledAlpha" />
</item>
<item>
- <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
</item>
- <item android:id="@+id/mask" android:drawable="@drawable/textfield_activated_qntm_alpha" />
+ <item android:id="@+id/mask" android:drawable="@drawable/textfield_activated_mtrl_alpha" />
</ripple>
diff --git a/core/res/res/drawable/expander_group_quantum.xml b/core/res/res/drawable/expander_group_material.xml
index 48245ea31609..aa41796e0af6 100644
--- a/core/res/res/drawable/expander_group_quantum.xml
+++ b/core/res/res/drawable/expander_group_material.xml
@@ -16,11 +16,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_expanded="true">
- <nine-patch android:src="@drawable/expander_close_qntm_alpha"
+ <nine-patch android:src="@drawable/expander_close_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
- <nine-patch android:src="@drawable/expander_open_qntm_alpha"
+ <nine-patch android:src="@drawable/expander_open_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/fastscroll_thumb_quantum.xml b/core/res/res/drawable/fastscroll_thumb_material.xml
index 496b2ae7d69d..1288f0d08e67 100644
--- a/core/res/res/drawable/fastscroll_thumb_quantum.xml
+++ b/core/res/res/drawable/fastscroll_thumb_material.xml
@@ -16,11 +16,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
- <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ <bitmap android:src="@drawable/fastscroll_thumb_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ <bitmap android:src="@drawable/fastscroll_thumb_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/fastscroll_track_quantum.xml b/core/res/res/drawable/fastscroll_track_material.xml
index 59c35db83e1c..60f79b1a2655 100644
--- a/core/res/res/drawable/fastscroll_track_quantum.xml
+++ b/core/res/res/drawable/fastscroll_track_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/fastscroll_track_qntm_alpha"
+ android:src="@drawable/fastscroll_track_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_ab_back_quantum.xml b/core/res/res/drawable/ic_ab_back_material.xml
index 65c7584413bb..37455d469fb9 100644
--- a/core/res/res/drawable/ic_ab_back_quantum.xml
+++ b/core/res/res/drawable/ic_ab_back_material.xml
@@ -15,6 +15,6 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_ab_back_qntm_am_alpha"
+ android:src="@drawable/ic_ab_back_mtrl_am_alpha"
android:autoMirrored="true"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_cab_done_quantum.xml b/core/res/res/drawable/ic_cab_done_material.xml
index 97495a82a6e8..a370288acf9a 100644
--- a/core/res/res/drawable/ic_cab_done_quantum.xml
+++ b/core/res/res/drawable/ic_cab_done_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_cab_done_qntm_alpha"
+ android:src="@drawable/ic_cab_done_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_clear_quantum.xml b/core/res/res/drawable/ic_clear_material.xml
index 02f0929fed3e..076c0a280a32 100644
--- a/core/res/res/drawable/ic_clear_quantum.xml
+++ b/core/res/res/drawable/ic_clear_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_clear_qntm_alpha"
+ android:src="@drawable/ic_clear_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_commit_search_api_quantum.xml b/core/res/res/drawable/ic_commit_search_api_material.xml
index 02d08b9d1590..59bd0fac1dba 100644
--- a/core/res/res/drawable/ic_commit_search_api_quantum.xml
+++ b/core/res/res/drawable/ic_commit_search_api_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_commit_search_api_qntm_alpha"
+ android:src="@drawable/ic_commit_search_api_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_corp_badge.xml b/core/res/res/drawable/ic_corp_badge.xml
new file mode 100644
index 000000000000..532571245d55
--- /dev/null
+++ b/core/res/res/drawable/ic_corp_badge.xml
@@ -0,0 +1,34 @@
+<!--
+Copyright (C) 2014 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" >
+ <size
+ android:width="19.0dp"
+ android:height="19.0dp"/>
+
+ <viewport
+ android:viewportWidth="19.0"
+ android:viewportHeight="19.0"/>
+
+ <path
+ android:pathData="M9.5,9.5m-9.5,0.0a9.5,9.5 0.0,1.0 1.0,19.0 0.0a9.5,9.5 0.0,1.0 1.0,-19.0 0.0"
+ android:fill="#FF5722"/>
+ <path
+ android:pathData="M12.667,7.125l-1.583,0.0L11.084,6.333l-0.792,-0.792L8.708,5.5410004L7.917,6.333l0.0,0.792L6.333,7.125c-0.438,0.0 -0.788,0.354 -0.788,0.792l-0.004,4.354c0.0,0.438 0.354,0.792 0.792,0.792l6.333,0.0c0.438,0.0 0.792,-0.354 0.792,-0.792L13.458,7.917C13.458,7.479 13.104,7.125 12.667,7.125zM10.094,10.687L8.906,10.687L8.906,9.5l1.188,0.0L10.094,10.687zM10.292,7.125L8.708,7.125L8.708,6.333l1.583,0.0L10.291,7.125z"
+ android:fill="#FFFFFF"/>
+ <path
+ android:pathData="M4.75,4.75 h9.5 v9.5 h-9.5z"
+ android:fill="#00000000"/>
+</vector>
diff --git a/core/res/res/drawable/ic_corp_icon_badge.xml b/core/res/res/drawable/ic_corp_icon_badge.xml
new file mode 100644
index 000000000000..7bfab4c55a0d
--- /dev/null
+++ b/core/res/res/drawable/ic_corp_icon_badge.xml
@@ -0,0 +1,40 @@
+<!--
+Copyright (C) 2014 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" >
+ <size
+ android:width="64.0dp"
+ android:height="64.0dp"/>
+
+ <viewport
+ android:viewportWidth="64.0"
+ android:viewportHeight="64.0"/>
+
+ <path
+ android:fill="#FF000000"
+ android:pathData="M49.062,50.0m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0"/>
+ <path
+ android:fill="#FF000000"
+ android:pathData="M49.0,49.5m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0"/>
+ <path
+ android:pathData="M49.0,49.0m-14.0,0.0a14.0,14.0 0.0,1.0 1.0,28.0 0.0a14.0,14.0 0.0,1.0 1.0,-28.0 0.0"
+ android:fill="#FF5722"/>
+ <path
+ android:pathData="M53.667,45.5l-2.333,0.0l0.0,-1.167l-1.167,-1.167l-2.333,0.0l-1.167,1.167L46.667,45.5l-2.333,0.0c-0.645,0.0 -1.161,0.522 -1.161,1.167l-0.006,6.417c0.0,0.645 0.522,1.167 1.167,1.167l9.333,0.0c0.645,0.0 1.167,-0.522 1.167,-1.167l0.0,-6.417C54.833,46.022 54.311,45.5 53.667,45.5zM49.875,50.75l-1.75,0.0L48.125,49.0l1.75,0.0L49.875,50.75zM50.167,45.5l-2.333,0.0l0.0,-1.167l2.333,0.0L50.167,45.5z"
+ android:fill="#FFFFFF"/>
+ <path
+ android:pathData="M42.0,42.0 h14.0 v14.0 h-14.0z"
+ android:fill="#00000000"/>
+</vector>
diff --git a/core/res/res/drawable/ic_dialog_alert_quantum.xml b/core/res/res/drawable/ic_dialog_alert_material.xml
index 05f3630860d0..41e1ab1d7d45 100644
--- a/core/res/res/drawable/ic_dialog_alert_quantum.xml
+++ b/core/res/res/drawable/ic_dialog_alert_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_dialog_alert_qntm_alpha"
+ android:src="@drawable/ic_dialog_alert_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_find_next_quantum.xml b/core/res/res/drawable/ic_find_next_material.xml
index fee196cab19a..c6674ebf2390 100644
--- a/core/res/res/drawable/ic_find_next_quantum.xml
+++ b/core/res/res/drawable/ic_find_next_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_find_next_qntm_alpha"
+ android:src="@drawable/ic_find_next_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_find_previous_material.xml b/core/res/res/drawable/ic_find_previous_material.xml
new file mode 100644
index 000000000000..32fcb315ac8d
--- /dev/null
+++ b/core/res/res/drawable/ic_find_previous_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_find_previous_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_find_previous_quantum.xml b/core/res/res/drawable/ic_find_previous_quantum.xml
deleted file mode 100644
index 28f887a0fae1..000000000000
--- a/core/res/res/drawable/ic_find_previous_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_find_previous_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_go_search_api_material.xml b/core/res/res/drawable/ic_go_search_api_material.xml
new file mode 100644
index 000000000000..03f6cd5c9a28
--- /dev/null
+++ b/core/res/res/drawable/ic_go_search_api_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_go_search_api_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_go_search_api_quantum.xml b/core/res/res/drawable/ic_go_search_api_quantum.xml
deleted file mode 100644
index b5b5cfb144cc..000000000000
--- a/core/res/res/drawable/ic_go_search_api_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_go_search_api_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_media_route_connecting_quantum.xml b/core/res/res/drawable/ic_media_route_connecting_material.xml
index 0029dd46fd93..51decd30728d 100644
--- a/core/res/res/drawable/ic_media_route_connecting_quantum.xml
+++ b/core/res/res/drawable/ic_media_route_connecting_material.xml
@@ -18,19 +18,19 @@
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:duration="500">
- <bitmap android:src="@drawable/ic_media_route_on_0_qntm_alpha"
+ <bitmap android:src="@drawable/ic_media_route_on_0_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:duration="500">
- <bitmap android:src="@drawable/ic_media_route_on_1_qntm_alpha"
+ <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:duration="500">
- <bitmap android:src="@drawable/ic_media_route_on_2_qntm_alpha"
+ <bitmap android:src="@drawable/ic_media_route_on_2_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:duration="500">
- <bitmap android:src="@drawable/ic_media_route_on_1_qntm_alpha"
+ <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_quantum.xml b/core/res/res/drawable/ic_media_route_material.xml
index 16b63d4e29ce..3e3f38850f29 100644
--- a/core/res/res/drawable/ic_media_route_quantum.xml
+++ b/core/res/res/drawable/ic_media_route_material.xml
@@ -17,17 +17,17 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_enabled="true"
- android:drawable="@android:drawable/ic_media_route_connecting_quantum" />
+ android:drawable="@android:drawable/ic_media_route_connecting_material" />
<item android:state_activated="true" android:state_enabled="true">
- <bitmap android:src="@android:drawable/ic_media_route_on_qntm_alpha"
+ <bitmap android:src="@android:drawable/ic_media_route_on_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:state_enabled="true">
- <bitmap android:src="@android:drawable/ic_media_route_off_qntm_alpha"
+ <bitmap android:src="@android:drawable/ic_media_route_off_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
- <bitmap android:src="@android:drawable/ic_media_route_disabled_qntm_alpha"
+ <bitmap android:src="@android:drawable/ic_media_route_disabled_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/ic_menu_copy_quantum.xml b/core/res/res/drawable/ic_menu_copy_material.xml
index 5f6ce5102ced..877b5ff14a3b 100644
--- a/core/res/res/drawable/ic_menu_copy_quantum.xml
+++ b/core/res/res/drawable/ic_menu_copy_material.xml
@@ -15,6 +15,6 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_copy_qntm_am_alpha"
+ android:src="@drawable/ic_menu_copy_mtrl_am_alpha"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/core/res/res/drawable/ic_menu_cut_quantum.xml b/core/res/res/drawable/ic_menu_cut_material.xml
index 1e4996e5a3d2..ff8d6e610c70 100644
--- a/core/res/res/drawable/ic_menu_cut_quantum.xml
+++ b/core/res/res/drawable/ic_menu_cut_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_cut_qntm_alpha"
+ android:src="@drawable/ic_menu_cut_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_find_material.xml b/core/res/res/drawable/ic_menu_find_material.xml
new file mode 100644
index 000000000000..00b294e101ab
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_find_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_find_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_find_quantum.xml b/core/res/res/drawable/ic_menu_find_quantum.xml
deleted file mode 100644
index a69c673ccbec..000000000000
--- a/core/res/res/drawable/ic_menu_find_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_find_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_moreoverflow_material.xml b/core/res/res/drawable/ic_menu_moreoverflow_material.xml
new file mode 100644
index 000000000000..16d4f0c080db
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_moreoverflow_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_moreoverflow_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml b/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml
deleted file mode 100644
index 7d3fcac636f3..000000000000
--- a/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_moreoverflow_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_paste_quantum.xml b/core/res/res/drawable/ic_menu_paste_material.xml
index f590904912a3..f7bbbf991e60 100644
--- a/core/res/res/drawable/ic_menu_paste_quantum.xml
+++ b/core/res/res/drawable/ic_menu_paste_material.xml
@@ -15,6 +15,6 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_paste_qntm_am_alpha"
+ android:src="@drawable/ic_menu_paste_mtrl_am_alpha"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/core/res/res/drawable/ic_menu_search_material.xml b/core/res/res/drawable/ic_menu_search_material.xml
new file mode 100644
index 000000000000..78dd62f45f95
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_search_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_search_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_search_quantum.xml b/core/res/res/drawable/ic_menu_search_quantum.xml
deleted file mode 100644
index 2ca8c2063442..000000000000
--- a/core/res/res/drawable/ic_menu_search_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_search_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_selectall_material.xml b/core/res/res/drawable/ic_menu_selectall_material.xml
new file mode 100644
index 000000000000..a431dd593184
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_selectall_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_selectall_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_selectall_quantum.xml b/core/res/res/drawable/ic_menu_selectall_quantum.xml
deleted file mode 100644
index fd72ebf2ab7d..000000000000
--- a/core/res/res/drawable/ic_menu_selectall_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_selectall_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_share_material.xml b/core/res/res/drawable/ic_menu_share_material.xml
new file mode 100644
index 000000000000..d9153afb67ab
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_share_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_share_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_share_quantum.xml b/core/res/res/drawable/ic_menu_share_quantum.xml
deleted file mode 100644
index f44e06c2ead1..000000000000
--- a/core/res/res/drawable/ic_menu_share_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_share_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_search_api_material.xml b/core/res/res/drawable/ic_search_api_material.xml
new file mode 100644
index 000000000000..bc18398bcec1
--- /dev/null
+++ b/core/res/res/drawable/ic_search_api_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_search_api_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_search_api_quantum.xml b/core/res/res/drawable/ic_search_api_quantum.xml
deleted file mode 100644
index 2bbc294af63b..000000000000
--- a/core/res/res/drawable/ic_search_api_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_search_api_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_voice_search_api_material.xml b/core/res/res/drawable/ic_voice_search_api_material.xml
new file mode 100644
index 000000000000..05488fb34f85
--- /dev/null
+++ b/core/res/res/drawable/ic_voice_search_api_material.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_voice_search_api_mtrl_alpha"
+ android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_voice_search_api_quantum.xml b/core/res/res/drawable/ic_voice_search_api_quantum.xml
deleted file mode 100644
index ddb14ef0d9da..000000000000
--- a/core/res/res/drawable/ic_voice_search_api_quantum.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_voice_search_api_qntm_alpha"
- android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/item_background_borderless_quantum.xml b/core/res/res/drawable/item_background_borderless_material.xml
index c2a1c1274e0f..b730618d7256 100644
--- a/core/res/res/drawable/item_background_borderless_quantum.xml
+++ b/core/res/res/drawable/item_background_borderless_material.xml
@@ -15,5 +15,4 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?attr/colorControlHighlight"
- android:pinned="true" />
+ android:color="?attr/colorControlHighlight" />
diff --git a/core/res/res/drawable/item_background_quantum.xml b/core/res/res/drawable/item_background_material.xml
index 039ca51a8354..45ff181ae8e0 100644
--- a/core/res/res/drawable/item_background_quantum.xml
+++ b/core/res/res/drawable/item_background_material.xml
@@ -15,8 +15,8 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?attr/colorControlHighlight">
+ android:color="?attr/colorControlHighlight">
<item android:id="@id/mask">
<color android:color="@color/white" />
</item>
-</ripple> \ No newline at end of file
+</ripple>
diff --git a/core/res/res/drawable/list_divider_quantum.xml b/core/res/res/drawable/list_divider_material.xml
index e3d4ba275cf4..bf249330932b 100644
--- a/core/res/res/drawable/list_divider_quantum.xml
+++ b/core/res/res/drawable/list_divider_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/list_divider_qntm_alpha"
+ android:src="@drawable/list_divider_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/list_section_divider_quantum.xml b/core/res/res/drawable/list_section_divider_material.xml
index 87a1439e88ee..515634e20bfd 100644
--- a/core/res/res/drawable/list_section_divider_quantum.xml
+++ b/core/res/res/drawable/list_section_divider_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/list_section_divider_qntm_alpha"
+ android:src="@drawable/list_section_divider_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/notification_bg_dim.xml b/core/res/res/drawable/notification_bg_dim.xml
index ae03d82f21e4..5c245f87e431 100644
--- a/core/res/res/drawable/notification_bg_dim.xml
+++ b/core/res/res/drawable/notification_bg_dim.xml
@@ -15,9 +15,7 @@
~ limitations under the License
-->
-<ripple
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="#ff444444"
- >
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="#ff444444">
<item android:drawable="@drawable/notification_bg_normal" />
</ripple> \ No newline at end of file
diff --git a/core/res/res/drawable/notification_quantum_bg.xml b/core/res/res/drawable/notification_material_bg.xml
index 300a565ba68e..44c67be68ce7 100644
--- a/core/res/res/drawable/notification_quantum_bg.xml
+++ b/core/res/res/drawable/notification_material_bg.xml
@@ -19,13 +19,13 @@
<item android:state_pressed="true">
<shape>
<solid android:color="#ffd0d0d0" />
- <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
+ <corners android:radius="@dimen/notification_material_rounded_rect_radius" />
</shape>
</item>
<item>
<shape>
<solid android:color="#fffafafa" />
- <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
+ <corners android:radius="@dimen/notification_material_rounded_rect_radius" />
</shape>
</item>
</selector> \ No newline at end of file
diff --git a/core/res/res/drawable/notification_material_bg_dim.xml b/core/res/res/drawable/notification_material_bg_dim.xml
new file mode 100644
index 000000000000..9b691e67e28a
--- /dev/null
+++ b/core/res/res/drawable/notification_material_bg_dim.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2014 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
+ -->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/white">
+ <item>
+ <shape>
+ <solid android:color="#d4ffffff" />
+ <corners android:radius="@dimen/notification_material_rounded_rect_radius" />
+ </shape>
+ </item>
+ <item android:id="@id/mask">
+ <shape>
+ <solid android:color="@color/white" />
+ <corners android:radius="@dimen/notification_material_rounded_rect_radius" />
+ </shape>
+ </item>
+</ripple>
diff --git a/core/res/res/drawable/notification_quantum_media_progress.xml b/core/res/res/drawable/notification_material_media_progress.xml
index 74d871b53056..74d871b53056 100644
--- a/core/res/res/drawable/notification_quantum_media_progress.xml
+++ b/core/res/res/drawable/notification_material_media_progress.xml
diff --git a/core/res/res/drawable/popup_background_quantum.xml b/core/res/res/drawable/popup_background_material.xml
index a4d02917bbd8..9e507903ea28 100644
--- a/core/res/res/drawable/popup_background_quantum.xml
+++ b/core/res/res/drawable/popup_background_material.xml
@@ -15,6 +15,6 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/popup_background_qntm_mult"
+ android:src="@drawable/popup_background_mtrl_mult"
android:tint="?attr/colorBackground"
android:tintMode="multiply" />
diff --git a/core/res/res/drawable/progress_horizontal_quantum.xml b/core/res/res/drawable/progress_horizontal_material.xml
index 1c2d494ce142..eca1a24a5da4 100644
--- a/core/res/res/drawable/progress_horizontal_quantum.xml
+++ b/core/res/res/drawable/progress_horizontal_material.xml
@@ -16,18 +16,18 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@id/background">
- <nine-patch android:src="@drawable/progress_qntm_alpha"
+ <nine-patch android:src="@drawable/progress_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:id="@id/secondaryProgress">
<scale android:scaleWidth="100%">
- <nine-patch android:src="@drawable/progress_qntm_alpha"
+ <nine-patch android:src="@drawable/progress_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</scale>
</item>
<item android:id="@id/progress">
<scale android:scaleWidth="100%">
- <nine-patch android:src="@drawable/progress_primary_qntm_alpha"
+ <nine-patch android:src="@drawable/progress_primary_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</scale>
</item>
diff --git a/core/res/res/drawable/progress_large_quantum.xml b/core/res/res/drawable/progress_large_material.xml
index 7bef63783024..965b288ec659 100644
--- a/core/res/res/drawable/progress_large_quantum.xml
+++ b/core/res/res/drawable/progress_large_material.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<quantum-progress xmlns:android="http://schemas.android.com/apk/res/android"
+<material-progress xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlActivated"
android:width="76dp"
android:height="76dp"
diff --git a/core/res/res/drawable/progress_medium_quantum.xml b/core/res/res/drawable/progress_medium_material.xml
index adc72f0bda31..c656026a76bc 100644
--- a/core/res/res/drawable/progress_medium_quantum.xml
+++ b/core/res/res/drawable/progress_medium_material.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<quantum-progress xmlns:android="http://schemas.android.com/apk/res/android"
+<material-progress xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlActivated"
android:width="48dp"
android:height="48dp"
diff --git a/core/res/res/drawable/progress_small_quantum.xml b/core/res/res/drawable/progress_small_material.xml
index eb4884a65c69..67ae268096b2 100644
--- a/core/res/res/drawable/progress_small_quantum.xml
+++ b/core/res/res/drawable/progress_small_material.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<quantum-progress xmlns:android="http://schemas.android.com/apk/res/android"
+<material-progress xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlActivated"
android:width="16dp"
android:height="16dp"
diff --git a/core/res/res/drawable/ratingbar_full_empty_quantum.xml b/core/res/res/drawable/ratingbar_full_empty_material.xml
index e5e431513be0..a2ae7d986be7 100644
--- a/core/res/res/drawable/ratingbar_full_empty_quantum.xml
+++ b/core/res/res/drawable/ratingbar_full_empty_material.xml
@@ -16,11 +16,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
- <bitmap android:src="@drawable/btn_rating_star_off_qntm_alpha"
+ <bitmap android:src="@drawable/btn_rating_star_off_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <bitmap android:src="@drawable/btn_rating_star_off_qntm_alpha"
+ <bitmap android:src="@drawable/btn_rating_star_off_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/ratingbar_full_filled_quantum.xml b/core/res/res/drawable/ratingbar_full_filled_material.xml
index ad3aa5dbe2bd..801c85f8d293 100644
--- a/core/res/res/drawable/ratingbar_full_filled_quantum.xml
+++ b/core/res/res/drawable/ratingbar_full_filled_material.xml
@@ -16,11 +16,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
- <bitmap android:src="@drawable/btn_rating_star_on_qntm_alpha"
+ <bitmap android:src="@drawable/btn_rating_star_on_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <bitmap android:src="@drawable/btn_rating_star_on_qntm_alpha"
+ <bitmap android:src="@drawable/btn_rating_star_on_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/ratingbar_full_quantum.xml b/core/res/res/drawable/ratingbar_full_material.xml
index 143e7c2b45fa..122dd1d3640c 100644
--- a/core/res/res/drawable/ratingbar_full_quantum.xml
+++ b/core/res/res/drawable/ratingbar_full_material.xml
@@ -16,9 +16,9 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@id/background"
- android:drawable="@drawable/ratingbar_full_empty_quantum" />
+ android:drawable="@drawable/ratingbar_full_empty_material" />
<item android:id="@id/secondaryProgress"
- android:drawable="@drawable/ratingbar_full_empty_quantum" />
+ android:drawable="@drawable/ratingbar_full_empty_material" />
<item android:id="@id/progress"
- android:drawable="@drawable/ratingbar_full_filled_quantum" />
+ android:drawable="@drawable/ratingbar_full_filled_material" />
</layer-list>
diff --git a/core/res/res/drawable/scrollbar_handle_quantum.xml b/core/res/res/drawable/scrollbar_handle_material.xml
index f2de25259418..a241428c899d 100644
--- a/core/res/res/drawable/scrollbar_handle_quantum.xml
+++ b/core/res/res/drawable/scrollbar_handle_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/scrollbar_handle_qntm_alpha"
+ android:src="@drawable/scrollbar_handle_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/scrubber_control_quantum_anim.xml b/core/res/res/drawable/scrubber_control_material_anim.xml
index 87d3ae917fc6..4b132598142e 100644
--- a/core/res/res/drawable/scrubber_control_quantum_anim.xml
+++ b/core/res/res/drawable/scrubber_control_material_anim.xml
@@ -16,58 +16,58 @@
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
<item android:state_enabled="false" android:state_pressed="true">
- <bitmap android:src="@drawable/scrubber_control_off_qntm_alpha" android:gravity="center" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/scrubber_control_off_mtrl_alpha" android:gravity="center" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_enabled="false">
- <bitmap android:src="@drawable/scrubber_control_off_qntm_alpha" android:gravity="center" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/scrubber_control_off_mtrl_alpha" android:gravity="center" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_pressed="true" android:id="@+id/pressed">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:id="@+id/not_pressed">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<transition android:fromId="@+id/not_pressed" android:toId="@+id/pressed">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_to_pressed_qntm_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_to_pressed_mtrl_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
<transition android:fromId="@+id/pressed" android:toId="@+id/not_pressed">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/scrubber_control_from_pressed_qntm_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/scrubber_control_from_pressed_mtrl_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
diff --git a/core/res/res/drawable/scrubber_control_selector_quantum.xml b/core/res/res/drawable/scrubber_control_selector_material.xml
index ef3af0cb9ac1..989267607531 100644
--- a/core/res/res/drawable/scrubber_control_selector_quantum.xml
+++ b/core/res/res/drawable/scrubber_control_selector_material.xml
@@ -16,11 +16,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
- <bitmap android:src="@drawable/scrubber_control_off_qntm_alpha"
+ <bitmap android:src="@drawable/scrubber_control_off_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
- <bitmap android:src="@drawable/scrubber_control_on_qntm_alpha"
+ <bitmap android:src="@drawable/scrubber_control_on_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
</selector>
diff --git a/core/res/res/drawable/scrubber_progress_horizontal_quantum.xml b/core/res/res/drawable/scrubber_progress_horizontal_material.xml
index f82fe7a1d4c2..f2ea30f3c5c6 100644
--- a/core/res/res/drawable/scrubber_progress_horizontal_quantum.xml
+++ b/core/res/res/drawable/scrubber_progress_horizontal_material.xml
@@ -16,24 +16,24 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
- <nine-patch android:src="@drawable/scrubber_track_qntm_alpha"
+ <nine-patch android:src="@drawable/scrubber_track_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
<layer-list>
<item android:id="@id/background">
- <nine-patch android:src="@drawable/scrubber_track_qntm_alpha"
+ <nine-patch android:src="@drawable/scrubber_track_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:id="@id/secondaryProgress">
<scale android:scaleWidth="100%">
- <nine-patch android:src="@drawable/scrubber_primary_qntm_alpha"
+ <nine-patch android:src="@drawable/scrubber_primary_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</scale>
</item>
<item android:id="@id/progress">
<scale android:scaleWidth="100%">
- <nine-patch android:src="@drawable/scrubber_primary_qntm_alpha"
+ <nine-patch android:src="@drawable/scrubber_primary_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</scale>
</item>
diff --git a/core/res/res/drawable/spinner_background_quantum.xml b/core/res/res/drawable/spinner_background_material.xml
index 727a78f9e119..02ea11bd8359 100644
--- a/core/res/res/drawable/spinner_background_quantum.xml
+++ b/core/res/res/drawable/spinner_background_material.xml
@@ -17,15 +17,15 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:autoMirrored="true">
<item android:state_checked="true">
- <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ <nine-patch android:src="@drawable/spinner_mtrl_am_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item android:state_pressed="true">
- <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ <nine-patch android:src="@drawable/spinner_mtrl_am_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ <nine-patch android:src="@drawable/spinner_mtrl_am_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/switch_thumb_quantum_anim.xml b/core/res/res/drawable/switch_thumb_material_anim.xml
index 1984d47fecc6..e7baa2c9c1da 100644
--- a/core/res/res/drawable/switch_thumb_quantum_anim.xml
+++ b/core/res/res/drawable/switch_thumb_material_anim.xml
@@ -16,112 +16,112 @@
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
<item android:state_enabled="false" android:state_checked="true">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_014" android:gravity="center" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_014" android:gravity="center" android:tint="?attr/colorControlActivated" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_enabled="false">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_000" android:gravity="center" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_000" android:gravity="center" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_checked="true" android:id="@+id/on">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:id="@+id/off">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_000" android:gravity="center" android:tint="?attr/colorControlNormal" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_000" android:gravity="center" android:tint="?attr/colorControlNormal" />
</item>
<transition android:fromId="@+id/off" android:toId="@+id/on">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_006" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_006" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_007" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_007" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_008" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_008" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_009" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_009" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_010" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_010" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_011" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_011" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_012" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_012" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_013" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_013" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_on_qntm_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_on_mtrl_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
<transition android:fromId="@+id/on" android:toId="@+id/off">
<animation-list>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_000" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_001" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_002" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_003" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_004" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_005" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_006" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_006" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_007" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_007" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_008" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_008" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_009" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_009" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_010" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_010" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_011" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_011" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_012" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_012" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_013" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_013" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
<item android:duration="15">
- <bitmap android:src="@drawable/btn_switch_to_off_qntm_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
+ <bitmap android:src="@drawable/btn_switch_to_off_mtrl_014" android:gravity="center" android:tint="?attr/colorControlActivated" />
</item>
</animation-list>
</transition>
diff --git a/core/res/res/drawable/switch_track_quantum.xml b/core/res/res/drawable/switch_track_material.xml
index 3651a0a7594a..6ca2489f7c8a 100644
--- a/core/res/res/drawable/switch_track_quantum.xml
+++ b/core/res/res/drawable/switch_track_material.xml
@@ -16,21 +16,21 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_checked="true">
- <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ <nine-patch android:src="@drawable/switch_track_mtrl_alpha"
android:tint="?attr/colorControlActivated"
android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_enabled="false">
- <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ <nine-patch android:src="@drawable/switch_track_mtrl_alpha"
android:tint="?attr/colorControlNormal"
android:alpha="?attr/disabledAlpha" />
</item>
<item android:state_checked="true">
- <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ <nine-patch android:src="@drawable/switch_track_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item>
- <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ <nine-patch android:src="@drawable/switch_track_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/drawable/tab_indicator_quantum.xml b/core/res/res/drawable/tab_indicator_material.xml
index ff14d9c8be0a..16362c076474 100644
--- a/core/res/res/drawable/tab_indicator_quantum.xml
+++ b/core/res/res/drawable/tab_indicator_material.xml
@@ -16,7 +16,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
- <nine-patch android:src="@drawable/tab_indicator_qntm_alpha"
+ <nine-patch android:src="@drawable/tab_indicator_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item android:drawable="@color/transparent" />
diff --git a/core/res/res/drawable/text_cursor_quantum.xml b/core/res/res/drawable/text_cursor_material.xml
index 23d4ae0318c8..a350c47b61f7 100644
--- a/core/res/res/drawable/text_cursor_quantum.xml
+++ b/core/res/res/drawable/text_cursor_material.xml
@@ -15,5 +15,5 @@
-->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/text_cursor_qntm_alpha"
+ android:src="@drawable/text_cursor_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_left_quantum.xml b/core/res/res/drawable/text_select_handle_left_material.xml
index a0ad7cf04292..b228d3f5ab12 100644
--- a/core/res/res/drawable/text_select_handle_left_quantum.xml
+++ b/core/res/res/drawable/text_select_handle_left_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/text_select_handle_left_qntm_alpha"
+ android:src="@drawable/text_select_handle_left_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_middle_quantum.xml b/core/res/res/drawable/text_select_handle_middle_material.xml
index bff0b665a66b..f0f4b3e88421 100644
--- a/core/res/res/drawable/text_select_handle_middle_quantum.xml
+++ b/core/res/res/drawable/text_select_handle_middle_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/text_select_handle_middle_qntm_alpha"
+ android:src="@drawable/text_select_handle_middle_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_right_quantum.xml b/core/res/res/drawable/text_select_handle_right_material.xml
index 413661f6fc80..acacbf6784af 100644
--- a/core/res/res/drawable/text_select_handle_right_quantum.xml
+++ b/core/res/res/drawable/text_select_handle_right_material.xml
@@ -15,5 +15,5 @@
-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/text_select_handle_right_qntm_alpha"
+ android:src="@drawable/text_select_handle_right_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/textfield_search_quantum.xml b/core/res/res/drawable/textfield_search_material.xml
index 877de4629817..1c0f5eb04f88 100644
--- a/core/res/res/drawable/textfield_search_quantum.xml
+++ b/core/res/res/drawable/textfield_search_material.xml
@@ -16,27 +16,27 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true">
- <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:state_window_focused="false" android:state_enabled="false">
- <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item android:state_enabled="true" android:state_focused="true">
- <nine-patch android:src="@drawable/textfield_search_activated_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_activated_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item android:state_enabled="true" android:state_activated="true">
- <nine-patch android:src="@drawable/textfield_search_activated_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_activated_mtrl_alpha"
android:tint="?attr/colorControlActivated" />
</item>
<item android:state_enabled="true">
- <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
<item>
- <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+ <nine-patch android:src="@drawable/textfield_search_default_mtrl_alpha"
android:tint="?attr/colorControlNormal" />
</item>
</selector>
diff --git a/core/res/res/interpolator/accelerate_quart.xml b/core/res/res/interpolator/accelerate_quart.xml
new file mode 100644
index 000000000000..64efec6fd19a
--- /dev/null
+++ b/core/res/res/interpolator/accelerate_quart.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, 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.
+*/
+-->
+
+<accelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:factor="2.0" />
diff --git a/core/res/res/interpolator/decelerate_quart.xml b/core/res/res/interpolator/decelerate_quart.xml
new file mode 100644
index 000000000000..9f6a51fd9da8
--- /dev/null
+++ b/core/res/res/interpolator/decelerate_quart.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, 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.
+*/
+-->
+
+<decelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:factor="2.0" />
diff --git a/core/res/res/layout/action_bar_home_quantum.xml b/core/res/res/layout/action_bar_home_material.xml
index 921345862f88..921345862f88 100644
--- a/core/res/res/layout/action_bar_home_quantum.xml
+++ b/core/res/res/layout/action_bar_home_material.xml
diff --git a/core/res/res/layout/alert_dialog_quantum.xml b/core/res/res/layout/alert_dialog_material.xml
index 7fd22ad0cbb2..57bdfc937fe7 100644
--- a/core/res/res/layout/alert_dialog_quantum.xml
+++ b/core/res/res/layout/alert_dialog_material.xml
@@ -21,7 +21,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="@drawable/dialog_background_quantum"
+ android:background="@drawable/dialog_background_material"
android:translationZ="@dimen/floating_window_z"
android:layout_marginLeft="@dimen/floating_window_margin_left"
android:layout_marginTop="@dimen/floating_window_margin_top"
diff --git a/core/res/res/layout/alert_dialog_progress_quantum.xml b/core/res/res/layout/alert_dialog_progress_material.xml
index b9d0814d8013..b9d0814d8013 100644
--- a/core/res/res/layout/alert_dialog_progress_quantum.xml
+++ b/core/res/res/layout/alert_dialog_progress_material.xml
diff --git a/core/res/res/layout/dialog_custom_title_quantum.xml b/core/res/res/layout/dialog_custom_title_material.xml
index 1bb93eb61f39..1bb93eb61f39 100644
--- a/core/res/res/layout/dialog_custom_title_quantum.xml
+++ b/core/res/res/layout/dialog_custom_title_material.xml
diff --git a/core/res/res/layout/dialog_title_icons_quantum.xml b/core/res/res/layout/dialog_title_icons_material.xml
index 28e20d93ffc3..28e20d93ffc3 100644
--- a/core/res/res/layout/dialog_title_icons_quantum.xml
+++ b/core/res/res/layout/dialog_title_icons_material.xml
diff --git a/core/res/res/layout/dialog_title_quantum.xml b/core/res/res/layout/dialog_title_material.xml
index b92c1e701726..b92c1e701726 100644
--- a/core/res/res/layout/dialog_title_quantum.xml
+++ b/core/res/res/layout/dialog_title_material.xml
diff --git a/core/res/res/layout/notification_quantum_action.xml b/core/res/res/layout/notification_material_action.xml
index 0986343935a7..7ccaad52cb53 100644
--- a/core/res/res/layout/notification_quantum_action.xml
+++ b/core/res/res/layout/notification_material_action.xml
@@ -16,7 +16,7 @@
-->
<Button xmlns:android="http://schemas.android.com/apk/res/android"
- style="@android:style/Widget.Quantum.Light.Button.Borderless.Small"
+ style="@android:style/Widget.Material.Light.Button.Borderless.Small"
android:id="@+id/action0"
android:layout_width="0dp"
android:layout_height="48dp"
diff --git a/core/res/res/layout/notification_quantum_action_list.xml b/core/res/res/layout/notification_material_action_list.xml
index ec4919b6041c..ec4919b6041c 100644
--- a/core/res/res/layout/notification_quantum_action_list.xml
+++ b/core/res/res/layout/notification_material_action_list.xml
diff --git a/core/res/res/layout/notification_quantum_action_tombstone.xml b/core/res/res/layout/notification_material_action_tombstone.xml
index 51e42055c4e3..8bf456ead691 100644
--- a/core/res/res/layout/notification_quantum_action_tombstone.xml
+++ b/core/res/res/layout/notification_material_action_tombstone.xml
@@ -16,7 +16,7 @@
-->
<Button xmlns:android="http://schemas.android.com/apk/res/android"
- style="@android:style/Widget.Quantum.Light.Button.Borderless.Small"
+ style="@android:style/Widget.Material.Light.Button.Borderless.Small"
android:id="@+id/action0"
android:layout_width="0dp"
android:layout_height="48dp"
diff --git a/core/res/res/layout/notification_quantum_media_action.xml b/core/res/res/layout/notification_material_media_action.xml
index 17f0848e6645..331ee57254b8 100644
--- a/core/res/res/layout/notification_quantum_media_action.xml
+++ b/core/res/res/layout/notification_material_media_action.xml
@@ -16,7 +16,7 @@
-->
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
- style="@android:style/Widget.Quantum.Light.Button.Borderless.Small"
+ style="@android:style/Widget.Material.Light.Button.Borderless.Small"
android:id="@+id/action0"
android:layout_width="60dp"
android:layout_height="match_parent"
diff --git a/core/res/res/layout/notification_template_quantum_base.xml b/core/res/res/layout/notification_template_material_base.xml
index 789bf32e33f7..ab13b986dfd3 100644
--- a/core/res/res/layout/notification_template_quantum_base.xml
+++ b/core/res/res/layout/notification_template_material_base.xml
@@ -49,7 +49,7 @@
android:orientation="horizontal"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -73,7 +73,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -90,7 +90,7 @@
android:layout_height="12dp"
android:layout_marginStart="8dp"
android:visibility="gone"
- style="@style/Widget.StatusBar.Quantum.ProgressBar"
+ style="@style/Widget.StatusBar.Material.ProgressBar"
/>
<LinearLayout
android:id="@+id/line3"
@@ -101,7 +101,7 @@
android:layout_marginStart="8dp"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -111,7 +111,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -120,6 +120,15 @@
android:gravity="center"
android:paddingStart="8dp"
/>
+ <ImageView android:id="@+id/profile_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:layout_marginStart="8dp"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ />
</LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_big_base.xml b/core/res/res/layout/notification_template_material_big_base.xml
index 8cb55494d48c..0564a8f30c25 100644
--- a/core/res/res/layout/notification_template_quantum_big_base.xml
+++ b/core/res/res/layout/notification_template_material_big_base.xml
@@ -53,7 +53,7 @@
android:orientation="horizontal"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -77,7 +77,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -90,7 +90,7 @@
android:visibility="gone"
/>
<TextView android:id="@+id/big_text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
@@ -108,7 +108,7 @@
android:gravity="center_vertical"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -118,7 +118,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -127,6 +127,15 @@
android:gravity="center"
android:paddingStart="8dp"
/>
+ <ImageView android:id="@+id/profile_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:layout_marginStart="8dp"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ />
</LinearLayout>
<ProgressBar
android:id="@android:id/progress"
@@ -136,7 +145,7 @@
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
- style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+ style="@style/Widget.StatusBar.Material.ProgressBar"
/>
</LinearLayout>
<ImageView
@@ -146,7 +155,7 @@
android:visibility="gone"
android:background="@drawable/list_divider_holo_light" />
<include
- layout="@layout/notification_quantum_action_list"
+ layout="@layout/notification_material_action_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/notification_large_icon_width"
diff --git a/core/res/res/layout/notification_template_quantum_big_media.xml b/core/res/res/layout/notification_template_material_big_media.xml
index 5c9334e437f3..f8e1986d14b8 100644
--- a/core/res/res/layout/notification_template_quantum_big_media.xml
+++ b/core/res/res/layout/notification_template_material_big_media.xml
@@ -38,7 +38,6 @@
android:minHeight="@dimen/notification_large_icon_height"
android:paddingTop="2dp"
android:orientation="vertical"
- android:background="@color/notification_media_info_bg"
>
<LinearLayout
android:id="@+id/line1"
@@ -50,7 +49,7 @@
android:orientation="horizontal"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -74,7 +73,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -87,7 +86,7 @@
android:visibility="gone"
/>
<TextView android:id="@+id/big_text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
@@ -105,7 +104,7 @@
android:gravity="center_vertical"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -115,7 +114,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -147,7 +146,7 @@
android:layout_height="6dp"
android:layout_gravity="top"
android:visibility="gone"
- style="@style/Widget.StatusBar.Quantum.ProgressBar"
+ style="@style/Widget.StatusBar.Material.ProgressBar.Media"
/>
</FrameLayout>
</LinearLayout>
diff --git a/core/res/res/layout/notification_template_quantum_big_picture.xml b/core/res/res/layout/notification_template_material_big_picture.xml
index f68e4145efb8..74819fd8ccc3 100644
--- a/core/res/res/layout/notification_template_quantum_big_picture.xml
+++ b/core/res/res/layout/notification_template_material_big_picture.xml
@@ -38,7 +38,7 @@
android:scaleType="fitXY"
android:src="@drawable/title_bar_shadow"
/>
- <include layout="@layout/notification_template_quantum_base"
+ <include layout="@layout/notification_template_material_base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
@@ -51,7 +51,7 @@
android:background="#CCEEEEEE"
>
<include
- layout="@layout/notification_quantum_action_list"
+ layout="@layout/notification_material_action_list"
android:id="@+id/actions"
android:layout_gravity="bottom"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/notification_template_quantum_big_text.xml b/core/res/res/layout/notification_template_material_big_text.xml
index bbd1071c1fd0..1de5add91c8c 100644
--- a/core/res/res/layout/notification_template_quantum_big_text.xml
+++ b/core/res/res/layout/notification_template_material_big_text.xml
@@ -55,7 +55,7 @@
android:layout_weight="0"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -79,7 +79,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -99,10 +99,10 @@
android:layout_marginEnd="8dp"
android:visibility="gone"
android:layout_weight="0"
- style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+ style="@style/Widget.StatusBar.Material.ProgressBar"
/>
<TextView android:id="@+id/big_text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="10dp"
@@ -121,7 +121,7 @@
android:visibility="gone"
android:background="@drawable/list_divider_holo_light" />
<include
- layout="@layout/notification_quantum_action_list"
+ layout="@layout/notification_material_action_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:visibility="gone"
@@ -146,7 +146,7 @@
android:gravity="center_vertical"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -156,7 +156,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -165,6 +165,15 @@
android:gravity="center"
android:paddingStart="8dp"
/>
+ <ImageView android:id="@+id/profile_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:layout_marginStart="8dp"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ />
</LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_inbox.xml b/core/res/res/layout/notification_template_material_inbox.xml
index a071d59fa596..8411ff57b04e 100644
--- a/core/res/res/layout/notification_template_quantum_inbox.xml
+++ b/core/res/res/layout/notification_template_material_inbox.xml
@@ -56,7 +56,7 @@
android:layout_weight="0"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -80,7 +80,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -101,10 +101,10 @@
android:layout_marginEnd="8dp"
android:visibility="gone"
android:layout_weight="0"
- style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+ style="@style/Widget.Material.Light.ProgressBar.Horizontal"
/>
<TextView android:id="@+id/inbox_text0"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -115,7 +115,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text1"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -126,7 +126,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -137,7 +137,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text3"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -148,7 +148,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text4"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -158,7 +158,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text5"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -169,7 +169,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_text6"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -180,7 +180,7 @@
android:layout_weight="1"
/>
<TextView android:id="@+id/inbox_more"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
@@ -206,7 +206,7 @@
android:visibility="gone"
android:background="@drawable/list_divider_holo_light" />
<include
- layout="@layout/notification_quantum_action_list"
+ layout="@layout/notification_material_action_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
@@ -230,7 +230,7 @@
android:gravity="center_vertical"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -240,7 +240,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -249,6 +249,15 @@
android:gravity="center"
android:paddingStart="8dp"
/>
+ <ImageView android:id="@+id/profile_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="center"
+ android:layout_weight="0"
+ android:layout_marginStart="8dp"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ />
</LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_media.xml b/core/res/res/layout/notification_template_material_media.xml
index 14fabce9584f..c2fc006284ca 100644
--- a/core/res/res/layout/notification_template_quantum_media.xml
+++ b/core/res/res/layout/notification_template_material_media.xml
@@ -50,7 +50,7 @@
android:orientation="horizontal"
>
<TextView android:id="@+id/title"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
@@ -74,7 +74,7 @@
/>
</LinearLayout>
<TextView android:id="@+id/text2"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dp"
@@ -91,7 +91,7 @@
android:layout_height="12dp"
android:layout_marginStart="8dp"
android:visibility="gone"
- style="@style/Widget.StatusBar.Quantum.ProgressBar"
+ style="@style/Widget.StatusBar.Material.ProgressBar"
/>
<LinearLayout
android:id="@+id/line3"
@@ -102,7 +102,7 @@
android:layout_marginStart="8dp"
>
<TextView android:id="@+id/text"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
@@ -112,7 +112,7 @@
android:fadingEdge="horizontal"
/>
<TextView android:id="@+id/info"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/core/res/res/layout/notification_template_part_chronometer.xml b/core/res/res/layout/notification_template_part_chronometer.xml
index 9b6e6c579f9c..87dfe1f80e6f 100644
--- a/core/res/res/layout/notification_template_part_chronometer.xml
+++ b/core/res/res/layout/notification_template_part_chronometer.xml
@@ -15,7 +15,7 @@
-->
<Chronometer android:id="@+id/chronometer" xmlns:android="http://schemas.android.com/apk/res/android"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Time"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/core/res/res/layout/notification_template_part_time.xml b/core/res/res/layout/notification_template_part_time.xml
index b559dce46b43..5982c48ebe3f 100644
--- a/core/res/res/layout/notification_template_part_time.xml
+++ b/core/res/res/layout/notification_template_part_time.xml
@@ -15,7 +15,7 @@
-->
<DateTimeView android:id="@+id/time" xmlns:android="http://schemas.android.com/apk/res/android"
- android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Time"
+ android:textAppearance="@style/TextAppearance.StatusBar.Material.EventContent.Time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
diff --git a/core/res/res/layout/preference_category_quantum.xml b/core/res/res/layout/preference_category_material.xml
index 032e09d8af35..456b25280ee4 100644
--- a/core/res/res/layout/preference_category_quantum.xml
+++ b/core/res/res/layout/preference_category_material.xml
@@ -20,9 +20,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip"
- android:textAppearance="@style/TextAppearance.Quantum.Body2"
- android:textColor="?android:attr/textColorSecondary"
- android:textStyle="bold"
+ android:textAppearance="@style/TextAppearance.Material.Body2"
+ android:textColor="?android:attr/colorAccent"
android:paddingStart="?attr/listPreferredItemPaddingStart"
android:paddingEnd="?attr/listPreferredItemPaddingEnd"
android:paddingTop="16dip" />
diff --git a/core/res/res/layout/preference_child_quantum.xml b/core/res/res/layout/preference_child_material.xml
index 690d64a23db1..690d64a23db1 100644
--- a/core/res/res/layout/preference_child_quantum.xml
+++ b/core/res/res/layout/preference_child_material.xml
diff --git a/core/res/res/layout/preference_information_quantum.xml b/core/res/res/layout/preference_information_material.xml
index f21640fc0818..f21640fc0818 100644
--- a/core/res/res/layout/preference_information_quantum.xml
+++ b/core/res/res/layout/preference_information_material.xml
diff --git a/core/res/res/layout/preference_quantum.xml b/core/res/res/layout/preference_material.xml
index a4fe73d0cf60..a9599139c817 100644
--- a/core/res/res/layout/preference_quantum.xml
+++ b/core/res/res/layout/preference_material.xml
@@ -31,7 +31,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="58dip"
- android:gravity="left|center_vertical"
+ android:gravity="start|center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+android:id/icon"
diff --git a/core/res/res/layout/preference_widget_checkbox.xml b/core/res/res/layout/preference_widget_checkbox.xml
index bfd7f0aaf8ca..f7943465821a 100644
--- a/core/res/res/layout/preference_widget_checkbox.xml
+++ b/core/res/res/layout/preference_widget_checkbox.xml
@@ -21,4 +21,5 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
- android:clickable="false" />
+ android:clickable="false"
+ android:background="@null" />
diff --git a/core/res/res/layout/preference_widget_switch.xml b/core/res/res/layout/preference_widget_switch.xml
index 534c7eca135e..04a310b7a9dd 100644
--- a/core/res/res/layout/preference_widget_switch.xml
+++ b/core/res/res/layout/preference_widget_switch.xml
@@ -21,4 +21,5 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dip"
- android:focusable="false" />
+ android:focusable="false"
+ android:background="@null" />
diff --git a/core/res/res/layout/progress_dialog_quantum.xml b/core/res/res/layout/progress_dialog_material.xml
index 84d06b57e138..84d06b57e138 100644
--- a/core/res/res/layout/progress_dialog_quantum.xml
+++ b/core/res/res/layout/progress_dialog_material.xml
diff --git a/core/res/res/layout/select_dialog_item_quantum.xml b/core/res/res/layout/select_dialog_item_material.xml
index 59b432e19158..59b432e19158 100644
--- a/core/res/res/layout/select_dialog_item_quantum.xml
+++ b/core/res/res/layout/select_dialog_item_material.xml
diff --git a/core/res/res/layout/select_dialog_quantum.xml b/core/res/res/layout/select_dialog_material.xml
index ee040392f2c5..ee040392f2c5 100644
--- a/core/res/res/layout/select_dialog_quantum.xml
+++ b/core/res/res/layout/select_dialog_material.xml
diff --git a/core/res/res/layout/select_dialog_multichoice_quantum.xml b/core/res/res/layout/select_dialog_multichoice_material.xml
index 8b4c59df8728..8b4c59df8728 100644
--- a/core/res/res/layout/select_dialog_multichoice_quantum.xml
+++ b/core/res/res/layout/select_dialog_multichoice_material.xml
diff --git a/core/res/res/layout/select_dialog_singlechoice_quantum.xml b/core/res/res/layout/select_dialog_singlechoice_material.xml
index 27a6648b53ec..27a6648b53ec 100644
--- a/core/res/res/layout/select_dialog_singlechoice_quantum.xml
+++ b/core/res/res/layout/select_dialog_singlechoice_material.xml
diff --git a/core/res/res/layout/status_bar_latest_event_content.xml b/core/res/res/layout/status_bar_latest_event_content.xml
index dc78174eaef6..9444164d9be8 100644
--- a/core/res/res/layout/status_bar_latest_event_content.xml
+++ b/core/res/res/layout/status_bar_latest_event_content.xml
@@ -22,7 +22,7 @@
android:layout_height="wrap_content"
android:background="#FFFF00FF"
>
- <include layout="@layout/notification_template_quantum_base"
+ <include layout="@layout/notification_template_material_base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
diff --git a/core/res/res/layout/tab_indicator_quantum.xml b/core/res/res/layout/tab_indicator_material.xml
index fcb2d5f87148..7dba219ef942 100644
--- a/core/res/res/layout/tab_indicator_quantum.xml
+++ b/core/res/res/layout/tab_indicator_material.xml
@@ -18,7 +18,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="?android:attr/actionBarSize"
android:orientation="horizontal"
- style="@android:style/Widget.Quantum.Tab">
+ style="@android:style/Widget.Material.Tab">
<ImageView
android:id="@android:id/icon"
@@ -32,6 +32,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- style="@android:style/Widget.Quantum.TabText" />
+ style="@android:style/Widget.Material.TabText" />
</LinearLayout>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 21f1401ff880..07449ab41e16 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Laat die program oudio-uitset vasvang en herlei."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Aktiveerwoord-opsporing"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Laat die program toe om oudio vir Aktiveerwoord-opsporing op te neem. Die opname kan in die agtergrond plaasvind, maar verhoed nie dat ander oudio opgeneem word nie (bv. Kameraopnemer)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Oudio-versending"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Laat die program toe om oudio-versending direk te beheer en oudio-beleidsbesluite ter syde te stel."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"vang video-uitset vas"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Laat die program video-uitset vasvang en herlei."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"vang veilige video-uitset vas"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Laat die program toe om globale klankinstellings soos volume en watter luidspreker vir uitvoer gebruik word, te verander."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"neem klank op"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Laat die program toe om klank met die mikrofoon op te neem. Hierdie toestemming laat die program toe om klank te eniger tyd, sonder jou bevestiging, op te neem."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-kommunikasie"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Laat die program toe om bevele na die SIM te stuur. Dit is baie gevaarlik."</string>
<string name="permlab_camera" msgid="3616391919559751192">"neem foto\'s en video\'s"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Laat die program toe om foto\'s en video\'s met die kamera te neem. Hierdie toestemming laat die program toe om die kamera te eniger tyd sonder jou bevestiging te gebruik."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiveer LED wat oordrag aandui wanneer kamera gebruik word"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Laat \'n program toe om keyguard te beheer."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Luister na vertrouenstaatveranderinge."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Laat \'n program toe om vir veranderinge in vertrouenstaat te luister."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Voorsien \'n vertroude agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Laat \'n program toe om \'n vertroude agent te voorsien."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Verbind met \'n vertrouensagentdiens"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Laat \'n program toe om met \'n vertrouensagentdiens te verbind."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Tree in wisselwerking met opdatering- en terugstellingstelsel"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 0d315a27042f..67406cb1f71b 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"መተግበሪያው የድምጽ ውጽዓት እንዲቀርጽ እና አቅጣጫውን እንዲያዞር ያስችለዋል።"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"ትኩስ ቃል ማወቅ"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"ትኩስ ቃል ለይቶ ለማወቅ ድምጽ እንዲቀርጽ ለመተግበሪያው ይፈቅድለታል። ቀረጻው በጀርባ ሊካሄድ ይችላል ነገር ግን ሌላ የድምጽ ቀረጻዎችን አይከለክልም (ለምሳሌ፣ የካሜራ መቅረጫ)።"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"የድምጽ ማስተላለፊያ"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"መተግበሪያው በቀጥታ የድምጽ ማስተላለፍን እንዲቆጣጠርና የድምጽ መምሪያ ውሳኔዎችን እንዲጥስ ይፈቅድለታል።"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"የቪዲዮ ውጽዓት ይቅረጹ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"መተግበሪያው የቪዲዮ ውጽዓት እንዲቀርጽ እና አቅጣጫውን እንዲያዞር ያስችለዋል።"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ደህንነቱ የተጠበቀ የቪዲዮ ውጽዓት ይቅረጹ"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"መተግበሪያው አንደ የድምጽ መጠን እና ለውጽአት የትኛውን የድምጽ ማጉያ ጥቅም ላይ እንደዋለ የመሳሰሉ ሁለንተናዊ የድምጽ ቅንብሮችን እንዲያስተካክል ይፈቅድለታል።"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ኦዲዮ ይቅዱ"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"መተግበሪያው ድምጽን በማይክሮፎን እንዲቀዳ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው ያላንተ ማረጋገጫ በማንኛውም ጊዜ ድምጽ እንዲቀዳ ይፈቅድለታል።"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"የሲም ግንኙነት"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"መተግበሪያው ትዕዛዞችን ወደ ሲሙ እንዲልክ ያስችለዋል። ይሄ በጣማ አደገኛ ነው።"</string>
<string name="permlab_camera" msgid="3616391919559751192">"ፎቶዎች እና ቪዲዮዎች ያንሱ"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"መተግበሪያው በካሜራው ፎቶዎችንና ቪዲዮዎችን እንዲያነሳ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው ካሜራውን በማንኛውም ጊዜ ያላንተ ማረጋገጫ እንዲጠቀም ይፈቅድለታል።"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ካሜራው ስራ ላይ ሲሆን የማስተላለፍ አመልካች ኤል ኢ ዲን ያሰናክሉ"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"አንድ መተግበሪያ የቁልፍ መጠበቂያውን እንዲቆጣጠር ያስችለዋል።"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"የተአማኒነት ሁኔታ ለውጦችን አዳምጥ።"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"መተግበሪያው በተአማኒነት ሁኔታ ውስጥ ለውጦችን እንዲያዳምጥ ይፈቅዳል።"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"የመታመን ወኪል ያቅርቡ።"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"አንድ መተግበሪያ የመታመን ወኪል እንዲያቀርብ ይፈቅድለታል።"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ለተአማኒነት ወኪል አገልግሎት ተገዢ አድርግ"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"ለመተግበሪያን የተአማኒነት ወኪል አገልግሎትን እንዲያከብር ይፈቅዳል።"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"ከዝማኔዎች እና ከመልሶ ማግኛ ስርዓቶች ጋር ይገናኙ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index fbdaab4974cf..f8e52727fdc7 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"السماح للتطبيق بالتقاط إخراج الصوت وإعادة توجيهه."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"اكتشاف الكلمة المهمة"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"للسماح للتطبيق بالتقاط الصوت لاكتشاف الكلمة المهمة. يمكن أن يتم الالتقاط في الخلفية ولكنه لا يمنع التقاط الأصوات الأخرى (على سبيل المثال، كاميرا الفيديو)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"التوجيه الصوتي"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"للسماح للتطبيق بالتحكم المباشر في التوجيه الصوتي وتجاوز قرارات السياسات الصوتية."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"التقاط إخراج الفيديو"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"السماح للتطبيق بالتقاط إخراج الفيديو وإعادة توجيهه."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"التقاط إخراج الفيديو الآمن"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"للسماح للتطبيق بتعديل إعدادات الصوت العامة مثل مستوى الصوت وأي السماعات يتم استخدامها للاستماع."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"تسجيل الصوت"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"للسماح للتطبيق بتسجيل الصوت باستخدام الميكروفون. ويتيح هذا الإذن للتطبيق تسجيل الصوت في أي وقت وبدون موافقة منك."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"‏اتصالات SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"‏السماح للتطبيق بإرسال أوامر إلى بطاقة SIM. وهذا أمر بالغ الخطورة."</string>
<string name="permlab_camera" msgid="3616391919559751192">"التقاط صور ومقاطع فيديو"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"للسماح للتطبيق بالتقاط صور ومقاطع فيديو من خلال الكاميرا. ويتيح هذا الإذن للتطبيق استخدام الكاميرا في أي وقت وبدون موافقة منك."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"‏تعطيل مؤشر LED للإرسال عندما تكون الكاميرا قيد الاستخدام"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"للسماح لأحد التطبيقات بالتحكم في قفل المفاتيح."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"معرفة تغييرات حالة الاعتماد."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"للسماح للتطبيق بالتعرف على التغييرات في حالة الاعتماد."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"توفير وكيل معتمد."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"للسماح لأحد التطبيقات بتوفير وكيل معتمد."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"الالتزام بخدمة الوكيل المعتمد"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"للسماح لأحد التطبيقات بالالتزام بخدمة الوكيل المعتمد."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"التفاعل مع نظام التحديث والاسترداد"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 59bb80761a17..1a13170fcbe5 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Разрешава на приложението да записва и пренасочва възпроизвеждания звук."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Откриване на активиращи думи"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Разрешава на приложението да записва звук с цел откриване на активиращи думи. Това може да става на заден план, но не пречи на записването на други звуци (напр. от видеокамерата)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Аудиомаршрутизиране"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Разрешава на приложението директно да контролира аудиомаршрутизирането и да заменя решенията на аудиоправилата."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"записване на възпроизвеждания образ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Разрешава на приложението да записва и пренасочва възпроизвеждания образ."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"записване на защитеното възпроизвеждане на образ"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Разрешава на приложението да променя глобалните настройки за звука, като например силата и това, кой високоговорител се използва за изход."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запис на звук"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Разрешава на приложението да записва звук с микрофона. Това разрешение му позволява да го прави по всяко време без потвърждение от ваша страна."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"комуникация със SIM картата"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Разрешава на приложението да изпраща команди до SIM картата. Това е много опасно."</string>
<string name="permlab_camera" msgid="3616391919559751192">"правене на снимки и видеоклипове"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Разрешава на приложението да прави снимки и видеоклипове с камерата. Това разрешение му позволява да я използва по всяко време без потвърждение от ваша страна."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"деактивиране на светодиодния индикатор за предаване, когато камерата се използва"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Разрешава на приложението да контролира функцията за защита на клавишите."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Следене за промени в състоянието на надеждност"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Разрешава на приложението да следи за промени в състоянието на надеждност."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Предоставяне на trust agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Разрешава на приложението да предоставя trust agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Обвързване с услуга за trust agents"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Разрешава на приложението да се обвърже с услуга за trust agents."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Взаимодействие със системата за актуализации и възстановяване"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index a53c1318e053..436890810a22 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permet que l\'aplicació capturi i redirigeixi la sortida d\'àudio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detecció de paraules actives"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permet que l\'aplicació capturi àudio per a la detecció de paraules actives. La captura es pot produir en segon pla però no evita altres captures d\'àudio (per exemple, de càmera de vídeo)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Encaminament d\'àudio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permet que l\'aplicació controli directament l\'encaminament d\'àudio i sobreescrigui les decisions relacionades amb la política d\'àudio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"captura la sortida de vídeo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permet que l\'aplicació capturi i redirigeixi la sortida de vídeo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"captura la sortida de vídeo segur"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet que l\'aplicació modifiqui la configuració d\'àudio general, com ara el volum i l\'altaveu de sortida que es fa servir."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrar àudio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet que l\'aplicació enregistri àudio amb el micròfon. Aquest permís permet que l\'aplicació enregistri àudio en qualsevol moment sense la teva confirmació."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicació SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permet que l\'aplicació enviï ordres a la SIM. Això és molt perillós."</string>
<string name="permlab_camera" msgid="3616391919559751192">"fer fotos i vídeos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permet que l\'aplicació faci fotos i vídeos amb la càmera. Aquest permís permet que l\'aplicació utilitzi la càmera en qualsevol moment sense la teva confirmació."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desactiva la transmissió del LED indicador en fer servir la càmera"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet que una aplicació controli el bloqueig de les tecles."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Escoltar els canvis de l\'estat de confiança"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permet que una aplicació escolti els canvis en l\'estat de confiança."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Proporcionar un agent de confiança"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permet que una aplicació proporcioni un agent de confiança."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Enllaçar amb el servei d\'un agent de confiança"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permet que una aplicació es vinculi amb el servei d\'un agent de confiança."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interacciona amb el sistema de recuperació i amb les actualitzacions"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index a1e99fa29a5a..cb8a70a65d09 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Umožní aplikaci zachytit a přesměrovat výstup zvuku."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detekce klíčových slov"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Umožní aplikaci zachytávat zvuk za účelem detekce klíčových slov. Zachytávání může probíhat na pozadí a nebrání jinému zaznamenávání zvuku (například videokamerou)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Směrování zvuku"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Umožňuje aplikaci převzít přímou kontrolu nad směrováním zvuku a přepsat nastavené zásady zvuku."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"zachytit výstup videa"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Umožní aplikaci zachytit a přesměrovat výstup videa."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"zachytit zabezpečený výstup videa"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikaci změnit globální nastavení zvuku, například hlasitost či reproduktor pro výstup zvuku."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"nahrávání zvuku"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Umožňuje aplikaci zaznamenat zvuk pomocí mikrofonu. Toto oprávnění umožňuje aplikaci kdykoliv zaznamenat zvuk bez vašeho svolení."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikace s kartou SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Umožňuje aplikaci odesílat příkazy na kartu SIM. Toto oprávnění je velmi nebezpečné."</string>
<string name="permlab_camera" msgid="3616391919559751192">"pořizování fotografií a videí"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Umožňuje aplikaci pořizovat fotografie a videa pomocí fotoaparátu. Toto oprávnění umožňuje aplikaci používat fotoaparát kdykoliv i bez vašeho svolení."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"vypnutí indikátoru LED přenosu při použití fotoaparátu"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umožňuje aplikaci ovládat zámek obrazovky."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Naslouchat změnám stavu důvěryhodnosti"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Umožňuje aplikaci naslouchat změnám ve stavu důvěryhodnosti."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Poskytování zástupce důvěryhodnosti"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Umožňuje aplikaci poskytnout zástupce důvěryhodnosti."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vázat se na službu zástupce důvěryhodnosti"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Umožňuje aplikaci vázat se na službu zástupce důvěryhodnosti."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interakce se systémem aktualizací a obnovení"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index b17b8c64fb5c..a3f71d7cc591 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Tillader, at appen opfanger og omdirigerer et lydoutput."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Registrering af kommandoord"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Tillader, at appen optager lyd til registrering af kommandoord. Optagelsen kan ske i baggrunden, men forhindrer ikke andre lydoptagelser (f.eks. videokamera)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Lydhåndtering"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Tillader, at appen direkte kontrollerer lydhåndteringen og tilsidesætter beslutninger, som foretages af lydpolitikker."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"opfang et videooutput"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Tillader, at appen opfanger og omdirigerer et videooutput."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"opfang et sikkert videooutput"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillader, at appen kan ændre globale lydindstillinger, som f.eks. lydstyrke og hvilken højttaler der bruges til output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"optage lyd"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Tillader, at appen kan optage lyd med mikrofonen. Med denne tilladelse kan appen til enhver tid optage lyd uden din bekræftelse."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikation"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Tillader, at appen sender kommandoer til SIM-kortet. Dette er meget farligt."</string>
<string name="permlab_camera" msgid="3616391919559751192">"tage billeder og optage video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Tillader, at appen kan tage billeder og videoer med kameraet. Med denne tilladelse kan appen til enhver tid bruge kameraet uden din bekræftelse."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiver sendelysdioden, når kameraet er i brug"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillader, at en applikation styrer nøglebeskyttelsen."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Registrere ændringer i trust-tilstand."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Tillader, at en applikation registrerer ændringer i trust-tilstand."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Angiv en tillidsagent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Tillader, at en applikation angiver en tillidsagent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Knytte sig til en trust agent-tjeneste"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Tillader, at en applikation knytter sig til en trust agent-tjeneste."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interager med opdaterings- og gendannelsessystemet"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 70c12cd86a1a..293adf334ec5 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Ermöglicht der App die Erfassung und Weiterleitung von Audioausgaben"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Hotword-Erkennung"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"App darf Audio für die Hotword-Erkennung erfassen. Dies kann im Hintergrund durchgeführt werden und beeinflusst die Erfassung von Audio über andere Funktionen (z. B. Camcorder) nicht."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Audiorouting"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Ermöglicht der App die direkte Steuerung des Audiorouting und das Außerkraftsetzen von Entscheidungen der Audiorichtlinien"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"Videoausgabe erfassen"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Ermöglicht der App die Erfassung und Weiterleitung von Videoausgaben"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"Sichere Videoausgabe erfassen"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ermöglicht der App, globale Audio-Einstellungen zu ändern, etwa die Lautstärke und den Lautsprecher für die Ausgabe."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Audio aufnehmen"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Ermöglicht der App, Ton mithilfe des Mikrofons aufzunehmen. Die Berechtigung erlaubt der App, Tonaufnahmen jederzeit und ohne Ihre Bestätigung durchzuführen."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-Kommunikation"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ermöglicht der App das Senden von Befehlen an die SIM-Karte. Dies ist äußerst risikoreich."</string>
<string name="permlab_camera" msgid="3616391919559751192">"Bilder und Videos aufnehmen"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Ermöglicht der App, Bilder und Videos mit der Kamera aufzunehmen. Die Berechtigung erlaubt der App, die Kamera jederzeit und ohne Ihre Bestätigung zu nutzen."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"LED-Anzeige für Übertragung bei Kameranutzung deaktivieren"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Apps können den Keyguard steuern."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Überwachung von Änderungen des Trust-Status"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Ermöglicht einer App die Überwachungen von Änderungen des Trust-Status"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Trust Agent bereitstellen"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Ermöglich die Bereitstellung eines Trust Agents durch eine App"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"An Trust Agent-Service anbinden"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ermöglicht einer App die Anbindung an einen Trust Agent-Service"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Mit Update- und Wiederherstellungssystem interagieren"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index d0561b9e55c7..553c27afc3cd 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Δίνει στην εφαρμογή τη δυνατότητα εγγραφής και ανακατεύθυνσης εξόδου ήχου."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Ανίχνευση ενεργών λέξεων"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Επιτρέπει στην εφαρμογή την εγγραφή ήχου για ανίχνευση ενεργών λέξεων. Η εγγραφή μπορεί να πραγματοποιηθεί στο παρασκήνιο, αλλά δεν εμποδίζει την εγγραφή ήχου από άλλες πηγές (π.χ. βιντεοκάμερα)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Δρομολόγηση ήχου"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Επιτρέπει στην εφαρμογή να ελέγχει άμεσα τη δρομολόγηση ήχου και αντικαθιστά τις αποφάσεις πολιτικής ήχου."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"έγγραφή εξόδου βίντεο"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Δίνει στην εφαρμογή τη δυνατότητα εγγραφής και ανακατεύθυνσης εξόδου βίντεο."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"έγγραφή ασφαλούς εξόδου βίντεο"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Επιτρέπει στην εφαρμογή την τροποποίηση καθολικών ρυθμίσεων ήχου, όπως η ένταση και ποιο ηχείο χρησιμοποιείται για έξοδο."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"εγγραφή ήχου"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Επιτρέπει στην εφαρμογή την εγγραφή ήχου με το μικρόφωνο. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να εγγράφει ήχο ανά πάσα στιγμή χωρίς την έγκρισή σας."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"επικοινωνία με κάρτα sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Επιτρέπει στην εφαρμογή την αποστολή εντολών στην κάρτα SIM. Αυτό είναι εξαιρετικά επικίνδυνο."</string>
<string name="permlab_camera" msgid="3616391919559751192">"λήψη φωτογραφιών και βίντεο"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Επιτρέπει στην εφαρμογή τη λήψη φωτογραφιών και βίντεο με τη φωτογραφική μηχανή. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να χρησιμοποιεί τη φωτογραφική μηχανή ανά πάσα στιγμή χωρίς την έγκρισή σας."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"απενεργοποίηση ένδειξης LED μετάδοσης όταν χρησιμοποιείται η φωτογραφική μηχανή"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Επιτρέπει σε μια εφαρμογή τον έλεγχο του κλειδώματος πληκτρολογίου."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Αντίληψη αλλαγών καταστάσεων εμπιστοσύνης."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Επιτρέπει σε μια εφαρμογή να αντιλαμβάνεται τις αλλαγές στην κατάσταση εμπιστοσύνης."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Παράσχετε έναν αξιόπιστο αντιπρόσωπο."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Επιτρέπει σε μια εφαρμογή να προσφέρει έναν αξιόπιστο αντιπρόσωπο."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Σύνδεση σε υπηρεσία trust agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Επιτρέπει σε μια εφαρμογή να συνδεθεί σε μια υπηρεσία trust agents."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Αλληλεπίδραση με το σύστημα ενημέρωσης και ανάκτησης"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 1237f382b0c7..69cb424bed27 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Allows the app to capture and redirect audio output."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Hotword detection"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Allows the app to capture audio for Hotword detection. The capture can happen in the background but does not prevent other audio capture (e.g. Camcorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Audio Routing"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Allows the app to directly control audio routing and override audio policy decisions."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capture video output"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Allows the app to capture and redirect video output."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capture secure video output"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Allows the app to record audio with the microphone. This permission allows the app to record audio at any time without your confirmation."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM communication"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Allows the app to send commands to the SIM. This is very dangerous."</string>
<string name="permlab_camera" msgid="3616391919559751192">"take pictures and videos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Allows the app to take pictures and videos with the camera. This permission allows the app to use the camera at any time without your confirmation."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disable transmit indicator LED when camera is in use"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Allows an application to control keyguard."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Listen to trust state changes."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Allows an application to listen for changes in trust state."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Provide a trust agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Allows an application to provide a trust agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind to a trust agent service"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Allows an application to bind to a trust agent service."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interact with update and recovery system"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 1237f382b0c7..69cb424bed27 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Allows the app to capture and redirect audio output."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Hotword detection"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Allows the app to capture audio for Hotword detection. The capture can happen in the background but does not prevent other audio capture (e.g. Camcorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Audio Routing"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Allows the app to directly control audio routing and override audio policy decisions."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capture video output"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Allows the app to capture and redirect video output."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capture secure video output"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Allows the app to record audio with the microphone. This permission allows the app to record audio at any time without your confirmation."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM communication"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Allows the app to send commands to the SIM. This is very dangerous."</string>
<string name="permlab_camera" msgid="3616391919559751192">"take pictures and videos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Allows the app to take pictures and videos with the camera. This permission allows the app to use the camera at any time without your confirmation."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disable transmit indicator LED when camera is in use"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Allows an application to control keyguard."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Listen to trust state changes."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Allows an application to listen for changes in trust state."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Provide a trust agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Allows an application to provide a trust agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind to a trust agent service"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Allows an application to bind to a trust agent service."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interact with update and recovery system"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 0f272c4d39f7..9ffdfe6d9568 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permite que la aplicación capture y redirija la salida de audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detectar palabras activas"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permite que la aplicación capture audio para la detección de palabras activas. La captura puede realizarse en segundo plano, pero no impide otras capturas de audio (por ejemplo, de la videocámara)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Enrutamiento de audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permite que la aplicación controle directamente el enrutamiento de audio y anule las decisiones de políticas de audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"Capturar salida de video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permite que la aplicación capture y redirija la salida de video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"Capturar salida de video segura"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global, por ejemplo, el volumen y el altavoz de salida."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"grabar audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que la aplicación grabe audio con el micrófono. La aplicación puede utilizar este permiso para grabar audio en cualquier momento sin tener tu confirmación."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"Comunicación con tarjeta SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que la aplicación envíe comandos a la tarjeta SIM. Usar este permiso es peligroso."</string>
<string name="permlab_camera" msgid="3616391919559751192">"tomar fotografías y grabar videos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permite que la aplicación saque fotos o grabe videos con la cámara. Este permiso autoriza a la aplicación a utilizar la cámara en cualquier momento sin tu confirmación."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Inhabilitar el indicador LED de transmisión mientras se utiliza la cámara"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que una aplicación controle los bloqueos."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar cambios en estado de confianza"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que una aplicación detecte cambios en el estado de confianza."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Proporcionar un agente de confianza"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permite que una aplicación proporcione un agente de confianza."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vincular con un servicio de agente de confianza"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que una aplicación se vincule con un servicio de agente de confianza."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interaccionar con el sistema de recuperación y las actualizaciones"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index cfc8b6155efa..cf1f4fd2efaa 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permite que la aplicación capture y redirija la salida de audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detectar palabras activas"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permite que la aplicación grabe audio para detectar palabras activas. La grabación se puede realizar en segundo plano pero no impide que se grabe otro tipo de audio (p.ej. la videocámara)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Enrutamiento de audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permite que la aplicación controle directamente el enrutamiento de audio y anule las decisiones de políticas de audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capturar salida de vídeo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permite que la aplicación capture y redirija la salida de vídeo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capturar salida de vídeo segura"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global (por ejemplo, el volumen y el altavoz de salida)."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"grabar sonido"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que la aplicación grabe audio con el micrófono. La aplicación puede utilizar este permiso para grabar audio en cualquier momento sin tener la confirmación del usuario."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicación con la tarjeta SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que la aplicación envíe comandos a la tarjeta SIM. Este permiso es muy peligroso."</string>
<string name="permlab_camera" msgid="3616391919559751192">"realizar fotografías y vídeos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permite que la aplicación haga fotos o grabe vídeos con la cámara. Este permiso autoriza a la aplicación a utilizar la cámara en cualquier momento sin tu confirmación."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"inhabilitar el indicador LED de transmisión mientras se utiliza la cámara"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que una aplicación controle los bloqueos."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar cambios en el estado de confianza."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que una aplicación detecte cambios en el estado de confianza."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Proporcionar un agente de confianza."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permite que una aplicación proporcione un agente de confianza."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Enlazar con un servicio de agente de confianza"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite a una aplicación enlazar con un servicio de agente de confianza."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interactuar con el sistema de recuperación y las actualizaciones"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 8c2112a37004..5e0d319a87bd 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Lubab rakendusel jäädvustada ja ümber suunata heliväljundit."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Otsetee sõna tuvastamine"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Lubab rakendusel jäädvustada heli otsetee sõna tuvastamiseks. Jäädvustamine võib toimuda taustal, kuid see ei takista muud heli jäädvustamist (nt videokaameraga)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Heli marsruutimine"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Võimaldab rakendusel otse juhtida heli marsruutimist ja alistada helieeskirjade otsused."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"videoväljundi jäädvustamine"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Lubab rakendusel jäädvustada ja ümber suunata videoväljundit."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"kaitstud videoväljundi jäädvustamine"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Võimaldab rakendusel muuta üldiseid heliseadeid, näiteks helitugevust ja seda, millist kõlarit kasutatakse väljundiks."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"salvesta heli"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Võimaldab rakendusel salvestada mikrofoniga heli. See luba võimaldab rakendusel salvestada heli igal ajal ilma teie kinnituseta."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"side SIM-kaardiga"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Lubab rakendusel saata käske SIM-kaardile. See on väga ohtlik."</string>
<string name="permlab_camera" msgid="3616391919559751192">"piltide ja videote tegemine"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Võimaldab rakendusel teha kaameraga pilte ja videoid. See luba võimaldab rakendusel kasutada kaamerat mis tahes ajal teie kinnituseta."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"keela kaamera kasutamisel näidikutule kasutamine"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Lubab rakendusel võtmekaitset juhtida."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Usaldusväärse oleku muudatuste tuvastamine."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Lubab rakendusel tuvastada muudatusi usaldusväärses olekus."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Usaldusväärse agendi esitamine."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Võimaldab rakendusel esitada usaldusväärset agenti."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Usaldusväärse agendi teenusega sidumine"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Lubab rakendusel ennast siduda usaldusväärse agendi teenusega."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Suhtlemine värskenduse ja taastesüsteemiga"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 2a03ca856a8a..1cb008c23d42 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"به برنامه امکان می‌دهد خروجی صدا را ضبط و هدایت کند."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"تشخیص کلیدگفته"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"به برنامه اجازه می‌دهد تا صدا را برای تشخیص کلیدگفته ضبط کند. ضبط صدا می‌تواند در پس‌زمینه رخ دهد اما از ضبط صداهای دیگر (مثلاً دوربین فیلمبرداری) جلوگیری نمی‌کند."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"مسیریابی صوتی"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"به برنامه امکان می‌دهد تا به طور مستقیم مسیریابی صوتی را کنترل و تصمیمات مربوط به خط‌مشی صوتی را بازنویسی کند."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"ضبط خروجی ویدیو"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"به برنامه امکان می‌دهد خروجی ویدیو را ضبط و هدایت کند."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ضبط خروجی ویدیوی ایمن"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"به برنامه امکان می‌دهد تنظیمات صوتی کلی مانند میزان صدا و بلندگوی مورد استفاده برای پخش صدا را اصلاح کند."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ضبط صدا"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"به برنامه اجازه می‌دهد صدا را با میکروفن ضبط کند. این مجوز به برنامه اجازه می‌دهد صدا را در هر زمان که بخواهید بدون تأیید شما ضبط کند."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"ارتباطات سیم کارت"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"به برنامه اجازه ارسال دستورات به سیم کارت را می‌دهد. این بسیار خطرناک است."</string>
<string name="permlab_camera" msgid="3616391919559751192">"عکسبرداری و فیلمبرداری"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"به برنامه اجازه می‌دهد با دوربین به عکسبرداری و فیلمبرداری بپردازد. این مجوز به برنامه اجازه می‌‌دهد از دوربین در هر زمانی بدون تأیید شما استفاده کند."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"‏LED نشانگر انتقال داده، هنگام استفاده از دوربین غیرفعال شود"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"اجازه می‌دهد برنامه‌ای محافظ کلید را کنترل کند."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"‏گوش دادن به تغییرات وضعیت trust."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"‏به یک برنامه کاربردی برای گوش دادن به تغییرات در trust اجازه می‌دهد."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"یک عامل مورد اعتماد فراهم می‌آورد."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"به برنامه امکان می‌دهد یک عامل مورد اعتماد فراهم آورد."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"‏اتصال به یک سرویس trust agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"‏به یک برنامه کاربردی برای اتصال به یک سرویس trust agent اجازه می‌دهد."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"تعامل با سیستم به‌روزرسانی و بازیابی"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 9398cfa78b1e..f792affcf8dd 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Antaa sovellukselle luvan äänentoiston kaappaamiseen ja uudelleenohjaamiseen."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Toimintosanan tunnistus"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Antaa sovelluksen siepata ääntä toimintosanojen tunnistusta varten. Sieppaus voi tapahtua taustalla, mutta se ei estä muita laitteita, kuten videokameraa, käyttämästä ääntä."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Äänen reititys"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Antaa sovelluksen hallita äänen reititystä suoraan ja ohittaa ääniä koskevia sääntöjä."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"videokuvan kaappaus"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Antaa sovellukselle luvan videokuvan kaappaamiseen ja uudelleenohjaamiseen"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"suojatun videokuvan kaappaus"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Antaa sovelluksen muokata yleisiä ääniasetuksia, kuten äänenvoimakkuutta ja käytettävää kaiutinta."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"tallentaa ääntä"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Antaa sovelluksen tallentaa ääntä mikrofonin avulla. Sovellus voi tallentaa ääntä milloin tahansa pyytämättä sinulta lupaa."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-viestintä"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Antaa sovelluksen lähettää komentoja SIM-kortille. Tämä ei ole turvallista."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ota kuvia ja videoita"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Antaa sovelluksen ottaa kuvia ja kuvata videoita kameralla. Sovellus voi käyttää kameraa milloin tahansa ilman lupaasi."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"poista lähetyksen merkkivalo käytöstä, kun kameraa käytetään"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Antaa sovelluksen hallita näppäinvahtia."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Seuraa luottamuksen tilamuutoksia."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Antaa sovelluksen seurata luottamuksen tilamuutoksia."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Luotettavan tahon tarjoaminen"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Antaa sovelluksen tarjota luotettavan tahon."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Luotettavaan tahoon sitoutuminen"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Antaa sovelluksen sitoutua luotettavaan tahoon."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Vuorovaikutus päivitys- ja palautusjärjestelmän kanssa"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 9aa2cfe9ce46..c43fe1ed2b1c 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Autoriser l\'application à capturer et à rediriger la sortie audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Détection de mots clés"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permet à l\'application de capturer de l\'audio pour la détection de mots clés. La capture peut s\'effectuer en arrière-plan, et n\'empêche pas les autres opérations de capture audio (par exemple, avec un caméscope)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Acheminement de l\'audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permet à l\'application de contrôler directement l\'acheminement audio et de remplacer les décisions concernant les politiques audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capturer la sortie vidéo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Autoriser l\'application à capturer et à rediriger la sortie vidéo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capturer la sortie vidéo sécurisée"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et la sortie audio utilisée."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrer fichier audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet à l\'application d\'enregistrer des contenus audio à l\'aide du microphone. Cette autorisation lui donne la possibilité d\'enregistrer du contenu audio à tout moment sans votre consentement."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"Communication avec la carte SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permet à l\'application d\'envoyer des commandes à la carte SIM. Cette fonctionnalité est très dangereuse."</string>
<string name="permlab_camera" msgid="3616391919559751192">"prendre des photos et filmer des vidéos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permet à l\'application de prendre des photos et de filmer des vidéos avec l\'appareil photo. Cette autorisation lui permet d\'utiliser l\'appareil photo à tout moment sans votre consentement."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"désactiver l\'indicateur d\'émission LED lorsque la caméra est en cours d\'utilisation"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet à une application de contrôler la protection des touches."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Détecter les modifications de l\'état de confiance"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permet à une application de détecter les modifications de l\'état de confiance."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Fournir un agent de confiance."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permet à une application de fournir un agent de confiance."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Lier à un service d\'agent de confiance"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permet à une application de se lier à un service d\'agent de confiance."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interagir avec le système de récupération et de mise à jour"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 3d043c45e8fe..d755f052deb2 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Autoriser l\'application à enregistrer et à rediriger les sorties audio"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Détection de mot clé"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permet à l\'application de capturer du contenu audio pour détecter des mots clés. L\'enregistrement peut se produire en arrière-plan, sans désactiver les autres services de capture audio (tels que ceux d\'un caméscope)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Routage de l\'audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permettre à l\'application de contrôler directement le routage de l\'audio et de remplacer les décisions relatives aux règles concernant l\'audio"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"enregistrer les sorties vidéo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Autoriser l\'application à enregistrer et à rediriger les sorties vidéo"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"enregistrer les sorties vidéo sécurisées"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et la sortie audio utilisée."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrer des fichiers audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet à l\'application d\'enregistrer des contenus audio à l\'aide du microphone. Cette autorisation lui donne la possibilité d\'enregistrer du contenu audio à tout moment sans votre consentement."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"Communication avec la carte SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Autoriser l\'envoi de commandes à la carte SIM via l\'application. Cette fonctionnalité est très risquée."</string>
<string name="permlab_camera" msgid="3616391919559751192">"prendre des photos et enregistrer des vidéos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permet à l\'application de prendre des photos et de filmer des vidéos avec l\'appareil photo. Cette autorisation lui permet d\'utiliser l\'appareil photo à tout moment sans votre consentement."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"désactiver l\'indicateur d\'émission LED lorsque la caméra est en cours d\'utilisation"</string>
@@ -1171,7 +1171,7 @@
<string name="chooseUsbActivity" msgid="6894748416073583509">"Sélectionnez une application pour le périphérique de stockage USB"</string>
<string name="noApplications" msgid="2991814273936504689">"Aucune application ne peut effectuer cette action."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <string name="aerr_application" msgid="932628488013092776">"L\'application \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" s\'est arrêtée."</string>
+ <string name="aerr_application" msgid="932628488013092776">"\"<xliff:g id="APPLICATION">%1$s</xliff:g>\" s\'est arrêté."</string>
<string name="aerr_process" msgid="4507058997035697579">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> s\'est interrompu."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="1904477189057199066">"L\'application <xliff:g id="APPLICATION">%2$s</xliff:g> ne répond pas.\n\nVoulez-vous quitter ?"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet à une application de contrôler la protection des touches."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Détecter les modifications de l\'état de confiance"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permettre à une application de détecter les modifications de l\'état de confiance."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Fournir un agent de confiance"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permettre à une application de fournir un agent de confiance"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"S\'associer à un service d\'agent de confiance"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permettre à une application de s\'associer à un service d\'agent de confiance."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interagir avec le système de récupération et de mise à jour"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f9bd61ab2d76..ff4412ea2f42 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"ऐप्स को ऑडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"हॉटवर्ड पहचान"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"एप्लिकेशन को हॉटवर्ड पहचान के लिए ऑडियो कैप्चर करने देती है. कैप्चर पृष्ठभूमि में हो सकता है लेकिन वह अन्य ऑडियो कैप्चर (उदा. कैमकॉर्डर) को नहीं रोकता."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"ऑडियो रूटिंग"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"ऐप्स को ऑडियो रूटिंग पर प्रत्यक्ष नियंत्रण करने देती है और ऑडियो नीति निर्णयों को ओवरराइड करने देती है."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"वीडियो आउटपुट को कैप्‍चर करें"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"ऐप्स को वीडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"सुरक्षित वीडियो आउटपुट को कैप्‍चर करें"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ऐप्स को वैश्विक ऑडियो सेटिंग, जैसे वॉल्‍यूम और कौन-सा स्पीकर आउटपुट के लिए उपयोग किया गया, संशोधित करने देता है."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ऑडियो रिकॉर्ड करें"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"ऐप्स को माइक्रोफ़ोन द्वारा ऑडियो रिकार्ड करने देता है. यह अनुमति ऐप्स को आपकी पुष्टि के बिना किसी भी समय ऑडियो रिकार्ड करने देती है."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"सिम संचार"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"ऐप्स को सिम में आदेश भेजने देती है. यह बहुत ही खतरनाक है."</string>
<string name="permlab_camera" msgid="3616391919559751192">"चित्र और वीडियो लें"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"ऐप्स को कैमरे से चित्र और वीडियो लेने देता है. यह अनुमति ऐप्स को किसी भी समय आपकी पुष्टि के बिना कैमरे का उपयोग करने देती है."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"कैमरा उपयोग में होने पर संचारण संकेतक LED अक्षम करें"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"ऐप्स को कीगार्ड नियंत्रित करने देती है."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"ट्रस्ट स्थिति बदलावों को सुनें."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"किसी एप्लिकेशन को ट्रस्ट स्थिति के बदलावों को सुनने की अनुमति देती है."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"विश्वसनीय एजेंट प्रदान करें."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"एप्लिकेशन को विश्वसनीय एजेंट प्रदान करने देती है."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ट्रस्ट एजेंट सेवा से आबद्ध करना"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"किसी एप्लिकेशन को ट्रस्ट एजेंट सेवा से आबद्ध करने की अनुमति देती है."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"अपडेट और पुनर्प्राप्ति सिस्टम के साथ सहभागिता करें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 2adaaf1af66a..4794fac9f52d 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Omogućuje aplikaciji primanje i preusmjeravanje audioizlaza."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Otkrivanje pokretača značajke"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Aplikaciji omogućuje snimanje zvuka radi otkrivanja pokretača značajke. Snimanje se može odvijati u pozadini, ali ne sprječava drugo snimanje zvuka (npr. kameru)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Preusmjeravanje audija"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Omogućuje aplikaciji izravno upravljanje preusmjeravanjem audija i premošćivanje odluka pravila o audiju."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"primanje videoizlaza"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Omogućuje aplikaciji primanje i preusmjeravanje videoizlaza."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"primanje sigurnog videoizlaza"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogućuje izmjenu globalnih postavki zvuka, primjerice glasnoće i zvučnika koji se upotrebljava za izlaz."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"snimanje zvuka"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Aplikaciji omogućuje snimanje zvuka mikrofonom. Ta dozvola aplikaciji omogućuje snimanje zvuka u bilo kojem trenutku bez vašeg odobrenja."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikacija sa SIM-om"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Omogućuje aplikaciji slanje naredbi SIM-u. To je vrlo opasno."</string>
<string name="permlab_camera" msgid="3616391919559751192">"snimi fotografije i videozapise"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Aplikaciji omogućuje snimanje slika i videozapisa fotoaparatom. Ta dozvola aplikaciji omogućuje upotrebu fotoaparata u bilo kojem trenutku bez vašeg odobrenja."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"onemogućavanje lampice pokazivača prijenosa kada je fotoaparat u upotrebi"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Omogućuje aplikaciji upravljanje zaključavanjem tipkovnice."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Prati promjene pouzdanog stanja."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Omogućuje aplikaciji praćenje promjena pouzdanog stanja."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Pružanje pouzdanog predstavnika."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Omogućuje aplikaciji pružanje pouzdanog predstavnika."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Povezivanje s uslugom pouzdanog predstavnika"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Omogućuje aplikaciji povezivanje s uslugom pouzdanog predstavnika."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interakcija s ažuriranjem i sustavom za oporavak"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 45573e6b3afb..136075bbd000 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Engedélyezi az alkalmazásnak a hangkimenet rögzítését és átirányítását."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Hotwordérzékelés"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Lehetővé teszi, hogy alkalmazás rögzítse a befelé jövő hangokat hotwordérzékelés céljából. A rögzítés végbemehet a háttérben, és nem zavarja a más jellegű hangrögzítést, például a kamera esetében."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Hangirányítás"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Lehetővé teszi az alkalmazás számára, hogy kezelje a hangirányítást, illetve felülírja a hangra vonatkozó irányelvi döntéseket."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"videokimenet rögzítése"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Engedélyezi az alkalmazásnak a videokimenet rögzítését és átirányítását."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"biztonságos videokimenet rögzítése"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lehetővé teszi az alkalmazás számára az általános hangbeállítások, például a hangerő és a használni kívánt kimeneti hangszóró módosítását."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"hanganyag rögzítése"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Lehetővé teszi az alkalmazás számára a mikrofonnal való hangfelvételt.Az engedéllyel rendelkező alkalmazás az Ön jóváhagyása nélkül, bármikor rögzíthet hanganyagot."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikáció"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Engedélyezi, hogy az alkalmazás parancsokat küldjön a SIM kártyára. Ez rendkívül veszélyes lehet."</string>
<string name="permlab_camera" msgid="3616391919559751192">"fotók és videók készítése"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Lehetővé teszi az alkalmazás számára, hogy a fényképezőgéppel fotókat és videókat készítsen. Az engedéllyel rendelkező alkalmazás bármikor, az Ön jóváhagyása nélkül használhatja a fényképezőgépet."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"átviteljelző LED letiltása, ha a kamera használatban van"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Lehetővé teszi egy alkalmazás számára a billentyűzár vezérlését."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Trust-állapot változásának figyelése"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Lehetővé teszi, hogy az alkalmazás figyelje a trust-állapot változásait."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Trust agent szoftver megadása"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Lehetővé teszi, hogy az alkalmazás megadjon egy trust agent szoftvert."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Csatlakozás egy trust agent szolgáltatáshoz"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Lehetővé teszi, hogy az alkalmazás egy trust agent szolgáltatáshoz csatlakozzon."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Kapcsolatfelvétel a frissítési és helyreállítási rendszerrel"</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index 2d72f06c4323..d7adca7adc55 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Թույլ է տալիս ծրագրին պահել և վերահղել աուդիո արտածումը:"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Թեժ բառի հայտնաբերում"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Հավելվածին թույլ է տալիս որսալ ձայնանյութը՝ թեժ բառի հայտնաբերման համար: Դա կարող է տեղի ունենալ հետնաշերտում, սակայն չի խանգարի այլ աուդիո ձայնագրություններին (օր.՝ Տեսախցիկից):"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Աուդիո երթուղայնացում"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Ծրագրին թույլ է տալիս անմիջականորեն վերահսկել աուդիո երթուղայնացումը և վերասահմանել աուդիո քաղաքականության որոշումները:"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"պահել վիդեո արտածումը"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Թույլ է տալիս ծրագրին պահել և վերահղել վիդեո արտածումը:"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"պահել անվտանգ վիդեո արտածումը"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Թույլ է տալիս հավելվածին փոփոխել ձայնանյութի գլոբալ կարգավորումները, ինչպես օրինակ` ձայնը և թե որ խոսափողն է օգտագործված արտածման համար:"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ձայնագրել ձայնանյութ"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Թույլ է տալիս հավելվածին բարձրախոսով ձայնագրել ձայնանյութ: Այս թույլտվությունը հնարավորություն է տալիս հավելվածին ձայնանյութ ձայնագրել ցանկացած ժամանակ` առանց ձեր հաստատման:"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM հաղորդակցում"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Թույլ է տալիս հավելվածին հրամաններ ուղարկել SIM-ին: Սա շատ վտանգավոր է:"</string>
<string name="permlab_camera" msgid="3616391919559751192">"լուսանկարել և տեսանկարել"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Թույլ է տալիս հավելվածին ֆոտոխցիկով լուսանկարել և տեսանկարել: Այս թույլտվությունը հնարավորություն է տալիս հավելվածին օգտագործել ֆոտոխցիկը ցանկացած ժամանակ` առանց ձեր հաստատման:"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"անջատել փոխանցող LED ցուցիչը, երբ ֆոտոխցիկը օգտագործվում է"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Թույլ է տալիս հավելվածին կառավարել ստեղնաշարի պաշտպանիչը:"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Լսել վստահության կարգավիճակի ​փոփոխությունները:"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Ծրագրին թույլ է տալիս լսել վստահության կարգավիճակի փոփոխությունները:"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Տրամադրել վստահելի գործակալ:"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Ծրագրին թույլ է տալիս տրամադրել վստահելի գործակալ:"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Կապվել վստահելի գործակալի ծառայությանը"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ծրագրին թույլ է տալիս կապվել վստահելի գործակալի ծառայությանը:"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Փոխազդել թարմացման և վերականգնման համակարգի հետ"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 3d619b91aea3..8ace2df2446b 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Memungkinkan aplikasi menangkap dan mengalihkan keluaran audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Deteksi kata cepat"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Memungkinkan aplikasi menangkap audio untuk deteksi Kata Cepat. Penangkapan dapat berlangsung di latar belakang namun tidak akan mencegah penangkapan audio yang lain (misalnya Perekam video)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Perutean Audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Memungkinkan aplikasi mengontrol perutean audio dan mengganti keputusan kebijakan audio secara langsung."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"tangkap keluaran video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Memungkinkan aplikasi menangkap dan mengalihkan keluaran video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"tangkap keluaran video aman"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Memungkinkan aplikasi mengubah setelan audio global, misalnya volume dan pengeras suara mana yang digunakan untuk keluaran."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"rekam audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Memungkinkan aplikasi merekam audio dengan mikrofon. Izin ini memungkinkan aplikasi merekam audio kapan saja tanpa konfirmasi Anda."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikasi sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Mengizinkan aplikasi mengirim perintah ke SIM. Ini sangat berbahaya."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ambil gambar dan video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Memungkinkan aplikasi mengambil gambar dan video dengan kamera. Izin ini memungkinkan aplikasi menggunakan kamera kapan saja tanpa konfirmasi Anda."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"nonaktifkan LED indikator transmisi saat kamera digunakan"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Izinkan aplikasi untuk mengontrol pengaman."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Dengarkan perubahan status kepercayaan."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Mengizinkan aplikasi mendengarkan perubahan dalam status kepercayaan."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Berikan agen tepercaya."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Memungkinkan aplikasi memberikan agen tepercaya."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Ikat ke layanan agen kepercayaan"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Mengizinkan aplikasi mengikat ke layanan agen kepercayaan."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Berinteraksi dengan sistem pemulihan dan pembaruan"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 9a26b62a46ed..56e309beaff0 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Consente all\'app di acquisire e reindirizzare l\'uscita audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Rilevamento hotword"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Consente all\'app di acquisire l\'audio per il rilevamento Hotword. L\'acquisizione può avvenire in background ma non impedisce l\'acquisizione di altro audio (ad esempio con la videocamera)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Routing dell\'audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Consente all\'app di controllare direttamente il routing audio e di sostituire le impostazioni delle norme per l\'audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"acquisizione dell\'uscita video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Consente all\'app di acquisire e reindirizzare l\'uscita video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"acquisizione dell\'uscita video sicura"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Consente all\'applicazione di modificare le impostazioni audio globali, come il volume e quale altoparlante viene utilizzato per l\'uscita."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"registrazione audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Consente all\'applicazione di registrare audio con il microfono. Questa autorizzazione consente all\'applicazione di registrare audio in qualsiasi momento senza la tua conferma."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicazione SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Consente all\'app di inviare comandi alla SIM. Questo è molto pericoloso."</string>
<string name="permlab_camera" msgid="3616391919559751192">"acquisizione di foto e video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Consente all\'applicazione di scattare foto e riprendere video con la fotocamera. Questa autorizzazione consente all\'applicazione di utilizzare la fotocamera in qualsiasi momento senza la tua conferma."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disabilitazione del LED di indicazione della trasmissione quando la fotocamera è in uso"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Consente a un\'applicazione di controllare keguard."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Rilevamento modifiche dello stato trust."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Consente a un\'applicazione di rilevare le modifiche nello stato trust."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Indica un trust agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Consente a un\'applicazione di indicare un trust agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Associazione a un servizio trust agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Consente a un\'applicazione di associarsi a un servizio trust agent."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interazione con il sistema di ripristino e aggiornamento"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 5c47131fe647..6f06252e4c5e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"מאפשרת לאפליקציה לקלוט ולהפנות מחדש פלט אודיו."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"זיהוי של מילת הפעלה"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"מאפשרת לאפליקציה לקלוט אודיו עבור זיהוי של מילת הפעלה. פעולת הקליטה יכולה להתבצע ברקע, אבל לא מונעת קליטת אודיו אחרת (למשל, במצלמת הווידאו)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"ניתוב אודיו"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"מאפשר לאפליקציה לשלוט באופן ישיר בניתוב אודיו ולעקוף החלטות מדיניות עבור אודיו."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"קליטת פלט וידאו"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"מאפשרת לאפליקציה לקלוט ולהפנות מחדש פלט וידאו."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"קליטת פלט וידאו מאובטח"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"מאפשר לאפליקציה לשנות הגדרות אודיו גלובליות כמו עוצמת קול ובחירת הרמקול המשמש לפלט."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"הקלט אודיו"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"מאפשר לאפליקציה להקליט אודיו באמצעות המיקרופון. אישור זה מתיר לאפליקציה להקליט אודיו בכל עת ללא אישורך."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"‏תקשורת SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"‏מאפשרת ליישום לשלוח פקודות ל-SIM. זוהי הרשאה מסוכנת מאוד."</string>
<string name="permlab_camera" msgid="3616391919559751192">"צלם תמונות וסרטונים"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"מאפשר לאפליקציה לצלם תמונות וסרטונים באמצעות המצלמה. אישור זה מאפשר לאפליקציה להשתמש במצלמה בכל עת ללא אישורך."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"השבת את נורית מצב השידור כשהמצלמה בשימוש"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"מאפשר לאפליקציה לשלוט במגן המקלדת."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"חיפוש שינויים במצב אמון."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"מאפשר לאפליקציה לחפש שינויים במצב אמון."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"ציון סוכן אמון."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"מאפשר לאפליקציה לספק סוכן אמון."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"איגוד אל שירות סוכן אמון"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"מאפשר לאפליקציה לאגוד אל שירות סוכן אמון."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"אינטראקציה עם מערכת שחזור ועדכונים"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 6d35633bfb91..8d224656db88 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"音声出力のキャプチャとリダイレクトをアプリに許可します。"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"注目ワード検出"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"注目ワード検出での音声キャプチャをアプリに許可します。キャプチャはバックグラウンドで発生しますが、その他の音声キャプチャ(例: ビデオ録画)を妨げることはありません。"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"オーディオルーティング"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"オーディオルーティングの直接制御とオーディオポリシー決定の上書きをアプリに許可します。"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"動画出力のキャプチャ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"動画出力のキャプチャとリダイレクトをアプリに許可します。"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"セキュリティ保護された動画出力のキャプチャ"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"音声全般の設定(音量、出力に使用するスピーカーなど)の変更をアプリに許可します。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"録音"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"マイクを使った録音をアプリに許可します。これにより、アプリがいつでも確認なしで録音できるようになります。"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM通信"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"SIMにコマンドを送信することをアプリに許可します。この許可は非常に危険です。"</string>
<string name="permlab_camera" msgid="3616391919559751192">"写真と動画の撮影"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"カメラでの写真と動画の撮影をアプリに許可します。これにより、アプリが確認なしでいつでもカメラを使用できるようになります。"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"カメラの使用中に通信インジケータLEDを無効にする"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"キーガードの制御をアプリに許可します。"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"信頼状態の変更をリッスン"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"信頼状態の変更をリッスンすることをアプリに許可します。"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"信頼できるエージェントの提供"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"信頼できるエージェントの提供をアプリに許可します。"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"信頼できるエージェントサービスへのバインド"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"信頼できるエージェントサービスにバインドすることをアプリに許可します。"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"アップデートと回復システムへのアクセス"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 770c14d8bd01..be17c230d9ce 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"საშუალებას აძლევს აპს დაიჭიროს და გადაამისამართოს გამომავალი აუდიო."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"ჯადოსნური სიტყვის პოვნა"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"საშუალებას აძლევს აპს ჩაიწეროს აუდიო ჯადოსნური სიტყვების ამოცნობისათვის. ჩაწერა შესაძლოა განხორციელდეს ფონურად, თუმცა ხელს არ უშლის სხვა სახის აუდიოს ჩაწერას (მაგ. ვიდეოჩამწერიდან)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"აუდიო მარშრუტიზაცია"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"საშუალებას აძლევს აპს პირდაპირ აკონტროლოს აუდიო მარშრუტიზაცია უკუაგდოს აუდიო პოლისის გადაწყვეტილებები."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"გამომავალი ვიდეოს დაჭერა"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"საშუალებას აძლევს აპს დაიჭიროს და გადაამისამართოს გამომავალი ვიდეო."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"გამომავალი დაცული ვიდეოს დაჭერა"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"აპს შეეძლება აუდიოს გლობალური პარამეტრების შეცვლა. მაგ.: ხმის სიმაღლე და რომელი დინამიკი გამოიყენება სიგნალის გამოსტანად."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"აუდიოს ჩაწერა"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"აპს შეეძლება აუდიო ჩაწერა მიკროფონით. ნებართვა აპს აუდიო ჩაწერის უფლებას აძლევს ნებისმიერ დროს, თქვენი თანხმობის გარეშე."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"კომუნიკაცია SIM-თან"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"აპისთვის ნების დართვა გაუგზავნოს ბრძანებები SIM-ბარათს. ეს ძალიან საშიშია."</string>
<string name="permlab_camera" msgid="3616391919559751192">"სურათებისა და ვიდეოების გადაღება"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"აპს შეეძლება კამერით სურათისა და ვიდეოს გადაღება. ეს ნებართვა აპს უფლებას აძლევს, ნებისმიერ დროს გამოიყენოს კამერა თქვენი დადასტურების გარეშე."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"კამერის გამოყენებისას გადამცემი ინდიკატორის LED გათიშვა"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"აპლიკაციას შეეძლება ღილაკების დამცავის კონტროლი."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"ნდობის მდგომარეობის ცვლილებების მოსმენა."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"საშუალებას აძლევს აპლიკაციას მოუსმინოს ცვლილებებს სანდო მდგომარეობაში."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"სანდო აგენტის წარმოდგენა."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"საშუალებას აძლევს აპლიკაციას წარმოადგინოს სანდო აგენტი."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"სანდო აგენტის სერვისზე მიმაგრება."</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"საშუალებას აძლევს აპლიკაციას მიემაგროს სანდო აგენტის სერვისს."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"განახლებასთან და აღდგენის სისტემასთან ინტერაქცია"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index dbe2d7f19602..d5d1715f8188 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"​ឱ្យ​កម្មវិធី​ដើម្បី​ចាប់​យក​ និង​​ប្ដូរ​​ទិស​លទ្ធផល​អូឌីយ៉ូ​។"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"ការ​រក​ឃើញ​ពាក្យ"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"ឲ្យ​កម្មវិធី​​ថត​អូឌីយ៉ូ​សម្រាប់​កា​រ​រក​ឃើញ​ពាក្យ។​ ការ​ថត​អាច​កើត​ឡើង​ក្នុង​ផ្ទៃ​ខាងក្រោយ​​ ប៉ុន្តែ​មិន​រារាំង​ការ​ថត​អូឌីយ៉ូ​ផ្សេង​ទេ (ឧ. ម៉ាស៊ីន​ថត​វីដេអូ)។"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"ការ​នាំ​ផ្លូវ​អូឌីយ៉ូ"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"ឲ្យ​កម្មវិធី​ពិនិត្យ​ផ្លូវ​អូឌីយ៉ូ​ដោយ​ផ្ទាល់ ហើយ​បដិសេធ​ការ​សម្រេចចិត្ត​គោលនយោបាយ​អូឌីយ៉ូ។"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"ចាប់​យក​លទ្ធផល​វីដេអូ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"ឲ្យ​កម្មវិធី​ចាប់​យក​ និង​ប្ដូរ​​ទិស​លទ្ធផល​វីដេអូ​។"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ចាប់​យក​លទ្ធផល​វីដេអូ​សុវត្ថិភាព"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ឲ្យ​កម្មវិធី​កែ​ការ​កំណត់​សំឡេង​សកល ដូច​ជា​កម្រិត​សំឡេង និង​អូប៉ាល័រ​ដែល​បាន​ប្រើ​សម្រាប់​លទ្ធផល។"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ថត​សំឡេង"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"​ឱ្យ​កម្មវិធី​ថត​សំឡេង​​ជាមួយ​មីក្រូហ្វូន​​​។ សិទ្ធិ​នេះ​អនុញ្ញាត​ឲ្យ​កម្មវិធី​ថត​សំឡេង​​នៅ​ពេល​ណា​មួយ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"ការ​ភ្ជាប់​ស៊ីមកាត"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"ឲ្យ​កម្មវិធី​ផ្ញើ​ពាក្យ​បញ្ជា​ទៅ​ស៊ីម​កាត។ វា​គ្រោះ​ថ្នាក់​ណាស់។"</string>
<string name="permlab_camera" msgid="3616391919559751192">"ថត​រូប និងវីដេអូ"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"ឲ្យ​កម្មវិធី​ថត​រូប និង​វីដេអូ​ដោយ​ប្រើ​ម៉ាស៊ីន​ថត។ វា​ឲ្យ​កម្មវិធី​​ប្រើ​ម៉ាស៊ីន​ថត​នៅ​ពេល​​ណាមួយ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"បិទ​​ពន្លឺ​បង្ហាញ​ការ​បញ្ជូន​​ពេល​ម៉ាស៊ីន​ថត​កំពុង​ប្រើ"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"ឲ្យ​កម្មវិធី​គ្រប់គ្រង keguard ។"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"ស្ដាប់​ការ​ផ្លាស់ប្ដូរ​ស្ថានភាព​ដែល​ទុកចិត្ត។"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"ឲ្យ​កម្មវិធី​ស្ដាប់​ការ​ផ្លាស់ប្ដូរ​ក្នុង​ស្ថានភាព​ដែល​​ទុកចិត្ត។"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"ផ្ដល់​ភ្នាក់ងារ​ដែល​ទុកចិត្ត។"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"ឲ្យ​កម្មវិធី​ផ្ដល់​ភ្នាក់ងារ​ដែល​ទុកចិត្ត។"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ភ្ជាប់​ទៅ​សេវាកម្ម​ភ្នាក់ងារ​ដែល​ទុកចិត្ត"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"ឲ្យ​កម្មវិធី​ភ្ជាប់​សេវាកម្ម​ភ្នាក់ងារ​ដែល​ទុក​ចិត្ត។"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"អន្តរកម្ម​ជា​មួយ​បច្ចុប្បន្នភាព និង​ប្រព័ន្ធ​សង្គ្រោះ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 111f822eae14..77e83dd717a7 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"앱이 오디오 출력을 캡처하고 리디렉션하도록 허용합니다."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"핫워드 감지"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"앱에서 핫워드 감지를 위해 오디오를 캡처하도록 허용합니다. 캡처는 백그라운드에서 수행될 수 있지만 다른 오디오 캡처를 차단하지 않습니다(예: 캠코더)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"오디오 라우팅"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"앱이 오디오 라우팅을 직접 제어하고 오디오 정책 결정을 무시할 수 있도록 허용합니다."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"동영상 출력 캡처"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"앱이 동영상 출력을 캡처하고 리디렉션하도록 허용합니다."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"안전한 동영상 출력 캡처"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"앱이 음량이나 출력을 위해 사용하는 스피커 등 전체 오디오 설정을 변경할 수 있도록 허용합니다."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"오디오 녹음"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"앱이 마이크로 오디오를 녹음할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 사용자의 확인 없이 언제든지 오디오를 녹음할 수 있습니다."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 통신"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"앱이 SIM에 명령어를 전송할 수 있도록 허용합니다. 이 기능은 매우 위험합니다."</string>
<string name="permlab_camera" msgid="3616391919559751192">"사진과 동영상 찍기"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"앱이 카메라로 사진과 동영상을 찍을 수 있도록 허용합니다. 이 권한을 사용하면 앱이 언제든지 사용자의 확인 없이 카메라를 사용할 수 있습니다."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"카메라를 사용할 때 전송 표시 LED 사용 중지"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"애플리케이션에서 키가드를 제어하도록 허용합니다."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Trust 상태 변경사항 수신"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"애플리케이션이 Trust 상태에서의 변경사항을 수신할 수 있도록 허용합니다."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Trust Agent 제공"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"애플리케이션이 Trust Agent를 제공할 수 있도록 허용합니다."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Trust Agent 서비스에 연결"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"애플리케이션이 Trust Agent 서비스에 바인딩할 수 있도록 허용합니다."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"업데이트 및 복구 시스템과 상호작용"</string>
diff --git a/core/res/res/values-land/dimens_quantum.xml b/core/res/res/values-land/dimens_material.xml
index 7789219a67e8..c8c95d7b8183 100644
--- a/core/res/res/values-land/dimens_quantum.xml
+++ b/core/res/res/values-land/dimens_material.xml
@@ -16,8 +16,8 @@
<resources>
<!-- Default height of an action bar. -->
- <dimen name="action_bar_default_height_quantum">48dp</dimen>
+ <dimen name="action_bar_default_height_material">48dp</dimen>
<!-- Default padding of an action bar. -->
- <dimen name="action_bar_default_padding_quantum">0dp</dimen>
+ <dimen name="action_bar_default_padding_material">0dp</dimen>
</resources>
diff --git a/core/res/res/values-large/themes.xml b/core/res/res/values-large/themes.xml
index 448e7c873c11..8c8f86c906a8 100644
--- a/core/res/res/values-large/themes.xml
+++ b/core/res/res/values-large/themes.xml
@@ -46,4 +46,19 @@ please see themes_device_defaults.xml.
<style name="Theme.Holo.Light.DialogWhenLarge.NoActionBar"
parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar.FixedSize">
</style>
+
+ <style name="Theme.Material.DialogWhenLarge"
+ parent="@android:style/Theme.Material.Dialog.FixedSize">
+ <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
+ </style>
+ <style name="Theme.Material.DialogWhenLarge.NoActionBar"
+ parent="@android:style/Theme.Material.Dialog.NoActionBar.FixedSize">
+ <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
+ </style>
+ <style name="Theme.Material.Light.DialogWhenLarge"
+ parent="@android:style/Theme.Material.Light.Dialog.FixedSize">
+ </style>
+ <style name="Theme.Material.Light.DialogWhenLarge.NoActionBar"
+ parent="@android:style/Theme.Material.Light.Dialog.NoActionBar.FixedSize">
+ </style>
</resources>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 3b275a5d0e6c..17a4236d3b78 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"ອະນຸຍາດໃຫ້ແອັບຯບັນທຶກ ແລະປ່ຽນເສັ້ນທາງການປ້ອນຂໍ້ມູນອອກຂອງສຽງ."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"ການກວດຫາ Hotword"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"ອະນຸຍາດໃຫ້ແອັບຯຈັບຂໍ້ມູນສຽງສຳລັບການກວດຈັບ Hotword. ການຈັບຂໍ້ມູນສາມາດເກີດຂຶ້ນໃນພື້ນຫຼັງໄດ້ ແຕ່ຈະບໍ່ໄປຂັດຂວາງການຈັບຂໍ້ມູນສຽງອື່ນໆ (ເຊັ່ນ: ກ້ອງວິດີໂອ)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"​​ເສັ້ນ​ທາງ​ສຽງ"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ຄວບ​ຄຸມ​ເສັ້ນ​ທາງ​ສຽງ ແລະ​ປ່ຽນ​ແປງ​ການ​ຕັດ​ສິນ​ໃຈ​ນະ​ໂຍ​ບາຍ​ສຽງ​ໄດ້."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"ບັນທຶກວິດີໂອອອກ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"ອະນຸຍາດໃຫ້ແອັບຯບັນທຶກ ແລະປ່ຽນເສັ້ນທາງການປ້ອນຂໍ້ມູນອອກຂອງວິດີໂອ."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ບັນທຶກວິດີໂອອອກຢ່າງປອດໄພ"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ອະນຸຍາດໃຫ້ແອັບຯແກ້ໄຂການຕັ້ງຄ່າສຽງສ່ວນກາງ ເຊັ່ນ: ລະດັບສຽງ ແລະລຳໂພງໃດທີ່ຖືກໃຊ້ສົ່ງສຽງອອກ."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ບັນທຶກສຽງ"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"ອະນຸຍາດໃຫ້ແອັບຯບັນທຶກສຽງດ້ວຍໄມໂຄຣໂຟນໄດ້. ການອະນຸຍາດນີ້ຈະເຮັດໃຫ້ແອັບຯ ສາມາດບັນທຶກສຽງໄດ້ຕະຫລອດເວລາ ໂດຍບໍ່ຕ້ອງຖ້າການຢືນຢັນຈາກທ່ານ."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"ການສື່ສານຂອງ SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"ອະນຸຍາດໃຫ້ແອັບຯສົ່ງຄຳສັ່ງຫາ SIM. ສິ່ງນີ້ອັນຕະລາຍຫຼາຍ."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ຖ່າຍຮູບ ແລະວິດີໂອ"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"ອະນຸຍາດໃຫ້ແອັບຯຖ່າຍຮູບ ແລະວິດີໂອດ້ວຍກ້ອງຖ່າຍຮູບ. ການອະນຸຍາດນີ້ຈະອານຸຍາດໃຫ້ແອັບຯ ສາມາດໃຊ້ກ້ອງຖ່າຍຮູບໄດ້ຕະຫລອດເວລາ ໂດຍບໍ່ຕ້ອງຖ້າການຢືນຢັນຈາກທ່ານ."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ປິດໄຟສັນຍານ LED ເມື່ອນຳໃຊ້ກ້ອງ"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນສາມາດຄວບຄຸມຄີກາດໄດ້."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"​ຕິດ​ຕາມ​ການ​ປ່ຽນ​ແປງ​ສະ​ຖາ​ນະ​ການ​ເຊື່ອ​ຖືກ."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ຕິດ​ຕາມ​​ການ​ປ່ຽນ​ແປງ​ໃນ​ສະ​ຖາ​ນະ​ການ​ເຊື່ອ​ຖື."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"​ລະ​ບຸ​ເອ​ເຈນ​ທີ່​ເຊື່ອ​ຖື​ໄດ້."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ລະ​ບຸ​ເອ​ເຈນ​ທີ່​ເຊື່ອ​ຖື​ໄດ້."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"​ເຊື່ອມ​ໂຍງ​ຫາ​ບໍ​ລິ​ການ​ຕົວ​ແທນ​ການ​ເຊື່ອ​ຖື"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນເຊື່ອມ​ໂຍງ​ກັບ​ບໍ​ລິ​ການ​ຕົວ​ແທນ​ທີ່​ເຊື່ອ​ຖື​ໄດ້."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"ຕິດຕໍ່ກັບລະບົບອັບເດດ ແລະລະບົບກູ້ຂໍ້ມູນ."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 50d8239db4fc..2cd171e71d45 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Programai leidžiama fiksuoti ir peradresuoti garso išvestį."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Aktyvinamųjų žodžių aptikimas"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Programai leidžiama įrašyti garsą, kad būtų galima aptikti aktyvinamuosius žodžius. Įrašymas gali būti vykdomas fone, bet tai netrikdo kitų garso įrašymo veiksmų (pvz., įrašymo vaizdo kamera)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Garso nukreipimas"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Programai leidžiama tiesiogiai valdyti garso nukreipimo ir garso nepaisymo politikos sprendimus."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"fiksuoti vaizdo išvestį"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Programai leidžiama fiksuoti ir peradresuoti vaizdo išvestį."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"fiksuoti saugią vaizdo išvestį"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Leidžiama programai keisti visuotinius garso nustatymus, pvz., garsumą ir tai, kuris garsiakalbis naudojamas išvesčiai."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"įrašyti garsą"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Leidžiama programai įrašyti garsą naudojant mikrofoną. Šis leidimas suteikia galimybę programai įrašyti garsą bet kada be jūsų patvirtinimo."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM kortelės ryšys"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Programai leidžiama siųsti komandas į SIM kortelę. Tai labai pavojinga."</string>
<string name="permlab_camera" msgid="3616391919559751192">"fotografuoti ir filmuoti"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Leidžiama programai fotografuoti ir filmuoti kamera. Šis leidimas suteikia teisę programai naudoti kamerą bet kada be jūsų patvirtinimo."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"neleisti perduoti LED indikatoriaus, kai naudojamas fotoaparatas"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Programai leidžiama valdyti „KeyGuard“."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Atsižvelgti į patikimos būsenos pakeitimus."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Programai leidžiama atsižvelgti į patikimos būsenos pakeitimus."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Teikti patikimos priemonės paslaugą."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Programai leidžiama teikti patikimos priemonės paslaugą."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Susisaistyti su „trust agent“ paslauga"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Programai leidžiama susisaistyti su „trust agent“ paslauga."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Sąveikauti su naujiniu ir atkūrimo sistema"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 5034464b42f9..ae037fd3248c 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Ļauj lietotnei tvert un novirzīt audio izvadi."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Īsinājumvārda noteikšana"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Ļauj lietotnei tvert audio īsinājumvārda noteikšanai. Tveršana var notikt fonā, taču tā neaizkavē citu audio (piemēram, videokameras audio) tveršanu."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Audio maršrutēšana"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Ļauj lietotnei tieši kontrolēt audio maršrutēšanu un ignorēt audio politikas."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"tvert video izvadi"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Ļauj lietotnei tvert un novirzīt video izvadi."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"tvert drošu video izvadi"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ļauj lietotnei mainīt globālos audio iestatījumus, piemēram, skaļumu un izejai izmantoto skaļruni."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ierakstīt audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Ļauj lietotnei ierakstīt audio, izmantojot mikrofonu. Šī atļauja ļauj lietotnei ierakstīt audio jebkurā brīdī bez jūsu apstiprinājuma."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM saziņa"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ļauj lietotnei sūtīt komandas uz SIM karti. Tas ir ļoti bīstami!"</string>
<string name="permlab_camera" msgid="3616391919559751192">"uzņemt attēlus un videoklipus"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Ļauj lietotnei uzņemt attēlus un videoklipus ar kameru. Ar šo atļauju lietotne var jebkurā brīdī izmantot kameru bez jūsu apstiprinājuma."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Atspējot pārraidīšanas LED indikatoru, kad kamera tiek izmantota"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Ļauj lietojumprogrammai pārvaldīt krātuvi."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Klausīties uzticamības statusa izmaiņas"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Ļauj lietojumprogrammai klausīties uzticamības statusa izmaiņas."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Nodrošināt uzticamības pārbaudes programmu"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Ļauj lietojumprogrammai nodrošināt uzticamības pārbaudes programmu."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Izveidot savienojumu ar uzticamības pārbaudes pakalpojumu"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ļauj lietojumprogrammai izveidot savienojumu ar uzticamības pārbaudes pakalpojumu."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Mijiedarbošanās ar atjauninājumu un atkopšanas sistēmu"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 1177284409d7..c515b87dc378 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Апп-т аудио гаралтыг барих, дахин чиглүүлэхийг зөвшөөрнө."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Хотворд таних"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Апп-д Хотворд илрүүлэхийн тулд аудиог бичихийг зөвшөөрнө. Бичилт далд хийгдэх бөгөөд бусад аудио бичилтэд (жнь. видео бичлэг) саад болохгүй."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Аудио чиглүүлэлт"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Апп-д аудио чиглүүлэгчийг шууд удирдах, аудио бодлогын шийдвэрүүдийг давах боломж олгоно."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"видео гаралтыг барих"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Апп-т видео гаралтыг барих, дахин чиглүүлэхийг зөвшөөрнө."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"найдвартай видео гаралтыг барих"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Апп нь дууны хэмжээ, спикерын гаралтад ашиглагдах глобал аудио тохиргоог өөрчлөх боломжтой."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"аудио бичих"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Апп нь микрофоноор аудио бичих боломжтой. Энэ зөвшөөрөл нь апп-д ямар ч үед таны зөвшөөрөлгүйгээр аудио бичих боломжийг олгоно."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"сим холбоо"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Апп-д SIM рүү комманд илгээхийг зөвшөөрнө. Энэ маш аюултай."</string>
<string name="permlab_camera" msgid="3616391919559751192">"зураг авах болон видео бичих"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Апп нь камераар зураг авах болон видео бичих боломжтой. Энэ зөвшөөрөл нь апп-д ямар ч үед таны зөвшөөрөлгүйгээр камер ашиглах боломжийг олгоно."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"камер ашиглаж байх үед дамжууллыг заагч LED-г идэвхгүй болгох"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Аппликешн нь түлхүүр хамгаалагчыг удирдах боломжтой."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Итгэмжлэлд орж буй өөрчлөлтийг мэдэх."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Итгэмжлэлд орж буй өөрчлөлтийг мэдэх боломжийг аппликешнд олгоно."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Итгэмжлэгдсэн төлөөлөгч нийлүүлэх"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Аппликешнд итгэмжлэгдсэн төлөөлөгч нийлүүлэх боломж олгоно."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Итгэмжлэгдсэн төлөөлөгчийн үйлчилгээтэй холбогдох"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Аппликешнд итгэмжлэгдсэн төлөөлөгчтэй холбогдох боломж олгоно."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Шинэчлэлт болон сэргээх системтэй харилцах"</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 16c009ed6ff4..637b5421d2c2 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Membenarkan apl menangkap dan mengubah hala output audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Pengesanan sebutan laluan"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Benarkan apl merakam audio untuk pengesahan Sebutan Laluan. Rakaman ini boleh berlaku di latar belakang tetapi tidak menghalang rakaman audio lain (cth. Kamkorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Penghalaan Audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Membenarkan apl untuk mengawal penghalaan audio secara langsung dan mengatasi keputusan dasar audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"tangkap output video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Membenarkan apl menangkap dan mengubah hala output video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"tangkap output video selamat"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Membenarkan apl untuk mengubah suai tetapan audio global seperti kelantangan dan pembesar suara mana digunakan untuk output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"rakam audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Membenarkan apl untuk merakam audio menggunakan mikrofon. Kebenaran ini membenarkan apl untuk merakam audio pada bila-bila masa tanpa pengesahan anda."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikasi sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Membenarkan apl menghantar arahan kepada SIM. Ini amat berbahaya."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ambil gambar dan video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Membenarkan apl mengambil gambar dan video menggunakan kamera. Kebenaran ini membenarkan apl untuk menggunakan kamera pada bila-bila masa tanpa pengesahan anda."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"lumpuhkan LED penunjuk penghantaran semasa kamera sedang digunakan"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Membenarkan aplikasi untuk mengawal pengawal kekunci."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Dengar perubahan keadaan amanah."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Membenarkan aplikasi mendengar perubahan dalam keadaan amanah."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Sediakan ejen amanah."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Membenarkan aplikasi menyediakan ejen amanah."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Mengikat kepada perkhidmatan ejen amanah"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Membenarkan aplikasi terikat kepada perkhidmatan ejen amanah."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Berinteraksi dengan kemas kini dan sistem pemulihan"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index acc441788126..62db1daf64e7 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Lar appen ta opp og omdirigere lydutdata."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Gjenkjennelse av kommandoord"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Gir appen tillatelse til å ta opp lyd for å gjenkjenne kommandoord. Opptaket kan skje i bakgrunnen, men forhindrer ikke lydopptak i andre funksjoner (f.eks. i videoopptak)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Lydruting"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Tillater appen å styre lydruting direkte og overstyre angitte lydinnstillinger."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"ta opp fra videoutdata"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Lar appen ta opp og omdirigere videoutdata."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ta opp fra sikre videoutdata"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lar appen endre globale lydinnstillinger slik som volum og hvilken høyttaler som brukes for lydavspilling."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ta opp lyd"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Lar appen ta opp lyd med mikrofonen. Dette betyr at appen kan ta opp lyd når som helst uten at du har bedt om det."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-kommunikasjon"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Lar appen sende kommandoer til SIM-kortet. Dette er veldig farlig."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ta bilder og videoer"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Lar appen ta bilder og filme med kameraet. Denne tillatelsen gjør at appen kan bruke kameraet når som helst uten bekreftelse fra deg."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiver LED-lyset for indikering av overføring når kameraet er i bruk"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillater at en app kontrollerer tastelåsen."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Oppdag endringer i tillitsstatusen."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Gir appen tillatelse til å oppdage endringer i tillitsstatusen."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Angivelse av en pålitelig agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Tillater appen å angi en pålitelig agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Tilknytt en tillitsagent-tjeneste."</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Gir appen tillatelse til å knyttes til en tillitsagent-tjeneste."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Samhandling med oppdateringer og gjenopprettingssystem"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index d973812d6fcf..1cc6918f8d2b 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Hiermee kan de app audio-uitvoer vastleggen en verwerken."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detectie van hotwords"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Hiermee kan de app audio opnemen voor het detecteren van hotwords. Het opnemen kan op de achtergrond plaatsvinden, maar voorkomt niet dat andere audio wordt opgenomen (bijvoorbeeld in Camcorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Audioroutering"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Hiermee kan de app rechtstreeks audioroutering beheren en audiobeleid negeren."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"video-uitvoer vastleggen"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Hiermee kan de app video-uitvoer vastleggen en verwerken."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"beveiligde video-uitvoer vastleggen"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Hiermee kan de app algemene audio-instellingen wijzigen zoals het volume en welke luidspreker wordt gebruikt voor de uitvoer."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"audio opnemen"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Hiermee kan de app audio opnemen met de microfoon. Met deze toestemming kan de app op elk moment audio opnemen, zonder om uw bevestiging te vragen."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-communicatie"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Hiermee kan de app opdrachten verzenden naar de simkaart. Dit is erg gevaarlijk."</string>
<string name="permlab_camera" msgid="3616391919559751192">"foto\'s en video\'s maken"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Hiermee kan de app foto\'s en video\'s maken met de camera. Met deze toestemming kan de app de camera altijd gebruiken, zonder uw bevestiging."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"indicatielampje uitschakelen wanneer camera wordt gebruikt"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Staat toe dat een app de toetsbeveiliging beheert."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Controleren op wijzigingen in de trust-status."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Toestaan dat een app controleert op wijzigingen in de trust-status."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Een trust-agent aanleveren."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Hiermee kan een app een trust-agent aanleveren."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Binden aan een trust-agentservice"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Toestaan dat een app wordt gebonden aan een trust-agentservice."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interactie met update- en herstelsysteem"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index b4520188d8b9..5a75c3425234 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Zezwala aplikacji na przechwytywanie i przekierowywanie wyjścia audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Wykrywanie słów-kluczy"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Umożliwia aplikacji przechwytywanie dźwięku w celu wykrywania słów-kluczy. Może się to odbywać w tle i nie uniemożliwia innego przechwytywania dźwięku (np. z kamery)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Kierowanie dźwiękowe"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Zezwala aplikacji na bezpośrednie sterowanie kierowaniem dźwiękowym i zastępowanie decyzji zasad dźwięku."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"przechwyć wyjście wideo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Zezwala aplikacji na przechwytywanie i przekierowywanie wyjścia wideo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"przechwyć bezpieczne wyjście wideo"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pozwala aplikacji na modyfikowanie globalnych ustawień dźwięku, takich jak głośność oraz urządzenie wyjściowe."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"nagrywanie dźwięku"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Pozwala aplikacji na nagrywanie dźwięku przez mikrofon. Aplikacja z tym uprawnieniem może nagrywać dźwięk w dowolnym momencie bez Twojego potwierdzenia."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikacja z kartą SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Pozwala aplikacji na wysyłanie poleceń do karty SIM. To bardzo niebezpieczne."</string>
<string name="permlab_camera" msgid="3616391919559751192">"wykonywanie zdjęć i filmów wideo"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Pozwala aplikacji na robienie zdjęć i nagrywanie filmów przy użyciu aparatu. Aplikacja z tym uprawnieniem może użyć aparatu w dowolnym momencie bez Twojego potwierdzenia."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"wyłącz wskaźnik LED transmisji, gdy aparat jest w użyciu"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umożliwia aplikacji kontrolowanie zabezpieczenia kluczami."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Monitoruj zmiany w stanie zaufania."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Zezwala aplikacji na monitorowanie zmian w stanie zaufania."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Dostarczaj agenta zaufania."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Zezwala aplikacji na dostarczanie agenta zaufania."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Powiąż z usługą agenta zaufania"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Zezwala aplikacji na powiązanie z usługą agenta zaufania."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interakcja z systemem odzyskiwania i aktualizacjami"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index d3f5a63d9ac1..85a7a7eba176 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permite à aplicação capturar e redirecionar a saída de áudio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Deteção de palavra de ativação"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permite à aplicação capturar áudio para deteção da palavra de ativação. A captura pode acontecer em segundo plano, mas não impede outras capturas de áudio (por exemplo com câmara de vídeo)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Direcionamento do áudio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permite que a aplicação controle diretamente o direcionamento do áudio e substitua as decisões da política de áudio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capturar saída de vídeo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permite à aplicação capturar e redirecionar a saída de vídeo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capturar saída de vídeo segura"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que a aplicação modifique definições de áudio globais, tais como o volume e qual o altifalante utilizado para a saída de som."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que a aplicação grave áudio com o microfone. Esta autorização permite que a aplicação grave áudio em qualquer altura sem a confirmação do utilizador."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicação com o SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que a aplicação envie comandos para o SIM. Esta ação é muito perigosa."</string>
<string name="permlab_camera" msgid="3616391919559751192">"tirar fotografias e vídeos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permite que a aplicação tire fotografias e grave vídeos com a câmara. Esta autorização permite que a aplicação utilize a câmara sem a sua confirmação em qualquer altura."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desativar LED indicador de transmissão com a câmara em utilização"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que uma aplicação controle a proteção de teclado."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Registar alterações no estado trust."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que uma aplicação registe alterações no trust state."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Fornecer um agente fidedigno."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permite que uma aplicação forneça um agente fidedigno."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vincular a um serviço de trust agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que uma aplicação fique vinculada a um serviço de trust agent."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interagir com o sistema de recuperação e de atualização"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index ae15d4891f10..cd30e91feadc 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permite que o aplicativo capture e redirecione a saída de áudio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Detecção de hotwords"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Permite que o dispositivo capture áudio para a detecção de hotwords. A captura pode acontecer em segundo plano, mas não impede outras capturas de áudio (como por uma câmera de vídeo)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Roteamento de áudio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permite que o app controle diretamente o roteamento de áudio e substitua as decisões relacionadas a políticas de áudio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"capturar saída de vídeo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permite que o aplicativo capture e redirecione a saída de vídeo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"capturar saída de vídeo segura"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que o aplicativo modifique configurações de áudio globais como volume e alto-falantes de saída."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que o aplicativo grave áudio com o microfone. Esta permissão autoriza o aplicativo a gravar áudio a qualquer momento, sem sua confirmação."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicação com sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que o aplicativo envie comandos ao SIM. Muito perigoso."</string>
<string name="permlab_camera" msgid="3616391919559751192">"tirar fotos e gravar vídeos"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permite que o aplicativo tire fotos e filme vídeos com a câmera. Esta permissão autoriza o aplicativo a usar a câmera a qualquer momento sem sua confirmação."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desativar a transmissão do LED indicador quando a câmera estiver em uso"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que o aplicativo controle o bloqueio de teclado."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar alterações no estado de confiança."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que o aplicativo detecte alterações no estado de confiança."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Fornecer um agente de confiança."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permite que um aplicativo forneça um agente de confiança."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Associar a um serviço de agente de confiança"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que o aplicativo se associe a um serviço de agente de confiança."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interagir com o sistema de atualizações e recuperação"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index a3cf56358b94..994b8f256f01 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -863,6 +863,10 @@
<skip />
<!-- no translation found for permdesc_captureAudioHotword (9151807958153056810) -->
<skip />
+ <!-- no translation found for permlab_modifyAudioRouting (7738060354490807723) -->
+ <skip />
+ <!-- no translation found for permdesc_modifyAudioRouting (7205731074267199735) -->
+ <skip />
<!-- no translation found for permlab_captureVideoOutput (2246828773589094023) -->
<skip />
<!-- no translation found for permdesc_captureVideoOutput (359481658034149860) -->
@@ -881,10 +885,6 @@
<string name="permlab_recordAudio" msgid="3876049771427466323">"registrar audio"</string>
<!-- no translation found for permdesc_recordAudio (4906839301087980680) -->
<skip />
- <!-- no translation found for permlab_sim_communication (1180265879464893029) -->
- <skip />
- <!-- no translation found for permdesc_sim_communication (5725159654279639498) -->
- <skip />
<string name="permlab_camera" msgid="3616391919559751192">"fotografar e registrar videos"</string>
<!-- no translation found for permdesc_camera (8497216524735535009) -->
<skip />
@@ -2178,6 +2178,10 @@
<skip />
<!-- no translation found for permdesc_trust_listener (8233895334214716864) -->
<skip />
+ <!-- no translation found for permlab_provide_trust_agent (5465587586091358316) -->
+ <skip />
+ <!-- no translation found for permdesc_provide_trust_agent (3865702641053068148) -->
+ <skip />
<!-- no translation found for permlab_bind_trust_agent_service (8242093169457695334) -->
<skip />
<!-- no translation found for permdesc_bind_trust_agent_service (7041930026024507515) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 03b7d40c2ee0..eb56be394729 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Permite aplicației să intercepteze și să redirecționeze ieșirea audio."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"detectarea expresiei de activare"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Activează captarea semnalului audio de către aplicație pentru detectarea expresiei de activare. Captarea poate avea loc în fundal, dar nu împiedică altă captare audio (de ex., cameră video)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Cale audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Permite aplicației să controleze în mod direct calea audio și să suprascrie deciziile privind politicile audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"să intercepteze ieșirea video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Permite aplicației să intercepteze și să redirecționeze ieșirea video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"să intercepteze ieșirea video securizată"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite aplicaţiei să modifice setările audio globale, cum ar fi volumul şi difuzorul care este utilizat pentru ieşire."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"înregistrare audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite aplicaţiei să efectueze înregistrări audio cu ajutorul microfonului. Cu această permisiune aplicaţia efectuează oricând înregistrări audio fără confirmare."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicare cu cardul SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite aplicației să trimită comenzi pe cardul SIM. Această permisiune este foarte periculoasă."</string>
<string name="permlab_camera" msgid="3616391919559751192">"realizarea de fotografii şi videoclipuri"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Permite aplicaţiei să realizeze fotografii şi videoclipuri cu camera foto. Cu această permisiune aplicaţia utilizează camera foto oricând şi fără confirmare."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"dezactivează ledul care indică când este utilizată camera foto"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite unei aplicații să controleze blocarea tastaturii."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Detectarea modificărilor în starea de încredere."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite unei aplicații să detecteze modificările în starea de încredere."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Indicați un agent de încredere."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Permite unei aplicații să indice un agent de încredere."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Asocierea la un serviciu „agenți de încredere”."</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite unei aplicații să se asocieze la un serviciu „agent de încredere”."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interacțiune cu sistemul de recuperare și de actualizare"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index bb985082159c..52dce95339e4 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -176,7 +176,7 @@
<string name="global_action_lock" msgid="2844945191792119712">"Блокировка экрана"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Отключить питание"</string>
<string name="global_action_bug_report" msgid="7934010578922304799">"Отчет об ошибке"</string>
- <string name="bugreport_title" msgid="2667494803742548533">"Создание отчета об ошибке"</string>
+ <string name="bugreport_title" msgid="2667494803742548533">"Отчет об ошибке"</string>
<string name="bugreport_message" msgid="398447048750350456">"Информация о текущем состоянии вашего устройства будет собрана и отправлена по электронной почте. Подготовка отчета займет некоторое время."</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Режим без звука"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Выключить"</string>
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Приложение сможет захватывать и перенаправлять аудиосигнал."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"распознавать голосовые команды"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Приложение сможет анализировать звук для распознавания голосовых команд. Этот процесс выполняется в фоновом режиме и не мешает другим операциям (например, записи видеоролика)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Маршрутизация аудио"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Управление маршрутизацией аудио и перезапись правил, связанных с аудио."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"захват видеосигнала"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Приложение сможет захватывать и перенаправлять видеосигнал."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"захват защищенного видеосигнала"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Приложение сможет изменять системные настройки звука, например уровень громкости и активный динамик."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Запись аудио"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Приложение сможет записывать аудио с помощью микрофона в любое время без уведомления."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"Обращение к SIM-карте"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Приложение сможет отправлять команды SIM-карте (данное разрешение представляет большую угрозу)."</string>
<string name="permlab_camera" msgid="3616391919559751192">"Фото- и видеосъемка"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Приложение сможет снимать фотографии и видеоролики с помощью камеры в любое время без вашего разрешения."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Отключать светодиодный индикатор во время использования камеры"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Приложение сможет управлять хранилищем ключей."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Отслеживание изменений статуса доверия"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Приложение сможет отслеживать изменения в статусе доверия."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Доверенный агент"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Предоставление доверенных агентов."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Подключение к службе Trust Agents"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Приложение сможет подключаться к службе Trust Agents."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Взаимодействовать с системой восстановления и обновлениями"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 7e8019ab42ad..2ee9310791b4 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Umožňuje aplikácii zachytiť a presmerovať výstup zvuku."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Rozpoznanie kľúčových slov"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Umožňuje aplikácii zaznamenať zvuk s cieľom rozpoznať kľúčové slová. Záznam sa môže uskutočniť na pozadí a nebráni inému zaznamenávaniu zvuku (napríklad videokamerou)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Smerovanie zvuku"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Umožňuje aplikácii priamo ovládať smerovanie zvuku a prepísať rozhodnutia týkajúce sa pravidiel pre zvuk."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"zachytiť výstup videa"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Umožňuje aplikácii zachytiť a presmerovať výstup videa."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"zachytiť zabezpečený výstup videa"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikácii upraviť globálne nastavenia zvuku, ako je hlasitosť, alebo určiť, z ktorého reproduktora bude zvuk vychádzať."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"nahrávať zvuk"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Umožňuje aplikácii zaznamenávať zvuk pomocou mikrofónu. Toto povolenie umožňuje aplikácii zaznamenávať zvuk kedykoľvek bez vášho potvrdenia."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikácia s kartou SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Umožňuje aplikácii odosielať príkazy na kartu SIM. Toto je veľmi nebezpečné povolenie."</string>
<string name="permlab_camera" msgid="3616391919559751192">"fotiť a nakrúcať videá"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Umožňuje aplikácii fotografovať a nahrávať videá pomocou fotoaparátu. Toto povolenie umožňuje aplikácii používať fotoaparát kedykoľvek a bez vášho potvrdenia."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Zakázať indikátor LED prenosu pri používaní fotoaparátu"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umožňuje aplikácii ovládať technológiu keyguard."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Reagovanie na zmeny stavu dôveryhodnosti."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Umožňuje aplikácii reagovať na zmeny stavu dôveryhodnosti."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Poskytnúť dôveryhodného agenta"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Umožňuje aplikácii poskytnúť dôveryhodného agenta."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Viazanie sa na službu zástupcu dôveryhodnosti"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Umožňuje aplikácii viazať sa na službu zástupcu dôveryhodnosti."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interakcia so systémom aktualizácií a obnovenia"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index e681737b57a7..806860346e5f 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Omogoči aplikaciji, da zajame in preusmeri avdioizhod."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Zaznavanje sprožilnih besed"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Aplikaciji dovoljuje snemanje zvoka za zaznavanje sprožilnih besed. Snemanje je možno tudi v ozadju, ne preprečuje pa drugega snemanja zvoka (npr. z videokamero)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Usmerjanje zvoka"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Aplikaciji dovoli neposredno nadziranje usmerjanja zvoka in preglasitev odločitev pravilnika za zvok."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"zajem videoizhoda"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Omogoči aplikaciji, da zajame in preusmeri videoizhod."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"zajem varnega videoizhoda"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogoča spreminjanje splošnih zvočnih nastavitev, na primer glasnost in kateri zvočnik se uporablja."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"snemanje zvoka"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Aplikaciji omogoča snemanje zvoka z mikrofonom. S tem dovoljenjem lahko aplikacija kadar koli snema zvok brez vaše potrditve."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"komuniciranje s kartico SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Aplikaciji dovoli pošiljanje ukazov kartici SIM. To je lahko zelo nevarno."</string>
<string name="permlab_camera" msgid="3616391919559751192">"fotografiranje in snemanje videoposnetkov"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Aplikaciji omogoča fotografiranje in snemanje videoposnetkov s kamero. S tem dovoljenjem lahko aplikacija kadar koli uporablja kamero brez vaše potrditve."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"onemogoči LED-indikator prenašanja, ko je fotoaparat v uporabi"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Aplikaciji omogoča nadzor zaklepanja tipkovnice."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Spremljanje sprememb stanja zaupanja."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Aplikaciji dovoli spremljanje sprememb stanja zaupanja."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Navedba posrednika zaupanja."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Aplikaciji dovoli navesti posrednika zaupanja."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Povezovanje s storitvijo posrednikov zaupanja"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Aplikaciji dovoli povezovanje s storitvijo posrednikov zaupanja."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Uporaba sistema za posodobitev in obnovitev"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 51a78395cb6c..05d71f2aa5c1 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Дозвољава апликацији да снима и преусмерава аудио садржај."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Откривање актуелних речи"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Дозвољава апликацији да снима звук за откривање актуелних речи. Снимање може да се дешава у позадини, али не спречава друга снимања звука (нпр. камкордер)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Преусмеравање звука"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Дозвољава апликацији да директно контролише преусмеравање звука и замени одлуке смерница о звуку."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"снимање видео садржаја"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Дозвољава апликацији да снима и преусмерава видео садржај."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"снимање безбедног видео садржаја"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозвољава апликацији да мења глобална аудио подешавања као што су јачина звука и избор звучника који се користи као излаз."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"снимање аудио записа"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Дозвољава апликацији да снима звук помоћу микрофона. Ова дозвола омогућава апликацији да снима звук у било ком тренутку без ваше потврде."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"Комуникација са SIM картицом"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Омогућава апликацији да шаље команде SIM картици. То је веома опасно."</string>
<string name="permlab_camera" msgid="3616391919559751192">"снимање фотографија и видео снимака"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Дозвољава апликацији да снима слике и видео снимке камером. Ова дозвола омогућава апликацији да у било ком тренутку користи камеру без ваше потврде."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"онемогући пренос LED осветљења индикатора док се камера користи"</string>
@@ -608,7 +608,7 @@
<string name="permlab_setWallpaperHints" msgid="3278608165977736538">"прилагођавање величине позадине"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Дозвољава апликацији да подеси савете за системску величину позадине."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"поновно постављање фабричких подразумеваних подешавања"</string>
- <string name="permdesc_masterClear" msgid="3665380492633910226">"Дозвољава апликацији да поново постави комплетна фабричка подешавања система и тиме избрише све податке, конфигурацију и инсталиране апликације."</string>
+ <string name="permdesc_masterClear" msgid="3665380492633910226">"Дозвољава апликацији да ресетује систем на фабричка подешавања и тиме избрише све податке, конфигурацију и инсталиране апликације."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"подешавање времена"</string>
<string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Дозвољава апликацији да промени време на сату таблета."</string>
<string name="permdesc_setTime" product="default" msgid="1855702730738020">"Дозвољава апликацији да промени време на сату телефона."</string>
@@ -732,8 +732,8 @@
<string name="policylab_forceLock" msgid="2274085384704248431">"Закључавање екрана"</string>
<string name="policydesc_forceLock" msgid="1141797588403827138">"Контролишите начин и време закључавања екрана."</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Брисање свих података"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Брисање података на таблету без упозорења враћањем фабричких података."</string>
- <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Избришите податке на телефону без упозорења враћањем фабричких података."</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Брисање података на таблету без упозорења ресетовањем на фабричка подешавања."</string>
+ <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Избришите податке на телефону без упозорења ресетовањем на фабричка подешавања."</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Подесите глобални прокси сервер уређаја"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Подесите глобални прокси сервер уређаја који ће се користити док су омогућене смернице. Само први администратор уређаја поставља ефективни глобални прокси сервер."</string>
<string name="policylab_expirePassword" msgid="885279151847254056">"Подешавање истека лозинке екрана"</string>
@@ -906,8 +906,8 @@
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"<xliff:g id="NUMBER_0">%d</xliff:g> пута сте погрешно унели PIN. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"<xliff:g id="NUMBER_0">%d</xliff:g> пута сте нетачно унели шаблон за откључавање. Након још <xliff:g id="NUMBER_1">%d</xliff:g> несупешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу података за пријављивање на Google.\n\n Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"<xliff:g id="NUMBER_0">%d</xliff:g> пута сте нетачно унели шаблон за откључавање. Након још <xliff:g id="NUMBER_1">%d</xliff:g> несупешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу података за пријављивање на Google.\n\n Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Неправилно сте покушали да откључате таблет <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још неуспешних покушаја (<xliff:g id="NUMBER_1">%d</xliff:g>) таблет ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Неисправно сте покушали да откључате телефон <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још неуспешних покушаја (<xliff:g id="NUMBER_1">%d</xliff:g>) телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Неправилно сте покушали да откључате таблет <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још неуспешних покушаја (<xliff:g id="NUMBER_1">%d</xliff:g>) таблет ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Неисправно сте покушали да откључате телефон <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још неуспешних покушаја (<xliff:g id="NUMBER_1">%d</xliff:g>) телефон ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Неисправно сте покушали да откључате таблет <xliff:g id="NUMBER">%d</xliff:g> пута. Таблет ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Неисправно сте покушали да откључате телефон <xliff:g id="NUMBER">%d</xliff:g> пута. Телефон ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Покушајте поново за <xliff:g id="NUMBER">%d</xliff:g> секунде(и)."</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Дозвољава апликацији да контролише заштиту шифром."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Праћење промена Trust стања."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Дозвољава апликацији да прати промене Trust стања."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Обезбеђивање поузданог агента."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Дозвољава апликацији да обезбеди поузданог агента."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Везивање за услугу Trust agents"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Дозвољава апликацији да се веже за услугу Trust agents."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Интеракција са системом за ажурирање и опоравак"</string>
@@ -1582,8 +1584,8 @@
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Унели сте PIN неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Унели сте лозинку неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Таблет ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Телефон ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште.\n\nПокушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 595daddc2f28..1c3f560d2431 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Tillåt att appen fångar upp och omdirigerar ljudutgången."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Kommandoordsidentifiering"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Tillåter att appen spelar in ljud för att upptäcka kommandoord. Inspelningen kan pågå i bakgrunden utan att hindra andra ljudinspelningar (t.ex. med videokamera)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Ljuddirigering"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Tillåter att appen styr ljuddirigeringen direkt och åsidosätter ljudpolicybeslut."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"fånga upp videoutgång"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Tillåt att appen fångar upp och omdirigerar videoutgången."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"fånga upp säker videoutgång"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillåter att appen ändrar globala ljudinställningar som volym och vilken högtalarutgång som används."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"spela in ljud"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Tillåter att appen spelar in ljud med mikrofonen. Med den här behörigheten tillåts appen att spela in ljud när som helst utan ditt godkännande."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikation"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Tillåter att appen skickar kommandon till SIM-kortet. Detta är mycket farligt."</string>
<string name="permlab_camera" msgid="3616391919559751192">"ta bilder och spela in videoklipp"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Tillåter att appen tar bilder och spelar in videor med kameran. Med den här behörigheten tillåts appen att använda kameran när som helst utan ditt godkännande."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"inaktivera LED-sändningsindikator när kameran används"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillåter att en app kontrollerar knapplåsfunktionen."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Lyssna efter ändringar i betrodda agenters status."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Tillåter att en app lyssnar efter ändringar i den betrodda agentens status."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Tillhandahåll en betrodd agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Tillåter att en app tillhandahåller en betrodd agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind till en tjänst från en betrodd agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Tillåter att en app binds vid en tjänst från en betrodd agent."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Interagera med uppdaterings- och återställningssystemet"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index bb391002e582..83fe8015d12a 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Inaruhusu programu kunasa na kuelekeza sauti kwingine."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Kutambua neno tekelezi"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Inaruhusu programu kunasa sauti kwa ajili ya utambuzi wa Neno Tekelezi. Kunasa kunaweza kukafanyika chinichini lakini hakutazuia unasaji mwingine wa sauti (kwa mfano Kamkoda)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Uelekezaji wa Sauti"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Huruhusu programu kudhibiti uelekezaji wa sauti moja kwa moja na kupuuza maamuzi ya sera ya sauti."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"nasa sauti ya video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Inaruhusu programu kunasa na kuelekeza video kwingine."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"nasa sauti ya video kwa usalama"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Inaruhusu programu kurekebisha mipangilio ya sauti kila mahali kama vile sauti na ni kipaza sauti kipi ambacho kinatumika kwa kutoa."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"kurekodi sauti"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Inaruhusu programu kurekodi sauti kwa kinasa sauti. Idhini hii inaruhusu programu kurekodi sauti wakati wowote bila ya uthibitisho wako."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"mawasiliano ya sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Huruhusu programu kutuma amri kwa SIM. Hii ni hatari sana."</string>
<string name="permlab_camera" msgid="3616391919559751192">"Kupiga picha na kurekodi video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Inaruhusu programu kupiga picha na video kwa kamera. Kibali hiki kinaruhusu programu kutumia kamera kwa wakati wowote bila uthibitisho wako."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"zima LED ya kisambaza kiashirio wakati kamera inatumika"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Huruhusu programu kudhibiti kilinda-funguo."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Sikiliza mabadiliko ya hali ya kuaminiwa."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Huruhusu programu kusikiliza mabadiliko katika hali ya kuaminiwa."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Toa wakala wa uaminifu."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Huruhusu programu kutoa wakala wa uaminifu."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Funga kwenye huduma ya dalali wa kuaminiwa"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Huruhusu programu kufungamanisha kwenye huduma ya dalali wa kuaminiwa."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Ingiliana na sasisho na mfumo wa kurejesha"</string>
diff --git a/core/res/res/values-television/themes.xml b/core/res/res/values-television/themes.xml
index 6e17cdd3d9d0..f92ff4069188 100644
--- a/core/res/res/values-television/themes.xml
+++ b/core/res/res/values-television/themes.xml
@@ -18,6 +18,6 @@
<style name="Theme.Dialog.AppError" parent="Theme.Leanback.Dialog.AppError" />
<style name="Theme.Holo.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" />
<style name="Theme.Holo.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" />
- <style name="Theme.Quantum.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" />
- <style name="Theme.Quantum.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" />
+ <style name="Theme.Material.Dialog.Alert" parent="Theme.Leanback.Dialog.Alert" />
+ <style name="Theme.Material.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" />
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index d235eaa27a05..da17704298d7 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"อนุญาตให้แอปบันทึกและเปลี่ยนเส้นทางเอาต์พุตเสียง"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"การตรวจหาคำที่นิยม"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"อนุญาตให้แอปเก็บเสียงสำหรับการตรวจหาคำที่นิยม การเก็บเสียงสามารถดำเนินการอยู่ในพื้นหลัง แต่ไม่เป็นการป้องกันการเก็บเสียงอื่นๆ (เช่น กล้องวิดีโอ)"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"การกำหนดเส้นทางเสียง"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"ช่วยให้แอปสามารถควบคุมการกำหนดเส้นทางเสียงได้โดยตรง และแทนที่การตัดสินใจในนโยบายด้านเสียง"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"บันทึกเอาต์พุตวิดีโอ"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"อนุญาตให้แอปบันทึกและเปลี่ยนเส้นทางเอาต์พุตวิดีโอ"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"บันทึกเอาต์พุตเสียงที่ปลอดภัย"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"อนุญาตให้แอปพลิเคชันปรับเปลี่ยนการตั้งค่าเสียงทั้งหมดได้ เช่น ระดับเสียงและลำโพงที่จะใช้งาน"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"บันทึกเสียง"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"อนุญาตให้แอปพลิเคชันบันทึกเสียงด้วยไมโครโฟน การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกเสียงได้ทุกเมื่อโดยไม่ต้องรอการยืนยันจากคุณ"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"การสื่อสารกับ SIM"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"อนุญาตให้แอปส่งคำสั่งไปยัง SIM ซึ่งอันตรายมาก"</string>
<string name="permlab_camera" msgid="3616391919559751192">"ถ่ายภาพและวิดีโอ"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"อนุญาตให้แอปพลิเคชันถ่ายภาพและวิดีโอด้วยกล้องถ่ายรูปนี้ การอนุญาตนี้จะทำให้แอปพลิเคชันสามารถใช้กล้องถ่ายรูปได้ทุกเมื่อโดยไม่ต้องรอการยืนยันจากคุณ"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ปิดไฟสัญญาณ LED เมื่อใช้งานกล้อง"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"อนุญาตให้แอปพลิเคชันควบคุมตัวล็อกปุ่มกด"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"ฟังการเปลี่ยนแปลงของสถานะความน่าเชื่อถือ"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"อนุญาตให้แอปพลิเคชันฟังการเปลี่ยนแปลงที่มีต่อสถานะความน่าเชื่อถือ"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"เสนอตัวแทนที่เชื่อถือได้"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"ช่วยให้แอปพลิเคชันสามารถเสนอตัวแทนที่เชื่อถือได้"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ผูกกับบริการของตัวแทนที่เชื่อถือได้"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"อนุญาตให้แอปพลิเคชันผูกกับบริการของตัวแทนที่เชื่อถือได้"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"โต้ตอบกับการอัปเดตและระบบการกู้คืน"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 2b7d9615875b..3bbfc0db7194 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Pinapayagan ang app na kumuha at mag-redirect ng audio output."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Paghahanap ng hotword"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Nagbibigay-daan sa app na kumuha ng audio na paghahanapan ng Hotword. Maaaring maisagawa sa background ang pagkuha, ngunit hindi nito pipigilan ang iba pang pagkuha ng audio (hal. Camcorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Pagruruta ng Audio"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Pinapayagan ang app na direktang kontrolin ang pagruruta ng audio at i-override ang mga pasya sa patakaran sa audio."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"kumuha ng video output"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Pinapayagan ang app na kumuha at mag-redirect ng video output."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"kumuha ng secure na video output"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pinapayagan ang app na baguhin ang mga pandaigdigang setting ng audio gaya ng volume at kung aling speaker ang ginagamit para sa output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"mag-record ng audio"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Pinapayagan ang app na mag-record ng audio gamit ang mikropono. Pinapayagan ng pahintulot na ito ang app na mag-record ng audio anumang oras nang wala ng iyong kumpirmasyon."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"pag-uusap sa sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Pinapahintulutang magpadala ang app ng mga command sa SIM. Napakapanganib nito."</string>
<string name="permlab_camera" msgid="3616391919559751192">"kumuha ng mga larawan at video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Pinapayagan ang app na kumuha ng mga larawan at video gamit ang camera. Pinapayagan ng pahintulot na ito ang app na gamitin ang camera anumang oras nang wala ng iyong kumpirmasyon."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"i-disable ang LED na tagapagpahiwatig kapag ginagamit ang camera"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Pinapayagan ang isang application na kontrolin ang keyguard."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Makinig sa mga pagbabago sa estado ng trust."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Pinapayagan ang isang application na makinig para sa mga pagbabago sa estado ng trust."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Magbigay ng trust agent."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Pinapayagan ang isang application na magbigay ng trust agent."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Sumailalim sa isang serbisyo ng trust agent"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Pinapayagan ang isang application na sumailalim sa isang serbisyo ng trust agent."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Makipag-ugnay sa system ng pag-update at pagbawi"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index d5e227ed484a..76ea9e9db514 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Uygulamaya, ses çıkışını yakalayıp yönlendirme izni verir."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Özel kelime algılama"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Uygulamaya, Özel Kelime algılamak için ses yakalama izni verir. Ses yakalama işlemi arka planda yapılabilir, ancak diğer ses yakalama işlemlerini (ör. kameranın ses kaydını) engellemez."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Ses Yönlendirme"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Uygulamanın ses yönlendirmeyi doğrudan denetlemesine ve ses politikası kararlarını geçersiz kılmasına izin verir."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"video çıkışını yakala"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Uygulamaya, video çıkışını yakalayıp yönlendirme izni verir."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"güvenli video çıkışını yakala"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Uygulamaya ses düzeyi ve ses çıkışı için kullanılan hoparlör gibi genel ses ayarlarını değiştirme izni verir."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ses kaydet"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Uygulamaya mikrofonla ses kaydetme izni verir. Bu izin, uygulamanın istediği zaman onayınız olmadan ses kaydetmesine olanak sağlar."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"sim iletişimi"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Uygulamanın SIM karta komut göndermesine izin verir. Bu izin çok tehlikelidir."</string>
<string name="permlab_camera" msgid="3616391919559751192">"resim çekme ve görüntü kaydetme"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Uygulamaya kamerayla fotoğraf ve video çekme izni verir. Bu izin, uygulamanın sizin onayınız olmadan istediği zaman kamerayı kullanmasına olanak sağlar."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Kamera kullanımda iken iletim göstergesi LED\'ini devre dışı bırak"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Bir uygulamaya tuş koruyucuyu denetleme izni verir."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Güven durumundaki değişiklileri dinle."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Bir uygulamanın, güven durumundaki değişiklikleri dinlemesine izin verir."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Güven aracısı sağlama."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Bir uygulamanın güven aracısı sağlamasına izin verir."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Güven aracı hizmetine bağlan"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Bir uygulamanın, güven aracı hizmetine bağlanmasına izin verir."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Güncelleme ve kurtarma sistemiyle etkileşim kur"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 5088a8aaf3d6..70f619233896 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Дозволяє програмі отримувати доступ до аудіовиходу й переспрямовувати його."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"виявляти команди швидкого запуску"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Дозволяє програмі записувати аудіо для виявлення команд швидкого запуску. Запис відбуватиметься у фоновому режимі й не перешкоджатиме запису іншого аудіо (напр., з відеокамери)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Маршрутизація аудіо"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Додаток може безпосередньо керувати маршрутизацією аудіо та змінювати правила керування аудіо."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"отримувати доступ до відеовиходу"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Дозволяє програмі отримувати доступ до відеовиходу й переспрямовувати його."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"отримувати доступ до захищеного відеовиходу"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозволяє програмі змінювати загальні налаштування звуку, як-от гучність і динамік, який використовується для виводу сигналу."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запис-ти аудіо"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Дозволяє програмі записувати звук за допомогою мікрофона. Такий дозвіл дає програмі змогу будь-коли записувати звук без вашого підтвердження."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"комунікація із SIM-картою"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Дозволяє програмі надсилати команди на SIM-карту. Це дуже небезпечно."</string>
<string name="permlab_camera" msgid="3616391919559751192">"фотограф. та знімати відео"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Дозволяє програмі фотографувати та знімати відео за допомогою камери. Такий дозвіл дає програмі змогу будь-коли використовувати камеру без вашого підтвердження."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"вимикати світлодіодний індикатор передавання, коли використовується камера"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Дозволяє програмі керувати клавіатурою."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Відстежувати зміни в стані довіри."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Дозволяє додатку відстежувати зміни в стані довіри."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Призначення довірчого агента."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Додаток може призначати довірчого агента."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Прив’язуватися до служби довірчих агентів"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Дозволяє додатку прив’язуватися до служби довірчих агентів."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Взаємодіяти з оновленнями системи та системою відновлення."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 7961f8442869..4675f5d48880 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Cho phép ứng dụng thu thập và chuyển hướng dữ liệu đầu ra âm thanh."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Phát hiện từ nóng"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Cho phép ứng dụng thu thập dữ liệu âm thanh để phát hiện từ nóng. Quá trình thu thập này có thể diễn ra trong nền nhưng không ngăn các hoạt động thu thập dữ liệu âm thanh khác (ví dụ: máy quay video)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Định tuyến âm thanh"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Cho phép ứng dụng trực tiếp kiểm soát định tuyến âm thanh và ghi đè các quyết định về chính sách âm thanh."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"thu thập dữ liệu đầu ra video"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Cho phép ứng dụng thu thập và chuyển hướng dữ liệu đầu ra video."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"thu thập dữ liệu đầu ra video an toàn"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Cho phép ứng dụng sửa đổi cài đặt âm thanh chung chẳng hạn như âm lượng và loa nào được sử dụng cho thiết bị ra."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ghi âm"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Cho phép ứng dụng ghi âm bằng micrô. Quyền này cho phép ứng dụng ghi âm bất kỳ lúc nào mà không cần sự xác nhận của bạn."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"liên lạc qua sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Cho phép ứng dụng gửi lệnh đến SIM. Việc này rất nguy hiểm."</string>
<string name="permlab_camera" msgid="3616391919559751192">"chụp ảnh và quay video"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Cho phép ứng dụng chụp ảnh và quay video bằng máy ảnh. Quyền này cho phép ứng dụng sử dụng máy ảnh bất kỳ lúc nào mà không cần sự xác nhận của bạn."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"vô hiệu hóa tính năng phát đèn LED chỉ báo khi máy ảnh đang được sử dụng"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Cho phép ứng dụng kiểm soát tính năng bảo vệ phím."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Quan sát các thay đổi ở trạng thái đáng tin cậy."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Cho phép ứng dụng quan sát các thay đổi ở trạng thái đáng tin cậy."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Cung cấp tác nhân đáng tin cậy."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Cho phép ứng dụng cung cấp tác nhân đáng tin cậy."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Liên kết với một dịch vụ của đại lý đáng tin cậy"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Cho phép ứng dụng liên kết với một dịch vụ của đại lý đáng tin cậy."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Tương tác với hệ thống khôi phục và bản cập nhật"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 5771bd91cd15..234b3d475245 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"允许该应用捕获和重定向音频输出。"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"启动指令检测"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允许应用捕获音频以便检测语音启动指令。捕获操作会在后台进行,但不会妨碍其他音频捕获工具(例如摄像机)。"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"音频路由"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"允许应用直接控制音频路由以及覆盖音频政策决策。"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"捕获视频输出"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"允许该应用捕获和重定向视频输出。"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"捕获安全视频输出"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允许该应用修改全局音频设置,例如音量和用于输出的扬声器。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"录音"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"允许该应用使用麦克风录制音频。此权限可让该应用不经您的确认即可随时录制音频。"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM卡通信"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"允许应用向SIM卡发送命令(此权限具有很高的危险性)。"</string>
<string name="permlab_camera" msgid="3616391919559751192">"拍摄照片和视频"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"允许该应用使用相机拍摄照片和视频。此权限可让该应用随时使用相机,而无需您的确认。"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"在相机使用过程中停用传输指示灯 LED"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"允许应用控制锁屏。"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"检测信任状态的变化。"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"允许应用检测信任状态的变化。"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"提供信任的代理。"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"允许应用提供信任的代理。"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"绑定至信任的代理服务"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允许应用绑定至信任的代理服务。"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"与更新和恢复系统互动"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index cd0fe617c4fc..b1474e6f50b4 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"允許應用程式擷取及重新導向音頻輸出。"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"啟動字詞偵測"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允許應用程式擷取啟動字詞偵測的音頻。擷取操作可以在背景執行,但並未阻止其他音頻擷取 (例如攝錄機)。"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"音效檔案路由"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"允許應用程式直接控制音效檔案路由及覆寫音效檔案政策決定。"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"擷取視頻輸出"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"允許應用程式擷取及重新導向視頻輸出。"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"擷取安全視頻輸出"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允許應用程式修改全域音頻設定,例如音量和用於輸出的喇叭。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音效"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"允許應用程式使用麥克風錄音。這項權限允許應用程式隨時錄音,而不需經您確認。"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 卡通訊"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"允許應用程式傳送指令到 SIM 卡。這項操作具有高危險性。"</string>
<string name="permlab_camera" msgid="3616391919559751192">"拍照和拍攝影片"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"允許應用程式使用相機拍照和錄影。這項權限允許應用程式隨時使用相機,而不需經您確認。"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"使用相機時停用傳輸指示燈"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"允許應用程式控制鍵盤鎖。"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"聽取信任狀態變更。"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"允許應用程式聽取信任狀態的變更。"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"提供信任的代理程式。"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"允許應用程式提供信任的代理程式。"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"繫結至信任的代理程式服務"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允許應用程式繫結至信任的代理程式服務。"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"與更新和復原系統互動"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index aac387a24dd8..0e7bfa8b3787 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"允許應用程式擷取及重新導向音訊輸出。"</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"啟動字詞偵測"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允許應用程式擷取音訊用於啟動字詞偵測。擷取作業可在背景執行,但並未禁止使用其他音訊擷取工具 (例如攝錄影機)。"</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"音訊路由"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"允許應用程式直接控制音訊路由及覆寫音訊政策決定。"</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"擷取視訊輸出"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"允許應用程式擷取及重新導向視訊輸出。"</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"擷取安全視訊輸出"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允許應用程式修改全域音訊設定,例如音量和用來輸出的喇叭。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音訊"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"允許應用程式使用麥克風錄音。這項權限可讓應用程式隨時錄音,不需經過您的確認。"</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 卡通訊"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"允許應用程式傳送指令到 SIM 卡。這麼做非常危險。"</string>
<string name="permlab_camera" msgid="3616391919559751192">"拍攝相片和影片"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"允許應用程式使用相機拍照和錄影。這項權限可讓應用程式隨時使用相機,而不需請求您進行確認。"</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"使用攝影機時停用傳輸指示器 LED"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"允許應用程式控制鍵盤鎖。"</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"接聽信任狀態變更。"</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"允許應用程式接聽信任狀態變更。"</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"提供信任的代理程式。"</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"允許應用程式提供信任的代理程式。"</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"繫結至信任的代理程式服務"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允許應用程式繫結至信任的代理程式服務。"</string>
<string name="permlab_recovery" msgid="3157024487744125846">"與更新和還原系統互動"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index ef250100aeab..ff1bc4081d1d 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -520,6 +520,8 @@
<string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Kuvumela uhlelo lokusebenza ukuba lushuthe futhi luqondise kabusha okukhipha umsindo."</string>
<string name="permlab_captureAudioHotword" msgid="1890553935650349808">"Ukutholwa kwe-Hotword"</string>
<string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"Ivumela uhlelo lokusebenza ukuthi lishuthele umsindo ukutholwa kwe-Hotword. Ukushutha kungenzeka ngemuva kodwa akuvimbeli okunye ukushutha komsindo (isb. i-Camcorder)."</string>
+ <string name="permlab_modifyAudioRouting" msgid="7738060354490807723">"Umazila womsindo"</string>
+ <string name="permdesc_modifyAudioRouting" msgid="7205731074267199735">"Ivumela uhlelo lokusebenza ukulawla ngqo umzila womsindo nokubhala ngaphezulu izinqumo zenqubomgomo zomsindo."</string>
<string name="permlab_captureVideoOutput" msgid="2246828773589094023">"shutha okokukhipha ividiyo"</string>
<string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Kuvumela uhlelo lokusebenza ukuba lushuthe futhi luqondise kabusha okukhipha ividiyo."</string>
<string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"shutha okukhipha ividiyo ephephile"</string>
@@ -530,8 +532,6 @@
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ivumela uhlelo lokusebenza ukushintsha izilungiselelo zomsindo we-global njengevolomu nokuthi isiphi isipika esisetshenziselwa okukhiphayo."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"qopha umsindo"</string>
<string name="permdesc_recordAudio" msgid="4906839301087980680">"Ivumela uhlelo lokusebenza ukurekhoda umsindo nge-microphone. Le mvume ivumela uhlelo lokusebenza ukuqopha umsindo noma kunini ngaphandle kokuqinisekisa kwakho."</string>
- <string name="permlab_sim_communication" msgid="1180265879464893029">"uxhumano le-sim"</string>
- <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ivumela uhlelo lokusebenza ukuthumela imiyalo ku-SIM. Lokhu kuyingozi kakhulu."</string>
<string name="permlab_camera" msgid="3616391919559751192">"thatha izithombe namavidiyo"</string>
<string name="permdesc_camera" msgid="8497216524735535009">"Ivumela uhlelo lokusebenza ukuthatha izithombe namavidiyo ngekhamera. Le mvume ivumela uhlelo lokusebenza ukusebenzisa ikhamera nganoma isiphi isikhathi ngaphandle kwemvume yakho."</string>
<string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"khubaza i-LED yesikhombi sokudlulisa uma ikhamera isebenza"</string>
@@ -1356,6 +1356,8 @@
<string name="permdesc_control_keyguard" msgid="3043732290518629061">"Ivumela uhlelo lokusebenza ukuthi lulawule ukhiye wokuqapha."</string>
<string name="permlab_trust_listener" msgid="1765718054003704476">"Lalela izinguquko zesimo sokuthemba."</string>
<string name="permdesc_trust_listener" msgid="8233895334214716864">"Ivumela uhlelo lokusebenza ukuthi lilalelele izinguquko kusimo sethemba."</string>
+ <string name="permlab_provide_trust_agent" msgid="5465587586091358316">"Nikeza umsebenzeli owethembekile."</string>
+ <string name="permdesc_provide_trust_agent" msgid="3865702641053068148">"Ivumela uhlelo lokusebenza ukunikeza umsebenzeli owethembekile."</string>
<string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bophezela kusevisi yomenzeli wethemba"</string>
<string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ivumela uhlelo lokusebenza ukuthi libophezeleke kusevisi yomenzeli wethemba."</string>
<string name="permlab_recovery" msgid="3157024487744125846">"Ixhumana nesibuyekezo nesistimu yokutakula"</string>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 1de26c72621b..c3036d57de1b 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -299,188 +299,188 @@
<item>@drawable/quickcontact_badge_overlay_normal_light</item>
<item>@drawable/quickcontact_badge_overlay_pressed_light</item>
- <!-- Quantum assets -->
- <item>@drawable/ab_share_pack_qntm_alpha</item>
- <item>@drawable/ab_solid_shadow_qntm_alpha</item>
- <item>@drawable/btn_cab_done_qntm_alpha</item>
- <item>@drawable/btn_check_to_off_qntm_000</item>
- <item>@drawable/btn_check_to_off_qntm_001</item>
- <item>@drawable/btn_check_to_off_qntm_002</item>
- <item>@drawable/btn_check_to_off_qntm_003</item>
- <item>@drawable/btn_check_to_off_qntm_004</item>
- <item>@drawable/btn_check_to_off_qntm_005</item>
- <item>@drawable/btn_check_to_off_qntm_006</item>
- <item>@drawable/btn_check_to_off_qntm_007</item>
- <item>@drawable/btn_check_to_off_qntm_008</item>
- <item>@drawable/btn_check_to_off_qntm_009</item>
- <item>@drawable/btn_check_to_off_qntm_010</item>
- <item>@drawable/btn_check_to_off_qntm_011</item>
- <item>@drawable/btn_check_to_off_qntm_012</item>
- <item>@drawable/btn_check_to_off_qntm_013</item>
- <item>@drawable/btn_check_to_off_qntm_014</item>
- <item>@drawable/btn_check_to_off_qntm_015</item>
- <item>@drawable/btn_check_to_on_qntm_000</item>
- <item>@drawable/btn_check_to_on_qntm_001</item>
- <item>@drawable/btn_check_to_on_qntm_002</item>
- <item>@drawable/btn_check_to_on_qntm_003</item>
- <item>@drawable/btn_check_to_on_qntm_004</item>
- <item>@drawable/btn_check_to_on_qntm_005</item>
- <item>@drawable/btn_check_to_on_qntm_006</item>
- <item>@drawable/btn_check_to_on_qntm_007</item>
- <item>@drawable/btn_check_to_on_qntm_008</item>
- <item>@drawable/btn_check_to_on_qntm_009</item>
- <item>@drawable/btn_check_to_on_qntm_010</item>
- <item>@drawable/btn_check_to_on_qntm_011</item>
- <item>@drawable/btn_check_to_on_qntm_012</item>
- <item>@drawable/btn_check_to_on_qntm_013</item>
- <item>@drawable/btn_check_to_on_qntm_014</item>
- <item>@drawable/btn_check_to_on_qntm_015</item>
- <item>@drawable/btn_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00000_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00001_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00002_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00003_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00004_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00005_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00006_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00007_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00008_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00009_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00010_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00011_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00012_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00013_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00014_qntm_alpha</item>
- <item>@drawable/btn_radio_anim_00015_qntm_alpha</item>
- <item>@drawable/btn_radio_to_off_qntm_000</item>
- <item>@drawable/btn_radio_to_off_qntm_001</item>
- <item>@drawable/btn_radio_to_off_qntm_002</item>
- <item>@drawable/btn_radio_to_off_qntm_003</item>
- <item>@drawable/btn_radio_to_off_qntm_004</item>
- <item>@drawable/btn_radio_to_off_qntm_005</item>
- <item>@drawable/btn_radio_to_off_qntm_006</item>
- <item>@drawable/btn_radio_to_off_qntm_007</item>
- <item>@drawable/btn_radio_to_off_qntm_008</item>
- <item>@drawable/btn_radio_to_off_qntm_009</item>
- <item>@drawable/btn_radio_to_off_qntm_010</item>
- <item>@drawable/btn_radio_to_off_qntm_011</item>
- <item>@drawable/btn_radio_to_off_qntm_012</item>
- <item>@drawable/btn_radio_to_off_qntm_013</item>
- <item>@drawable/btn_radio_to_off_qntm_014</item>
- <item>@drawable/btn_radio_to_off_qntm_015</item>
- <item>@drawable/btn_radio_to_on_qntm_000</item>
- <item>@drawable/btn_radio_to_on_qntm_001</item>
- <item>@drawable/btn_radio_to_on_qntm_002</item>
- <item>@drawable/btn_radio_to_on_qntm_003</item>
- <item>@drawable/btn_radio_to_on_qntm_004</item>
- <item>@drawable/btn_radio_to_on_qntm_005</item>
- <item>@drawable/btn_radio_to_on_qntm_006</item>
- <item>@drawable/btn_radio_to_on_qntm_007</item>
- <item>@drawable/btn_radio_to_on_qntm_008</item>
- <item>@drawable/btn_radio_to_on_qntm_009</item>
- <item>@drawable/btn_radio_to_on_qntm_010</item>
- <item>@drawable/btn_radio_to_on_qntm_011</item>
- <item>@drawable/btn_radio_to_on_qntm_012</item>
- <item>@drawable/btn_radio_to_on_qntm_013</item>
- <item>@drawable/btn_radio_to_on_qntm_014</item>
- <item>@drawable/btn_radio_to_on_qntm_015</item>
- <item>@drawable/btn_rating_star_off_qntm_alpha</item>
- <item>@drawable/btn_rating_star_on_qntm_alpha</item>
- <item>@drawable/btn_star_qntm_alpha</item>
- <item>@drawable/btn_switch_to_off_qntm_000</item>
- <item>@drawable/btn_switch_to_off_qntm_001</item>
- <item>@drawable/btn_switch_to_off_qntm_002</item>
- <item>@drawable/btn_switch_to_off_qntm_003</item>
- <item>@drawable/btn_switch_to_off_qntm_004</item>
- <item>@drawable/btn_switch_to_off_qntm_005</item>
- <item>@drawable/btn_switch_to_off_qntm_006</item>
- <item>@drawable/btn_switch_to_off_qntm_007</item>
- <item>@drawable/btn_switch_to_off_qntm_008</item>
- <item>@drawable/btn_switch_to_off_qntm_009</item>
- <item>@drawable/btn_switch_to_off_qntm_010</item>
- <item>@drawable/btn_switch_to_off_qntm_011</item>
- <item>@drawable/btn_switch_to_off_qntm_012</item>
- <item>@drawable/btn_switch_to_off_qntm_013</item>
- <item>@drawable/btn_switch_to_off_qntm_014</item>
- <item>@drawable/btn_switch_to_on_qntm_000</item>
- <item>@drawable/btn_switch_to_on_qntm_001</item>
- <item>@drawable/btn_switch_to_on_qntm_002</item>
- <item>@drawable/btn_switch_to_on_qntm_003</item>
- <item>@drawable/btn_switch_to_on_qntm_004</item>
- <item>@drawable/btn_switch_to_on_qntm_005</item>
- <item>@drawable/btn_switch_to_on_qntm_006</item>
- <item>@drawable/btn_switch_to_on_qntm_007</item>
- <item>@drawable/btn_switch_to_on_qntm_008</item>
- <item>@drawable/btn_switch_to_on_qntm_009</item>
- <item>@drawable/btn_switch_to_on_qntm_010</item>
- <item>@drawable/btn_switch_to_on_qntm_011</item>
- <item>@drawable/btn_switch_to_on_qntm_012</item>
- <item>@drawable/btn_switch_to_on_qntm_013</item>
- <item>@drawable/btn_switch_to_on_qntm_014</item>
- <item>@drawable/btn_toggle_indicator_qntm_alpha</item>
- <item>@drawable/btn_toggle_qntm_alpha</item>
- <item>@drawable/expander_close_qntm_alpha</item>
- <item>@drawable/expander_open_qntm_alpha</item>
- <item>@drawable/fastscroll_thumb_qntm_alpha</item>
- <item>@drawable/fastscroll_track_qntm_alpha</item>
- <item>@drawable/ic_ab_back_qntm_am_alpha</item>
- <item>@drawable/ic_cab_done_qntm_alpha</item>
- <item>@drawable/ic_clear_qntm_alpha</item>
- <item>@drawable/ic_commit_search_api_qntm_alpha</item>
- <item>@drawable/ic_dialog_alert_qntm_alpha</item>
- <item>@drawable/ic_find_next_qntm_alpha</item>
- <item>@drawable/ic_find_previous_qntm_alpha</item>
- <item>@drawable/ic_go_search_api_qntm_alpha</item>
- <item>@drawable/ic_media_route_disabled_qntm_alpha</item>
- <item>@drawable/ic_media_route_off_qntm_alpha</item>
- <item>@drawable/ic_media_route_on_0_qntm_alpha</item>
- <item>@drawable/ic_media_route_on_1_qntm_alpha</item>
- <item>@drawable/ic_media_route_on_2_qntm_alpha</item>
- <item>@drawable/ic_media_route_on_qntm_alpha</item>
- <item>@drawable/ic_menu_copy_qntm_am_alpha</item>
- <item>@drawable/ic_menu_cut_qntm_alpha</item>
- <item>@drawable/ic_menu_find_qntm_alpha</item>
- <item>@drawable/ic_menu_moreoverflow_qntm_alpha</item>
- <item>@drawable/ic_menu_paste_qntm_am_alpha</item>
- <item>@drawable/ic_menu_search_qntm_alpha</item>
- <item>@drawable/ic_menu_selectall_qntm_alpha</item>
- <item>@drawable/ic_menu_share_qntm_alpha</item>
- <item>@drawable/ic_search_api_qntm_alpha</item>
- <item>@drawable/ic_voice_search_api_qntm_alpha</item>
- <item>@drawable/list_divider_qntm_alpha</item>
- <item>@drawable/list_section_divider_qntm_alpha</item>
- <item>@drawable/popup_background_qntm_mult</item>
- <item>@drawable/progress_primary_qntm_alpha</item>
- <item>@drawable/progress_qntm_alpha</item>
- <item>@drawable/scrollbar_handle_qntm_alpha</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_000</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_001</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_002</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_003</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_004</item>
- <item>@drawable/scrubber_control_from_pressed_qntm_005</item>
- <item>@drawable/scrubber_control_off_pressed_qntm_alpha</item>
- <item>@drawable/scrubber_control_off_qntm_alpha</item>
- <item>@drawable/scrubber_control_on_pressed_qntm_alpha</item>
- <item>@drawable/scrubber_control_on_qntm_alpha</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_000</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_001</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_002</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_003</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_004</item>
- <item>@drawable/scrubber_control_to_pressed_qntm_005</item>
- <item>@drawable/scrubber_primary_qntm_alpha</item>
- <item>@drawable/scrubber_track_qntm_alpha</item>
- <item>@drawable/spinner_qntm_am_alpha</item>
- <item>@drawable/switch_track_qntm_alpha</item>
- <item>@drawable/text_cursor_qntm_alpha</item>
- <item>@drawable/textfield_activated_qntm_alpha</item>
- <item>@drawable/textfield_default_qntm_alpha</item>
- <item>@drawable/textfield_search_activated_qntm_alpha</item>
- <item>@drawable/textfield_search_default_qntm_alpha</item>
- <item>@drawable/text_select_handle_left_qntm_alpha</item>
- <item>@drawable/text_select_handle_middle_qntm_alpha</item>
- <item>@drawable/text_select_handle_right_qntm_alpha</item>
+ <!-- Material assets -->
+ <item>@drawable/ab_share_pack_mtrl_alpha</item>
+ <item>@drawable/ab_solid_shadow_mtrl_alpha</item>
+ <item>@drawable/btn_cab_done_mtrl_alpha</item>
+ <item>@drawable/btn_check_to_off_mtrl_000</item>
+ <item>@drawable/btn_check_to_off_mtrl_001</item>
+ <item>@drawable/btn_check_to_off_mtrl_002</item>
+ <item>@drawable/btn_check_to_off_mtrl_003</item>
+ <item>@drawable/btn_check_to_off_mtrl_004</item>
+ <item>@drawable/btn_check_to_off_mtrl_005</item>
+ <item>@drawable/btn_check_to_off_mtrl_006</item>
+ <item>@drawable/btn_check_to_off_mtrl_007</item>
+ <item>@drawable/btn_check_to_off_mtrl_008</item>
+ <item>@drawable/btn_check_to_off_mtrl_009</item>
+ <item>@drawable/btn_check_to_off_mtrl_010</item>
+ <item>@drawable/btn_check_to_off_mtrl_011</item>
+ <item>@drawable/btn_check_to_off_mtrl_012</item>
+ <item>@drawable/btn_check_to_off_mtrl_013</item>
+ <item>@drawable/btn_check_to_off_mtrl_014</item>
+ <item>@drawable/btn_check_to_off_mtrl_015</item>
+ <item>@drawable/btn_check_to_on_mtrl_000</item>
+ <item>@drawable/btn_check_to_on_mtrl_001</item>
+ <item>@drawable/btn_check_to_on_mtrl_002</item>
+ <item>@drawable/btn_check_to_on_mtrl_003</item>
+ <item>@drawable/btn_check_to_on_mtrl_004</item>
+ <item>@drawable/btn_check_to_on_mtrl_005</item>
+ <item>@drawable/btn_check_to_on_mtrl_006</item>
+ <item>@drawable/btn_check_to_on_mtrl_007</item>
+ <item>@drawable/btn_check_to_on_mtrl_008</item>
+ <item>@drawable/btn_check_to_on_mtrl_009</item>
+ <item>@drawable/btn_check_to_on_mtrl_010</item>
+ <item>@drawable/btn_check_to_on_mtrl_011</item>
+ <item>@drawable/btn_check_to_on_mtrl_012</item>
+ <item>@drawable/btn_check_to_on_mtrl_013</item>
+ <item>@drawable/btn_check_to_on_mtrl_014</item>
+ <item>@drawable/btn_check_to_on_mtrl_015</item>
+ <item>@drawable/btn_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00000_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00001_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00002_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00003_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00004_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00005_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00006_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00007_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00008_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00009_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00010_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00011_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00012_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00013_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00014_mtrl_alpha</item>
+ <item>@drawable/btn_radio_anim_00015_mtrl_alpha</item>
+ <item>@drawable/btn_radio_to_off_mtrl_000</item>
+ <item>@drawable/btn_radio_to_off_mtrl_001</item>
+ <item>@drawable/btn_radio_to_off_mtrl_002</item>
+ <item>@drawable/btn_radio_to_off_mtrl_003</item>
+ <item>@drawable/btn_radio_to_off_mtrl_004</item>
+ <item>@drawable/btn_radio_to_off_mtrl_005</item>
+ <item>@drawable/btn_radio_to_off_mtrl_006</item>
+ <item>@drawable/btn_radio_to_off_mtrl_007</item>
+ <item>@drawable/btn_radio_to_off_mtrl_008</item>
+ <item>@drawable/btn_radio_to_off_mtrl_009</item>
+ <item>@drawable/btn_radio_to_off_mtrl_010</item>
+ <item>@drawable/btn_radio_to_off_mtrl_011</item>
+ <item>@drawable/btn_radio_to_off_mtrl_012</item>
+ <item>@drawable/btn_radio_to_off_mtrl_013</item>
+ <item>@drawable/btn_radio_to_off_mtrl_014</item>
+ <item>@drawable/btn_radio_to_off_mtrl_015</item>
+ <item>@drawable/btn_radio_to_on_mtrl_000</item>
+ <item>@drawable/btn_radio_to_on_mtrl_001</item>
+ <item>@drawable/btn_radio_to_on_mtrl_002</item>
+ <item>@drawable/btn_radio_to_on_mtrl_003</item>
+ <item>@drawable/btn_radio_to_on_mtrl_004</item>
+ <item>@drawable/btn_radio_to_on_mtrl_005</item>
+ <item>@drawable/btn_radio_to_on_mtrl_006</item>
+ <item>@drawable/btn_radio_to_on_mtrl_007</item>
+ <item>@drawable/btn_radio_to_on_mtrl_008</item>
+ <item>@drawable/btn_radio_to_on_mtrl_009</item>
+ <item>@drawable/btn_radio_to_on_mtrl_010</item>
+ <item>@drawable/btn_radio_to_on_mtrl_011</item>
+ <item>@drawable/btn_radio_to_on_mtrl_012</item>
+ <item>@drawable/btn_radio_to_on_mtrl_013</item>
+ <item>@drawable/btn_radio_to_on_mtrl_014</item>
+ <item>@drawable/btn_radio_to_on_mtrl_015</item>
+ <item>@drawable/btn_rating_star_off_mtrl_alpha</item>
+ <item>@drawable/btn_rating_star_on_mtrl_alpha</item>
+ <item>@drawable/btn_star_mtrl_alpha</item>
+ <item>@drawable/btn_switch_to_off_mtrl_000</item>
+ <item>@drawable/btn_switch_to_off_mtrl_001</item>
+ <item>@drawable/btn_switch_to_off_mtrl_002</item>
+ <item>@drawable/btn_switch_to_off_mtrl_003</item>
+ <item>@drawable/btn_switch_to_off_mtrl_004</item>
+ <item>@drawable/btn_switch_to_off_mtrl_005</item>
+ <item>@drawable/btn_switch_to_off_mtrl_006</item>
+ <item>@drawable/btn_switch_to_off_mtrl_007</item>
+ <item>@drawable/btn_switch_to_off_mtrl_008</item>
+ <item>@drawable/btn_switch_to_off_mtrl_009</item>
+ <item>@drawable/btn_switch_to_off_mtrl_010</item>
+ <item>@drawable/btn_switch_to_off_mtrl_011</item>
+ <item>@drawable/btn_switch_to_off_mtrl_012</item>
+ <item>@drawable/btn_switch_to_off_mtrl_013</item>
+ <item>@drawable/btn_switch_to_off_mtrl_014</item>
+ <item>@drawable/btn_switch_to_on_mtrl_000</item>
+ <item>@drawable/btn_switch_to_on_mtrl_001</item>
+ <item>@drawable/btn_switch_to_on_mtrl_002</item>
+ <item>@drawable/btn_switch_to_on_mtrl_003</item>
+ <item>@drawable/btn_switch_to_on_mtrl_004</item>
+ <item>@drawable/btn_switch_to_on_mtrl_005</item>
+ <item>@drawable/btn_switch_to_on_mtrl_006</item>
+ <item>@drawable/btn_switch_to_on_mtrl_007</item>
+ <item>@drawable/btn_switch_to_on_mtrl_008</item>
+ <item>@drawable/btn_switch_to_on_mtrl_009</item>
+ <item>@drawable/btn_switch_to_on_mtrl_010</item>
+ <item>@drawable/btn_switch_to_on_mtrl_011</item>
+ <item>@drawable/btn_switch_to_on_mtrl_012</item>
+ <item>@drawable/btn_switch_to_on_mtrl_013</item>
+ <item>@drawable/btn_switch_to_on_mtrl_014</item>
+ <item>@drawable/btn_toggle_indicator_mtrl_alpha</item>
+ <item>@drawable/btn_toggle_mtrl_alpha</item>
+ <item>@drawable/expander_close_mtrl_alpha</item>
+ <item>@drawable/expander_open_mtrl_alpha</item>
+ <item>@drawable/fastscroll_thumb_mtrl_alpha</item>
+ <item>@drawable/fastscroll_track_mtrl_alpha</item>
+ <item>@drawable/ic_ab_back_mtrl_am_alpha</item>
+ <item>@drawable/ic_cab_done_mtrl_alpha</item>
+ <item>@drawable/ic_clear_mtrl_alpha</item>
+ <item>@drawable/ic_commit_search_api_mtrl_alpha</item>
+ <item>@drawable/ic_dialog_alert_mtrl_alpha</item>
+ <item>@drawable/ic_find_next_mtrl_alpha</item>
+ <item>@drawable/ic_find_previous_mtrl_alpha</item>
+ <item>@drawable/ic_go_search_api_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_disabled_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_off_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_on_0_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_on_1_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_on_2_mtrl_alpha</item>
+ <item>@drawable/ic_media_route_on_mtrl_alpha</item>
+ <item>@drawable/ic_menu_copy_mtrl_am_alpha</item>
+ <item>@drawable/ic_menu_cut_mtrl_alpha</item>
+ <item>@drawable/ic_menu_find_mtrl_alpha</item>
+ <item>@drawable/ic_menu_moreoverflow_mtrl_alpha</item>
+ <item>@drawable/ic_menu_paste_mtrl_am_alpha</item>
+ <item>@drawable/ic_menu_search_mtrl_alpha</item>
+ <item>@drawable/ic_menu_selectall_mtrl_alpha</item>
+ <item>@drawable/ic_menu_share_mtrl_alpha</item>
+ <item>@drawable/ic_search_api_mtrl_alpha</item>
+ <item>@drawable/ic_voice_search_api_mtrl_alpha</item>
+ <item>@drawable/list_divider_mtrl_alpha</item>
+ <item>@drawable/list_section_divider_mtrl_alpha</item>
+ <item>@drawable/popup_background_mtrl_mult</item>
+ <item>@drawable/progress_primary_mtrl_alpha</item>
+ <item>@drawable/progress_mtrl_alpha</item>
+ <item>@drawable/scrollbar_handle_mtrl_alpha</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_000</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_001</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_002</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_003</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_004</item>
+ <item>@drawable/scrubber_control_from_pressed_mtrl_005</item>
+ <item>@drawable/scrubber_control_off_pressed_mtrl_alpha</item>
+ <item>@drawable/scrubber_control_off_mtrl_alpha</item>
+ <item>@drawable/scrubber_control_on_pressed_mtrl_alpha</item>
+ <item>@drawable/scrubber_control_on_mtrl_alpha</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_000</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_001</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_002</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_003</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_004</item>
+ <item>@drawable/scrubber_control_to_pressed_mtrl_005</item>
+ <item>@drawable/scrubber_primary_mtrl_alpha</item>
+ <item>@drawable/scrubber_track_mtrl_alpha</item>
+ <item>@drawable/spinner_mtrl_am_alpha</item>
+ <item>@drawable/switch_track_mtrl_alpha</item>
+ <item>@drawable/text_cursor_mtrl_alpha</item>
+ <item>@drawable/textfield_activated_mtrl_alpha</item>
+ <item>@drawable/textfield_default_mtrl_alpha</item>
+ <item>@drawable/textfield_search_activated_mtrl_alpha</item>
+ <item>@drawable/textfield_search_default_mtrl_alpha</item>
+ <item>@drawable/text_select_handle_left_mtrl_alpha</item>
+ <item>@drawable/text_select_handle_middle_mtrl_alpha</item>
+ <item>@drawable/text_select_handle_right_mtrl_alpha</item>
</array>
<!-- Do not translate. These are all of the color state list resources that should be
@@ -518,17 +518,17 @@
<item>#00000000</item>
<item>#ffffffff</item>
- <!-- Quantum color state lists -->
- <item>@color/background_cache_hint_selector_quantum_dark</item>
- <item>@color/background_cache_hint_selector_quantum_light</item>
- <item>@color/btn_default_quantum_dark</item>
- <item>@color/btn_default_quantum_light</item>
- <item>@color/primary_text_disable_only_quantum_dark</item>
- <item>@color/primary_text_disable_only_quantum_light</item>
- <item>@color/primary_text_quantum_dark</item>
- <item>@color/primary_text_quantum_light</item>
- <item>@color/search_url_text_quantum_dark</item>
- <item>@color/search_url_text_quantum_light</item>
+ <!-- Material color state lists -->
+ <item>@color/background_cache_hint_selector_material_dark</item>
+ <item>@color/background_cache_hint_selector_material_light</item>
+ <item>@color/btn_default_material_dark</item>
+ <item>@color/btn_default_material_light</item>
+ <item>@color/primary_text_disable_only_material_dark</item>
+ <item>@color/primary_text_disable_only_material_light</item>
+ <item>@color/primary_text_material_dark</item>
+ <item>@color/primary_text_material_light</item>
+ <item>@color/search_url_text_material_dark</item>
+ <item>@color/search_url_text_material_light</item>
</array>
<!-- Used in LocalePicker -->
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 08c168050c34..ed648fbf2f15 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -4556,8 +4556,8 @@
<attr name="drawable" />
</declare-styleable>
- <!-- Drawable used to render the Quantum progress indicator. -->
- <declare-styleable name="QuantumProgressDrawable">
+ <!-- Drawable used to render the Material progress indicator. -->
+ <declare-styleable name="MaterialProgressDrawable">
<attr name="visible" />
<attr name="thickness" />
<attr name="innerRadius" />
@@ -4669,12 +4669,8 @@
<!-- Drawable used to show animated touch feedback. -->
<declare-styleable name="RippleDrawable">
- <!-- The tint to use for ripple effects. This attribute is required. -->
- <attr name="tint" />
- <!-- Specifies the Porter-Duff blending mode used to apply the tint. The default value is src_atop, which draws over the opaque parts of the drawable. -->
- <attr name="tintMode" />
- <!-- Whether to pin ripple effects to the center of the drawable. Default value is false. -->
- <attr name="pinned" format="boolean" />
+ <!-- The color to use for ripple effects. This attribute is required. -->
+ <attr name="color" />
</declare-styleable>
<declare-styleable name="ScaleDrawable">
@@ -6722,5 +6718,19 @@
<!-- Component name of an activity that allows the user to modify
the settings for this service. -->
<attr name="settingsActivity" />
+ <!-- Type of this service. -->
+ <attr name="tvInputType">
+ <!-- Should be in sync with constant values defined in
+ {@link android.media.tv.TvInputInfo}. -->
+
+ <!-- Virtual input (default) -->
+ <enum name="virtual" value="0" />
+ <!-- HDMI -->
+ <enum name="hdmi" value="1" />
+ <!-- Built-in tuner -->
+ <enum name="tuner" value="2" />
+ <!-- Pass-through -->
+ <enum name="passthrough" value="3" />
+ </attr>
</declare-styleable>
</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index acfbe2db28e1..814d8fc0c800 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -898,16 +898,22 @@
android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} to every Intent used to launch
the activity.
- <p>The documentLaunchMode attribute may be assigned one of three values, "none",
- "intoExisting" and "always", described in detail below. For values other than
- <code>none</code> the activity must be defined with
- {@link android.R.attr#launchMode} <code>standard</code> or <code>singleTop</code>.
+ <p>The documentLaunchMode attribute may be assigned one of four values, "none",
+ "intoExisting", "always" and "never", described in detail below. For values other than
+ <code>none</code> and <code>never</code> the activity must be defined with
+ {@link android.R.attr#launchMode} <code>standard</code>.
If this attribute is not specified, <code>none</code> will be used.
Note that <code>none</code> can be overridden at run time if the Intent used
- to launch it contains the flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}.
+ to launch it contains the flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
+ Intent.FLAG_ACTIVITY_NEW_DOCUMENT}.
Similarly <code>intoExisting</code> will be overridden by the flag
- {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} combined with
- {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}. -->
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
+ Intent.FLAG_ACTIVITY_NEW_DOCUMENT} combined with
+ {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK
+ Intent.FLAG_ACTIVITY_MULTIPLE_TASK}. If the value of
+ documentLaunchModes is <code>never</code> then any use of
+.........{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
+ Intent.FLAG_ACTIVITY_NEW_DOCUMENT} to launch this activity will be ignored. -->
<attr name="documentLaunchMode">
<!-- The default mode, which will create a new task only when
{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
@@ -931,8 +937,21 @@
and {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK
Intent.FLAG_ACTIVITY_MULTIPLE_TASK} both set. -->
<enum name="always" value="2" />
+ <!-- This activity will not be launched into a new document even if the Intent contains
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT
+ Intent.FLAG_ACTIVITY_NEW_DOCUMENT}. This gives the activity writer ultimate
+ control over how their activity is used. Note that applications prior to api
+ 21 will default to documentLaunchMode="none" so only activities that explicitly
+ opt out with <code>"never"</code> may do so. -->
+ <enum name="never" value="3" />
</attr>
+ <!-- The maximum number of entries of tasks rooted at this activity in the recent task list.
+ When this number of entries is reached the least recently used instance of this activity
+ will be removed from recents. The value will be clamped between 1 and 100 inclusive.
+ The default value for this if it is not specified is 15. -->
+ <attr name="maxRecents" format="integer" />
+
<!-- Tasks launched by activities with this attribute will remain in the recent tasks
list until the last activity in the task is completed. When that happens the task
will be automatically removed from the recent tasks list.
@@ -1607,6 +1626,7 @@
<attr name="persistable" />
<attr name="allowEmbedded" />
<attr name="documentLaunchMode" />
+ <attr name="maxRecents" />
<attr name="autoRemoveFromRecents" />
</declare-styleable>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 9bf2ce8b0f47..9f6c7ad81089 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -135,7 +135,6 @@
<color name="notification_action_legacy_color_filter">#ff555555</color>
<color name="notification_media_action_bg">#00000000</color>
- <color name="notification_media_info_bg">#40FFFFFF</color>
<color name="notification_media_progress">#FFFFFFFF</color>
<!-- Keyguard colors -->
diff --git a/core/res/res/values/colors_holo.xml b/core/res/res/values/colors_holo.xml
index d1f4e3830d67..97b48031cc25 100644
--- a/core/res/res/values/colors_holo.xml
+++ b/core/res/res/values/colors_holo.xml
@@ -75,7 +75,7 @@
<!-- A really bright Holo shade of gray -->
<color name="holo_gray_bright">#33CCCCCC</color>
- <!-- Forward compatibility for Quantum-style theme colors -->
+ <!-- Forward compatibility for Material-style theme colors -->
<eat-comment />
<color name="holo_primary_dark">#ff000000</color>
diff --git a/core/res/res/values/colors_legacy.xml b/core/res/res/values/colors_legacy.xml
index 48d4b429c2dc..ad22845174e4 100644
--- a/core/res/res/values/colors_legacy.xml
+++ b/core/res/res/values/colors_legacy.xml
@@ -24,7 +24,7 @@
<color name="legacy_selected_highlight">#fff17a0a</color>
<color name="legacy_long_pressed_highlight">#ffffffff</color>
- <!-- Forward compatibility for Quantum-style theme colors -->
+ <!-- Forward compatibility for Material-style theme colors -->
<eat-comment />
<color name="legacy_primary_dark">#ff000000</color>
diff --git a/core/res/res/values/colors_material.xml b/core/res/res/values/colors_material.xml
new file mode 100644
index 000000000000..fdbe0a055ba9
--- /dev/null
+++ b/core/res/res/values/colors_material.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Colors specific to Material themes. -->
+<resources>
+ <color name="background_material_dark">#ff212121</color>
+ <color name="background_material_light">#fffafafa</color>
+
+ <color name="ripple_material_light">#20444444</color>
+ <color name="ripple_material_dark">#20ffffff</color>
+
+ <color name="button_material_dark">#ff5a595b</color>
+ <color name="button_material_light">#ffd6d7d7</color>
+
+ <color name="bright_foreground_material_dark">@color/white</color>
+ <color name="bright_foreground_material_light">@color/black</color>
+ <!-- Black 50% -->
+ <color name="bright_foreground_disabled_material_dark">#80000000</color>
+ <!-- White 50% -->
+ <color name="bright_foreground_disabled_material_light">#80ffffff</color>
+ <color name="bright_foreground_inverse_material_dark">@color/bright_foreground_material_light</color>
+ <color name="bright_foreground_inverse_material_light">@color/bright_foreground_material_dark</color>
+
+ <color name="dim_foreground_material_dark">#ffbebebe</color>
+ <color name="dim_foreground_material_light">#ff323232</color>
+ <color name="dim_foreground_disabled_material_dark">#80bebebe</color>
+ <color name="dim_foreground_disabled_material_light">#80323232</color>
+
+ <color name="hint_foreground_material_dark">@color/bright_foreground_disabled_material_dark</color>
+ <color name="hint_foreground_material_light">@color/bright_foreground_disabled_material_light</color>
+ <!-- TODO: This is 40% alpha on the default accent color. -->
+ <color name="highlighted_text_material_dark">#6640c4ff</color>
+ <!-- TODO: This is 40% alpha on the default accent color. -->
+ <color name="highlighted_text_material_light">#6640c4ff</color>
+
+ <!-- Text & foreground colors -->
+ <eat-comment />
+
+ <!-- Black 87% -->
+ <color name="primary_text_default_material_light">#de000000</color>
+ <!-- Black 54% -->
+ <color name="secondary_text_material_light">#8a000000</color>
+ <!-- Black 54% (TODO: same as secondary?) -->
+ <color name="tertiary_text_material_light">#8a000000</color>
+
+ <!-- White 87% -->
+ <color name="primary_text_default_material_dark">#deffffff</color>
+ <!-- White 38% -->
+ <color name="secondary_text_material_dark">#61ffffff</color>
+ <!-- White 38% (TODO: same as secondary?) -->
+ <color name="tertiary_text_material_dark">#61ffffff</color>
+
+ <!-- Primary & accent colors -->
+ <eat-comment />
+
+ <color name="material_red_100">#fff4c7c3</color>
+ <color name="material_red_300">#ffe67c73</color>
+ <color name="material_red_500">#ffdb4437</color>
+ <color name="material_red_700">#ffc53929</color>
+ <color name="material_red_A200">#ffff5252</color>
+ <color name="material_red_A400">#ffff1744</color>
+
+ <color name="material_blue_100">#ffc6dafc</color>
+ <color name="material_blue_300">#ff7baaf7</color>
+ <color name="material_blue_500">#ff4285f4</color>
+ <color name="material_blue_700">#ff3367d6</color>
+ <color name="material_blue_A200">#ff448aff</color>
+ <color name="material_blue_A400">#ff2979ff</color>
+
+ <color name="material_light_blue_A200">#ff40c4ff</color>
+
+ <color name="material_teal_100">#ffb2ebf2</color>
+ <color name="material_teal_300">#ff4dd0e1</color>
+ <color name="material_teal_500">#ff00bcd4</color>
+ <color name="material_teal_700">#ff0097a7</color>
+ <color name="material_teal_A200">#ff18ffff</color>
+ <color name="material_teal_A400">#ff00e5ff</color>
+
+ <color name="material_green_100">#ffb7e1cd</color>
+ <color name="material_green_300">#ff57bb8a</color>
+ <color name="material_green_500">#ff0f9d58</color>
+ <color name="material_green_700">#ff0b8043</color>
+ <color name="material_green_A200">#ff69f0ae</color>
+ <color name="material_green_A400">#ff00e676</color>
+
+ <color name="material_lime_100">#fff0f4c3</color>
+ <color name="material_lime_300">#ffdce775</color>
+ <color name="material_lime_500">#ffcddc39</color>
+ <color name="material_lime_700">#ffafb42b</color>
+ <color name="material_lime_A200">#ffeeff41</color>
+ <color name="material_lime_A400">#ffc6ff00</color>
+
+ <color name="material_yellow_100">#fffce8b2</color>
+ <color name="material_yellow_300">#fff7cb4d</color>
+ <color name="material_yellow_500">#fff4b400</color>
+ <color name="material_yellow_700">#fff09300</color>
+ <color name="material_yellow_A200">#ffffcd40</color>
+ <color name="material_yellow_A400">#ffffbc00</color>
+
+ <color name="material_orange_100">#ffffe0b2</color>
+ <color name="material_orange_300">#ffffb74d</color>
+ <color name="material_orange_500">#ffff9800</color>
+ <color name="material_orange_700">#fff57c00</color>
+ <color name="material_orange_A200">#ffffab40</color>
+ <color name="material_orange_A400">#ffff9100</color>
+
+ <color name="material_deep_orange_100">#fff4c7c3</color>
+ <color name="material_deep_orange_300">#ffe67c73</color>
+ <color name="material_deep_orange_500">#ffff5722</color>
+ <color name="material_deep_orange_700">#ffc53929</color>
+ <color name="material_deep_orange_A200">#ffff5252</color>
+ <color name="material_deep_orange_A400">#ffff1744</color>
+
+ <!-- Neutral colors -->
+ <eat-comment />
+
+ <color name="material_grey_50">#fffafafa</color>
+ <color name="material_grey_100">#fff5f5f5</color>
+ <color name="material_grey_300">#ffeeeeee</color>
+ <color name="material_grey_500">#ffa3a3a3</color>
+ <color name="material_grey_600">#ff757575</color>
+ <color name="material_grey_700">#ff717171</color>
+ <color name="material_grey_900">#ff212121</color>
+
+ <color name="material_blue_grey_50">#ffeceff1</color>
+ <color name="material_blue_grey_100">#ffcfd8dc</color>
+ <color name="material_blue_grey_300">#ff90a4ae</color>
+ <color name="material_blue_grey_400">#ff78909c</color>
+ <color name="material_blue_grey_500">#ff607d8b</color>
+ <color name="material_blue_grey_600">#ff546e7a</color>
+ <color name="material_blue_grey_700">#ff455a64</color>
+ <color name="material_blue_grey_800">#ff37474f</color>
+ <color name="material_blue_grey_900">#ff263238</color>
+
+ <color name="material_brown_100">#ffd7ccc8</color>
+ <color name="material_brown_300">#ffa1887f</color>
+ <color name="material_brown_500">#ff795548</color>
+ <color name="material_brown_700">#ff5d4037</color>
+
+ <!-- Time picker defaults when no theme is set -->
+ <eat-comment />
+
+ <color name="timepicker_default_background_material">@color/primary_text_default_material_light</color>
+ <color name="timepicker_default_text_color_material">@color/black</color>
+ <color name="timepicker_default_disabled_color_material">@color/bright_foreground_disabled_material_dark</color>
+ <color name="timepicker_default_ampm_selected_background_color_material">@color/material_light_blue_A200</color>
+ <color name="timepicker_default_ampm_unselected_background_color_material">@color/transparent</color>
+ <color name="timepicker_default_selector_color_material">@color/material_light_blue_A200</color>
+ <color name="timepicker_default_numbers_background_color_material">@color/transparent</color>
+</resources>
diff --git a/core/res/res/values/colors_quantum.xml b/core/res/res/values/colors_quantum.xml
deleted file mode 100644
index f49861a517cc..000000000000
--- a/core/res/res/values/colors_quantum.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Colors specific to Quantum themes. -->
-<resources>
- <color name="background_quantum_dark">#ff212121</color>
- <color name="background_quantum_light">#fffafafa</color>
-
- <color name="ripple_quantum_light">#20444444</color>
- <color name="ripple_quantum_dark">#20ffffff</color>
-
- <color name="button_quantum_dark">#ff5a595b</color>
- <color name="button_quantum_light">#ffd6d7d7</color>
-
- <color name="bright_foreground_quantum_dark">@color/white</color>
- <color name="bright_foreground_quantum_light">@color/black</color>
- <!-- Black 50% -->
- <color name="bright_foreground_disabled_quantum_dark">#80000000</color>
- <!-- White 50% -->
- <color name="bright_foreground_disabled_quantum_light">#80ffffff</color>
- <color name="bright_foreground_inverse_quantum_dark">@color/bright_foreground_quantum_light</color>
- <color name="bright_foreground_inverse_quantum_light">@color/bright_foreground_quantum_dark</color>
-
- <color name="dim_foreground_quantum_dark">#ffbebebe</color>
- <color name="dim_foreground_quantum_light">#ff323232</color>
- <color name="dim_foreground_disabled_quantum_dark">#80bebebe</color>
- <color name="dim_foreground_disabled_quantum_light">#80323232</color>
-
- <color name="hint_foreground_quantum_dark">@color/bright_foreground_disabled_quantum_dark</color>
- <color name="hint_foreground_quantum_light">@color/bright_foreground_disabled_quantum_light</color>
- <!-- TODO: This is 40% alpha on the default accent color. -->
- <color name="highlighted_text_quantum_dark">#6640c4ff</color>
- <!-- TODO: This is 40% alpha on the default accent color. -->
- <color name="highlighted_text_quantum_light">#6640c4ff</color>
-
- <!-- Text & foreground colors -->
- <eat-comment />
-
- <!-- Black 87% -->
- <color name="primary_text_default_quantum_light">#de000000</color>
- <!-- Black 54% -->
- <color name="secondary_text_quantum_light">#8a000000</color>
- <!-- Black 54% (TODO: same as secondary?) -->
- <color name="tertiary_text_quantum_light">#8a000000</color>
-
- <!-- White 87% -->
- <color name="primary_text_default_quantum_dark">#deffffff</color>
- <!-- White 38% -->
- <color name="secondary_text_quantum_dark">#61ffffff</color>
- <!-- White 38% (TODO: same as secondary?) -->
- <color name="tertiary_text_quantum_dark">#61ffffff</color>
-
- <!-- Primary & accent colors -->
- <eat-comment />
-
- <color name="quantum_red_100">#fff4c7c3</color>
- <color name="quantum_red_300">#ffe67c73</color>
- <color name="quantum_red_500">#ffdb4437</color>
- <color name="quantum_red_700">#ffc53929</color>
- <color name="quantum_red_A200">#ffff5252</color>
- <color name="quantum_red_A400">#ffff1744</color>
-
- <color name="quantum_blue_100">#ffc6dafc</color>
- <color name="quantum_blue_300">#ff7baaf7</color>
- <color name="quantum_blue_500">#ff4285f4</color>
- <color name="quantum_blue_700">#ff3367d6</color>
- <color name="quantum_blue_A200">#ff448aff</color>
- <color name="quantum_blue_A400">#ff2979ff</color>
-
- <color name="quantum_light_blue_A200">#ff40c4ff</color>
-
- <color name="quantum_teal_100">#ffb2ebf2</color>
- <color name="quantum_teal_300">#ff4dd0e1</color>
- <color name="quantum_teal_500">#ff00bcd4</color>
- <color name="quantum_teal_700">#ff0097a7</color>
- <color name="quantum_teal_A200">#ff18ffff</color>
- <color name="quantum_teal_A400">#ff00e5ff</color>
-
- <color name="quantum_green_100">#ffb7e1cd</color>
- <color name="quantum_green_300">#ff57bb8a</color>
- <color name="quantum_green_500">#ff0f9d58</color>
- <color name="quantum_green_700">#ff0b8043</color>
- <color name="quantum_green_A200">#ff69f0ae</color>
- <color name="quantum_green_A400">#ff00e676</color>
-
- <color name="quantum_lime_100">#fff0f4c3</color>
- <color name="quantum_lime_300">#ffdce775</color>
- <color name="quantum_lime_500">#ffcddc39</color>
- <color name="quantum_lime_700">#ffafb42b</color>
- <color name="quantum_lime_A200">#ffeeff41</color>
- <color name="quantum_lime_A400">#ffc6ff00</color>
-
- <color name="quantum_yellow_100">#fffce8b2</color>
- <color name="quantum_yellow_300">#fff7cb4d</color>
- <color name="quantum_yellow_500">#fff4b400</color>
- <color name="quantum_yellow_700">#fff09300</color>
- <color name="quantum_yellow_A200">#ffffcd40</color>
- <color name="quantum_yellow_A400">#ffffbc00</color>
-
- <color name="quantum_orange_100">#ffffe0b2</color>
- <color name="quantum_orange_300">#ffffb74d</color>
- <color name="quantum_orange_500">#ffff9800</color>
- <color name="quantum_orange_700">#fff57c00</color>
- <color name="quantum_orange_A200">#ffffab40</color>
- <color name="quantum_orange_A400">#ffff9100</color>
-
- <color name="quantum_deep_orange_100">#fff4c7c3</color>
- <color name="quantum_deep_orange_300">#ffe67c73</color>
- <color name="quantum_deep_orange_500">#ffff5722</color>
- <color name="quantum_deep_orange_700">#ffc53929</color>
- <color name="quantum_deep_orange_A200">#ffff5252</color>
- <color name="quantum_deep_orange_A400">#ffff1744</color>
-
- <!-- Neutral colors -->
- <eat-comment />
-
- <color name="quantum_grey_50">#fffafafa</color>
- <color name="quantum_grey_100">#fff5f5f5</color>
- <color name="quantum_grey_300">#ffeeeeee</color>
- <color name="quantum_grey_500">#ffa3a3a3</color>
- <color name="quantum_grey_600">#ff757575</color>
- <color name="quantum_grey_700">#ff717171</color>
- <color name="quantum_grey_900">#ff212121</color>
-
- <color name="quantum_blue_grey_50">#ffeceff1</color>
- <color name="quantum_blue_grey_100">#ffcfd8dc</color>
- <color name="quantum_blue_grey_300">#ff90a4ae</color>
- <color name="quantum_blue_grey_400">#ff78909c</color>
- <color name="quantum_blue_grey_500">#ff607d8b</color>
- <color name="quantum_blue_grey_600">#ff546e7a</color>
- <color name="quantum_blue_grey_700">#ff455a64</color>
- <color name="quantum_blue_grey_800">#ff37474f</color>
- <color name="quantum_blue_grey_900">#ff263238</color>
-
- <color name="quantum_brown_100">#ffd7ccc8</color>
- <color name="quantum_brown_300">#ffa1887f</color>
- <color name="quantum_brown_500">#ff795548</color>
- <color name="quantum_brown_700">#ff5d4037</color>
-
- <!-- Time picker defaults when no theme is set -->
- <eat-comment />
-
- <color name="timepicker_default_background_quantum">@color/primary_text_default_quantum_light</color>
- <color name="timepicker_default_text_color_quantum">@color/black</color>
- <color name="timepicker_default_disabled_color_quantum">@color/bright_foreground_disabled_quantum_dark</color>
- <color name="timepicker_default_ampm_selected_background_color_quantum">@color/quantum_light_blue_A200</color>
- <color name="timepicker_default_ampm_unselected_background_color_quantum">@color/transparent</color>
- <color name="timepicker_default_selector_color_quantum">@color/quantum_light_blue_A200</color>
- <color name="timepicker_default_numbers_background_color_quantum">@color/transparent</color>
-</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 865d92a8f37e..27ac6c30b180 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -589,7 +589,7 @@
<!-- Display low battery warning when battery level dips to this value.
Also, the battery stats are flushed to disk when we hit this level. -->
- <integer name="config_criticalBatteryWarningLevel">4</integer>
+ <integer name="config_criticalBatteryWarningLevel">5</integer>
<!-- Shutdown if the battery temperature exceeds (this value * 0.1) Celsius. -->
<integer name="config_shutdownBatteryTemperature">680</integer>
@@ -597,8 +597,9 @@
<!-- Display low battery warning when battery level dips to this value -->
<integer name="config_lowBatteryWarningLevel">15</integer>
- <!-- Close low battery warning when battery level reaches this value -->
- <integer name="config_lowBatteryCloseWarningLevel">20</integer>
+ <!-- Close low battery warning when battery level reaches the lowBatteryWarningLevel
+ plus this -->
+ <integer name="config_lowBatteryCloseWarningBump">5</integer>
<!-- Default color for notification LED. -->
<color name="config_defaultNotificationColor">#ffffffff</color>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 657f61417657..e94b9dd8a324 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -365,7 +365,7 @@
<!-- width of ImmersiveModeConfirmation (-1 for match_parent) -->
<dimen name="immersive_mode_cling_width">-1px</dimen>
- <!-- radius of the corners of the quantum rounded rect background -->
- <dimen name="notification_quantum_rounded_rect_radius">2dp</dimen>
+ <!-- radius of the corners of the material rounded rect background -->
+ <dimen name="notification_material_rounded_rect_radius">2dp</dimen>
</resources>
diff --git a/core/res/res/values/dimens_material.xml b/core/res/res/values/dimens_material.xml
new file mode 100644
index 000000000000..be7e6c177356
--- /dev/null
+++ b/core/res/res/values/dimens_material.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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>
+
+ <!-- Default height of an action bar. -->
+ <dimen name="action_bar_default_height_material">56dp</dimen>
+ <!-- Default padding of an action bar. -->
+ <dimen name="action_bar_default_padding_material">4dp</dimen>
+ <!-- Vertical padding around action bar icons. -->
+ <dimen name="action_bar_icon_vertical_padding_material">16dp</dimen>
+ <!-- Top margin for action bar subtitles -->
+ <dimen name="action_bar_subtitle_top_margin_material">-3dp</dimen>
+ <!-- Bottom margin for action bar subtitles -->
+ <dimen name="action_bar_subtitle_bottom_margin_material">5dp</dimen>
+
+ <dimen name="action_button_min_width_material">48dp</dimen>
+ <dimen name="action_button_min_height_material">48dp</dimen>
+ <dimen name="action_overflow_min_width_material">36dp</dimen>
+
+ <dimen name="text_size_display_4_material">112sp</dimen>
+ <dimen name="text_size_display_3_material">56sp</dimen>
+ <dimen name="text_size_display_2_material">45sp</dimen>
+ <dimen name="text_size_display_1_material">34sp</dimen>
+ <dimen name="text_size_headline_material">24sp</dimen>
+ <dimen name="text_size_title_material">20sp</dimen>
+ <dimen name="text_size_subhead_material">16sp</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_menu_material">14sp</dimen>
+ <dimen name="text_size_button_material">14sp</dimen>
+
+ <dimen name="text_size_large_material">22sp</dimen>
+ <dimen name="text_size_medium_material">18sp</dimen>
+ <dimen name="text_size_small_material">14sp</dimen>
+
+ <dimen name="floating_window_z">16dp</dimen>
+ <dimen name="floating_window_margin_left">16dp</dimen>
+ <dimen name="floating_window_margin_top">8dp</dimen>
+ <dimen name="floating_window_margin_right">16dp</dimen>
+ <dimen name="floating_window_margin_bottom">32dp</dimen>
+
+ <!-- Amount of elevation for pressed button state -->
+ <dimen name="button_pressed_z">2dp</dimen>
+</resources>
diff --git a/core/res/res/values/dimens_quantum.xml b/core/res/res/values/dimens_quantum.xml
deleted file mode 100644
index 6390667762bf..000000000000
--- a/core/res/res/values/dimens_quantum.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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>
-
- <!-- Default height of an action bar. -->
- <dimen name="action_bar_default_height_quantum">56dp</dimen>
- <!-- Default padding of an action bar. -->
- <dimen name="action_bar_default_padding_quantum">4dp</dimen>
- <!-- Vertical padding around action bar icons. -->
- <dimen name="action_bar_icon_vertical_padding_quantum">16dp</dimen>
- <!-- Top margin for action bar subtitles -->
- <dimen name="action_bar_subtitle_top_margin_quantum">-3dp</dimen>
- <!-- Bottom margin for action bar subtitles -->
- <dimen name="action_bar_subtitle_bottom_margin_quantum">5dp</dimen>
-
- <dimen name="action_button_min_width_quantum">48dp</dimen>
- <dimen name="action_button_min_height_quantum">48dp</dimen>
- <dimen name="action_overflow_min_width_quantum">36dp</dimen>
-
- <dimen name="text_size_display_4_quantum">112sp</dimen>
- <dimen name="text_size_display_3_quantum">56sp</dimen>
- <dimen name="text_size_display_2_quantum">45sp</dimen>
- <dimen name="text_size_display_1_quantum">34sp</dimen>
- <dimen name="text_size_headline_quantum">24sp</dimen>
- <dimen name="text_size_title_quantum">20sp</dimen>
- <dimen name="text_size_subhead_quantum">16sp</dimen>
- <dimen name="text_size_body_2_quantum">14sp</dimen>
- <dimen name="text_size_body_1_quantum">14sp</dimen>
- <dimen name="text_size_caption_quantum">12sp</dimen>
- <dimen name="text_size_menu_quantum">14sp</dimen>
- <dimen name="text_size_button_quantum">14sp</dimen>
-
- <dimen name="text_size_large_quantum">22sp</dimen>
- <dimen name="text_size_medium_quantum">18sp</dimen>
- <dimen name="text_size_small_quantum">14sp</dimen>
-
- <dimen name="floating_window_z">16dp</dimen>
- <dimen name="floating_window_margin_left">16dp</dimen>
- <dimen name="floating_window_margin_top">8dp</dimen>
- <dimen name="floating_window_margin_right">16dp</dimen>
- <dimen name="floating_window_margin_bottom">32dp</dimen>
-
- <!-- Amount of elevation for pressed button state -->
- <dimen name="button_pressed_z">2dp</dimen>
-</resources>
diff --git a/core/res/res/values/donottranslate_material.xml b/core/res/res/values/donottranslate_material.xml
new file mode 100644
index 000000000000..9ed955368524
--- /dev/null
+++ b/core/res/res/values/donottranslate_material.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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>
+
+ <string name="font_family_display_4_material">sans-serif-light</string>
+ <string name="font_family_display_3_material">sans-serif</string>
+ <string name="font_family_display_2_material">sans-serif</string>
+ <string name="font_family_display_1_material">sans-serif</string>
+ <string name="font_family_headline_material">sans-serif</string>
+ <string name="font_family_title_material">sans-serif-medium</string>
+ <string name="font_family_subhead_material">sans-serif</string>
+ <string name="font_family_body_2_material">sans-serif-medium</string>
+ <string name="font_family_body_1_material">sans-serif</string>
+ <string name="font_family_caption_material">sans-serif</string>
+ <string name="font_family_menu_material">sans-serif-medium</string>
+ <string name="font_family_button_material">sans-serif-medium</string>
+
+</resources>
diff --git a/core/res/res/values/donottranslate_quantum.xml b/core/res/res/values/donottranslate_quantum.xml
deleted file mode 100644
index e53c40e3fa51..000000000000
--- a/core/res/res/values/donottranslate_quantum.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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>
-
- <string name="font_family_display_4_quantum">sans-serif-light</string>
- <string name="font_family_display_3_quantum">sans-serif</string>
- <string name="font_family_display_2_quantum">sans-serif</string>
- <string name="font_family_display_1_quantum">sans-serif</string>
- <string name="font_family_headline_quantum">sans-serif</string>
- <string name="font_family_title_quantum">sans-serif-medium</string>
- <string name="font_family_subhead_quantum">sans-serif</string>
- <string name="font_family_body_2_quantum">sans-serif-medium</string>
- <string name="font_family_body_1_quantum">sans-serif</string>
- <string name="font_family_caption_quantum">sans-serif</string>
- <string name="font_family_menu_quantum">sans-serif-medium</string>
- <string name="font_family_button_quantum">sans-serif-medium</string>
-
-</resources>
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index c966a12b7c9b..639091e14284 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -23,6 +23,7 @@
<item type="id" name="empty" />
<item type="id" name="hint" />
<item type="id" name="icon" />
+ <item type="id" name="icon_badge" />
<item type="id" name="icon1" />
<item type="id" name="icon2" />
<item type="id" name="input" />
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 88e1cda837d8..94cf116df747 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2097,6 +2097,7 @@
<public type="attr" name="isGame" id="0x10103f4" />
<public type="attr" name="allowEmbedded" id="0x10103f5" />
<public type="attr" name="setupActivity" id="0x10103f6"/>
+ <public type="attr" name="tvInputType" id="0x10103f7"/>
<!-- ===============================================================
Resources added in version 21 of the platform
@@ -2131,7 +2132,6 @@
<public type="attr" name="strokeLineJoin" />
<public type="attr" name="clipToPath" />
<public type="attr" name="requiredForProfile"/>
- <public type="attr" name="pinned" />
<public type="attr" name="colorControlNormal" />
<public type="attr" name="colorControlActivated" />
<public type="attr" name="colorButtonNormal" />
@@ -2161,6 +2161,7 @@
<public type="attr" name="hideOnContentScroll" />
<public type="attr" name="actionOverflowMenuStyle" />
<public type="attr" name="documentLaunchMode" />
+ <public type="attr" name="maxRecents" />
<public type="attr" name="autoRemoveFromRecents" />
<public type="attr" name="stateListAnimator" />
<public type="attr" name="toId" />
@@ -2179,6 +2180,7 @@
<public type="attr" name="contentInsetRight" />
<public type="attr" name="paddingMode" />
<public type="attr" name="selectableItemBackgroundBorderless" />
+ <public type="attr" name="elegantTextHeight" />
<public-padding type="dimen" name="l_resource_pad" end="0x01050010" />
@@ -2190,6 +2192,8 @@
<public type="style" name="Widget.FastScroll" />
<public type="style" name="Widget.StackView" />
+ <public type="style" name="Widget.Toolbar" />
+ <public type="style" name="Widget.Toolbar.Button.Navigation" />
<public type="style" name="Widget.Holo.FastScroll" />
<public type="style" name="Widget.Holo.StackView" />
@@ -2204,215 +2208,217 @@
<public type="style" name="Widget.DeviceDefault.Light.FastScroll" />
<public type="style" name="Widget.DeviceDefault.Light.StackView" />
- <public type="style" name="TextAppearance.Quantum" />
- <public type="style" name="TextAppearance.Quantum.DialogWindowTitle" />
- <public type="style" name="TextAppearance.Quantum.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Large" />
- <public type="style" name="TextAppearance.Quantum.Large.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Medium" />
- <public type="style" name="TextAppearance.Quantum.Medium.Inverse" />
- <public type="style" name="TextAppearance.Quantum.SearchResult.Subtitle" />
- <public type="style" name="TextAppearance.Quantum.SearchResult.Title" />
- <public type="style" name="TextAppearance.Quantum.Small" />
- <public type="style" name="TextAppearance.Quantum.Small.Inverse" />
- <public type="style" name="TextAppearance.Quantum.WindowTitle" />
-
- <public type="style" name="TextAppearance.Quantum.Widget" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Menu" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Subtitle" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Title" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Subtitle" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Title" />
- <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse" />
- <public type="style" name="TextAppearance.Quantum.Widget.Button" />
- <public type="style" name="TextAppearance.Quantum.Widget.DropDownHint" />
- <public type="style" name="TextAppearance.Quantum.Widget.DropDownItem" />
- <public type="style" name="TextAppearance.Quantum.Widget.EditText" />
- <public type="style" name="TextAppearance.Quantum.Widget.IconMenu.Item" />
- <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu" />
- <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu.Large" />
- <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu.Small" />
- <public type="style" name="TextAppearance.Quantum.Widget.TabWidget" />
- <public type="style" name="TextAppearance.Quantum.Widget.TextView" />
- <public type="style" name="TextAppearance.Quantum.Widget.TextView.PopupMenu" />
- <public type="style" name="TextAppearance.Quantum.Widget.TextView.SpinnerItem" />
-
- <public type="style" name="Theme.Quantum" />
- <public type="style" name="Theme.Quantum.Dialog" />
- <public type="style" name="Theme.Quantum.Dialog.MinWidth" />
- <public type="style" name="Theme.Quantum.Dialog.NoActionBar" />
- <public type="style" name="Theme.Quantum.Dialog.NoActionBar.MinWidth" />
- <public type="style" name="Theme.Quantum.DialogWhenLarge" />
- <public type="style" name="Theme.Quantum.DialogWhenLarge.NoActionBar" />
- <public type="style" name="Theme.Quantum.InputMethod" />
- <public type="style" name="Theme.Quantum.NoActionBar" />
- <public type="style" name="Theme.Quantum.NoActionBar.Fullscreen" />
- <public type="style" name="Theme.Quantum.NoActionBar.Overscan" />
- <public type="style" name="Theme.Quantum.NoActionBar.TranslucentDecor" />
- <public type="style" name="Theme.Quantum.Panel" />
- <public type="style" name="Theme.Quantum.Voice" />
- <public type="style" name="Theme.Quantum.Wallpaper" />
- <public type="style" name="Theme.Quantum.Wallpaper.NoTitleBar" />
-
- <public type="style" name="Theme.Quantum.Light" />
- <public type="style" name="Theme.Quantum.Light.DarkActionBar" />
- <public type="style" name="Theme.Quantum.Light.Dialog" />
- <public type="style" name="Theme.Quantum.Light.Dialog.MinWidth" />
- <public type="style" name="Theme.Quantum.Light.Dialog.NoActionBar" />
- <public type="style" name="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" />
- <public type="style" name="Theme.Quantum.Light.DialogWhenLarge" />
- <public type="style" name="Theme.Quantum.Light.DialogWhenLarge.NoActionBar" />
- <public type="style" name="Theme.Quantum.Light.NoActionBar" />
- <public type="style" name="Theme.Quantum.Light.NoActionBar.Fullscreen" />
- <public type="style" name="Theme.Quantum.Light.NoActionBar.Overscan" />
- <public type="style" name="Theme.Quantum.Light.NoActionBar.TranslucentDecor" />
- <public type="style" name="Theme.Quantum.Light.Panel" />
- <public type="style" name="Theme.Quantum.Light.Voice" />
+ <public type="style" name="TextAppearance.Material" />
+ <public type="style" name="TextAppearance.Material.DialogWindowTitle" />
+ <public type="style" name="TextAppearance.Material.Inverse" />
+ <public type="style" name="TextAppearance.Material.Large" />
+ <public type="style" name="TextAppearance.Material.Large.Inverse" />
+ <public type="style" name="TextAppearance.Material.Medium" />
+ <public type="style" name="TextAppearance.Material.Medium.Inverse" />
+ <public type="style" name="TextAppearance.Material.SearchResult.Subtitle" />
+ <public type="style" name="TextAppearance.Material.SearchResult.Title" />
+ <public type="style" name="TextAppearance.Material.Small" />
+ <public type="style" name="TextAppearance.Material.Small.Inverse" />
+ <public type="style" name="TextAppearance.Material.WindowTitle" />
+
+ <public type="style" name="TextAppearance.Material.Widget" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionBar.Menu" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionBar.Title.Inverse" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title" />
+ <public type="style" name="TextAppearance.Material.Widget.ActionMode.Title.Inverse" />
+ <public type="style" name="TextAppearance.Material.Widget.Button" />
+ <public type="style" name="TextAppearance.Material.Widget.DropDownHint" />
+ <public type="style" name="TextAppearance.Material.Widget.DropDownItem" />
+ <public type="style" name="TextAppearance.Material.Widget.EditText" />
+ <public type="style" name="TextAppearance.Material.Widget.IconMenu.Item" />
+ <public type="style" name="TextAppearance.Material.Widget.PopupMenu" />
+ <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Large" />
+ <public type="style" name="TextAppearance.Material.Widget.PopupMenu.Small" />
+ <public type="style" name="TextAppearance.Material.Widget.TabWidget" />
+ <public type="style" name="TextAppearance.Material.Widget.TextView" />
+ <public type="style" name="TextAppearance.Material.Widget.TextView.PopupMenu" />
+ <public type="style" name="TextAppearance.Material.Widget.TextView.SpinnerItem" />
+
+ <public type="style" name="Theme.Material" />
+ <public type="style" name="Theme.Material.Dialog" />
+ <public type="style" name="Theme.Material.Dialog.MinWidth" />
+ <public type="style" name="Theme.Material.Dialog.NoActionBar" />
+ <public type="style" name="Theme.Material.Dialog.NoActionBar.MinWidth" />
+ <public type="style" name="Theme.Material.DialogWhenLarge" />
+ <public type="style" name="Theme.Material.DialogWhenLarge.NoActionBar" />
+ <public type="style" name="Theme.Material.InputMethod" />
+ <public type="style" name="Theme.Material.NoActionBar" />
+ <public type="style" name="Theme.Material.NoActionBar.Fullscreen" />
+ <public type="style" name="Theme.Material.NoActionBar.Overscan" />
+ <public type="style" name="Theme.Material.NoActionBar.TranslucentDecor" />
+ <public type="style" name="Theme.Material.Panel" />
+ <public type="style" name="Theme.Material.Voice" />
+ <public type="style" name="Theme.Material.Wallpaper" />
+ <public type="style" name="Theme.Material.Wallpaper.NoTitleBar" />
+
+ <public type="style" name="Theme.Material.Light" />
+ <public type="style" name="Theme.Material.Light.DarkActionBar" />
+ <public type="style" name="Theme.Material.Light.Dialog" />
+ <public type="style" name="Theme.Material.Light.Dialog.MinWidth" />
+ <public type="style" name="Theme.Material.Light.Dialog.NoActionBar" />
+ <public type="style" name="Theme.Material.Light.Dialog.NoActionBar.MinWidth" />
+ <public type="style" name="Theme.Material.Light.DialogWhenLarge" />
+ <public type="style" name="Theme.Material.Light.DialogWhenLarge.NoActionBar" />
+ <public type="style" name="Theme.Material.Light.NoActionBar" />
+ <public type="style" name="Theme.Material.Light.NoActionBar.Fullscreen" />
+ <public type="style" name="Theme.Material.Light.NoActionBar.Overscan" />
+ <public type="style" name="Theme.Material.Light.NoActionBar.TranslucentDecor" />
+ <public type="style" name="Theme.Material.Light.Panel" />
+ <public type="style" name="Theme.Material.Light.Voice" />
<public type="style" name="ThemeOverlay" />
- <public type="style" name="ThemeOverlay.Quantum" />
- <public type="style" name="ThemeOverlay.Quantum.ActionBar" />
- <public type="style" name="ThemeOverlay.Quantum.Light" />
- <public type="style" name="ThemeOverlay.Quantum.Dark" />
- <public type="style" name="ThemeOverlay.Quantum.Dark.ActionBar" />
-
- <public type="style" name="Widget.Quantum" />
- <public type="style" name="Widget.Quantum.ActionBar" />
- <public type="style" name="Widget.Quantum.ActionBar.Solid" />
- <public type="style" name="Widget.Quantum.ActionBar.TabBar" />
- <public type="style" name="Widget.Quantum.ActionBar.TabText" />
- <public type="style" name="Widget.Quantum.ActionBar.TabView" />
- <public type="style" name="Widget.Quantum.ActionButton" />
- <public type="style" name="Widget.Quantum.ActionButton.CloseMode" />
- <public type="style" name="Widget.Quantum.ActionButton.Overflow" />
- <public type="style" name="Widget.Quantum.ActionMode" />
- <public type="style" name="Widget.Quantum.AutoCompleteTextView" />
- <public type="style" name="Widget.Quantum.Button" />
- <public type="style" name="Widget.Quantum.Button.Borderless" />
- <public type="style" name="Widget.Quantum.Button.Borderless.Small" />
- <public type="style" name="Widget.Quantum.Button.Inset" />
- <public type="style" name="Widget.Quantum.Button.Small" />
- <public type="style" name="Widget.Quantum.Button.Toggle" />
- <public type="style" name="Widget.Quantum.ButtonBar" />
- <public type="style" name="Widget.Quantum.ButtonBar.AlertDialog" />
- <public type="style" name="Widget.Quantum.CalendarView" />
- <public type="style" name="Widget.Quantum.CheckedTextView" />
- <public type="style" name="Widget.Quantum.CompoundButton.CheckBox" />
- <public type="style" name="Widget.Quantum.CompoundButton.RadioButton" />
- <public type="style" name="Widget.Quantum.CompoundButton.Star" />
- <public type="style" name="Widget.Quantum.DatePicker" />
- <public type="style" name="Widget.Quantum.DropDownItem" />
- <public type="style" name="Widget.Quantum.DropDownItem.Spinner" />
- <public type="style" name="Widget.Quantum.EditText" />
- <public type="style" name="Widget.Quantum.ExpandableListView" />
- <public type="style" name="Widget.Quantum.FastScroll" />
- <public type="style" name="Widget.Quantum.GridView" />
- <public type="style" name="Widget.Quantum.HorizontalScrollView" />
- <public type="style" name="Widget.Quantum.ImageButton" />
- <public type="style" name="Widget.Quantum.ListPopupWindow" />
- <public type="style" name="Widget.Quantum.ListView" />
- <public type="style" name="Widget.Quantum.ListView.DropDown" />
- <public type="style" name="Widget.Quantum.MediaRouteButton" />
- <public type="style" name="Widget.Quantum.PopupMenu" />
- <public type="style" name="Widget.Quantum.PopupMenu.Overflow" />
- <public type="style" name="Widget.Quantum.PopupWindow" />
- <public type="style" name="Widget.Quantum.ProgressBar" />
- <public type="style" name="Widget.Quantum.ProgressBar.Horizontal" />
- <public type="style" name="Widget.Quantum.ProgressBar.Large" />
- <public type="style" name="Widget.Quantum.ProgressBar.Small" />
- <public type="style" name="Widget.Quantum.ProgressBar.Small.Title" />
- <public type="style" name="Widget.Quantum.RatingBar" />
- <public type="style" name="Widget.Quantum.RatingBar.Indicator" />
- <public type="style" name="Widget.Quantum.RatingBar.Small" />
- <public type="style" name="Widget.Quantum.ScrollView" />
- <public type="style" name="Widget.Quantum.SeekBar" />
- <public type="style" name="Widget.Quantum.SegmentedButton" />
- <public type="style" name="Widget.Quantum.StackView" />
- <public type="style" name="Widget.Quantum.Spinner" />
- <public type="style" name="Widget.Quantum.Tab" />
- <public type="style" name="Widget.Quantum.TabWidget" />
- <public type="style" name="Widget.Quantum.TextView" />
- <public type="style" name="Widget.Quantum.TextView.SpinnerItem" />
- <public type="style" name="Widget.Quantum.WebTextView" />
- <public type="style" name="Widget.Quantum.WebView" />
-
- <public type="style" name="Widget.Quantum.Light" />
- <public type="style" name="Widget.Quantum.Light.ActionBar" />
- <public type="style" name="Widget.Quantum.Light.ActionBar.Solid" />
- <public type="style" name="Widget.Quantum.Light.ActionBar.TabBar" />
- <public type="style" name="Widget.Quantum.Light.ActionBar.TabText" />
- <public type="style" name="Widget.Quantum.Light.ActionBar.TabView" />
- <public type="style" name="Widget.Quantum.Light.ActionButton" />
- <public type="style" name="Widget.Quantum.Light.ActionButton.CloseMode" />
- <public type="style" name="Widget.Quantum.Light.ActionButton.Overflow" />
- <public type="style" name="Widget.Quantum.Light.ActionMode" />
- <public type="style" name="Widget.Quantum.Light.AutoCompleteTextView" />
- <public type="style" name="Widget.Quantum.Light.Button" />
- <public type="style" name="Widget.Quantum.Light.Button.Borderless" />
- <public type="style" name="Widget.Quantum.Light.Button.Borderless.Small" />
- <public type="style" name="Widget.Quantum.Light.Button.Inset" />
- <public type="style" name="Widget.Quantum.Light.Button.Small" />
- <public type="style" name="Widget.Quantum.Light.Button.Toggle" />
- <public type="style" name="Widget.Quantum.Light.ButtonBar" />
- <public type="style" name="Widget.Quantum.Light.ButtonBar.AlertDialog" />
- <public type="style" name="Widget.Quantum.Light.CalendarView" />
- <public type="style" name="Widget.Quantum.Light.CheckedTextView" />
- <public type="style" name="Widget.Quantum.Light.CompoundButton.CheckBox" />
- <public type="style" name="Widget.Quantum.Light.CompoundButton.RadioButton" />
- <public type="style" name="Widget.Quantum.Light.CompoundButton.Star" />
- <public type="style" name="Widget.Quantum.Light.DropDownItem" />
- <public type="style" name="Widget.Quantum.Light.DropDownItem.Spinner" />
- <public type="style" name="Widget.Quantum.Light.EditText" />
- <public type="style" name="Widget.Quantum.Light.ExpandableListView" />
- <public type="style" name="Widget.Quantum.Light.FastScroll" />
- <public type="style" name="Widget.Quantum.Light.GridView" />
- <public type="style" name="Widget.Quantum.Light.HorizontalScrollView" />
- <public type="style" name="Widget.Quantum.Light.ImageButton" />
- <public type="style" name="Widget.Quantum.Light.ListPopupWindow" />
- <public type="style" name="Widget.Quantum.Light.ListView" />
- <public type="style" name="Widget.Quantum.Light.ListView.DropDown" />
- <public type="style" name="Widget.Quantum.Light.MediaRouteButton" />
- <public type="style" name="Widget.Quantum.Light.PopupMenu" />
- <public type="style" name="Widget.Quantum.Light.PopupMenu.Overflow" />
- <public type="style" name="Widget.Quantum.Light.PopupWindow" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Horizontal" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Inverse" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Large" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Large.Inverse" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Small" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Small.Inverse" />
- <public type="style" name="Widget.Quantum.Light.ProgressBar.Small.Title" />
- <public type="style" name="Widget.Quantum.Light.RatingBar" />
- <public type="style" name="Widget.Quantum.Light.RatingBar.Indicator" />
- <public type="style" name="Widget.Quantum.Light.RatingBar.Small" />
- <public type="style" name="Widget.Quantum.Light.ScrollView" />
- <public type="style" name="Widget.Quantum.Light.SeekBar" />
- <public type="style" name="Widget.Quantum.Light.SegmentedButton" />
- <public type="style" name="Widget.Quantum.Light.StackView" />
- <public type="style" name="Widget.Quantum.Light.Spinner" />
- <public type="style" name="Widget.Quantum.Light.Tab" />
- <public type="style" name="Widget.Quantum.Light.TabWidget" />
- <public type="style" name="Widget.Quantum.Light.TextView" />
- <public type="style" name="Widget.Quantum.Light.TextView.SpinnerItem" />
- <public type="style" name="Widget.Quantum.Light.WebTextView" />
- <public type="style" name="Widget.Quantum.Light.WebView" />
-
- <public type="style" name="TextAppearance.Quantum.Display4" />
- <public type="style" name="TextAppearance.Quantum.Display3" />
- <public type="style" name="TextAppearance.Quantum.Display2" />
- <public type="style" name="TextAppearance.Quantum.Display1" />
- <public type="style" name="TextAppearance.Quantum.Headline" />
- <public type="style" name="TextAppearance.Quantum.Title" />
- <public type="style" name="TextAppearance.Quantum.Subhead" />
- <public type="style" name="TextAppearance.Quantum.Body2" />
- <public type="style" name="TextAppearance.Quantum.Body1" />
- <public type="style" name="TextAppearance.Quantum.Caption" />
- <public type="style" name="TextAppearance.Quantum.Menu" />
- <public type="style" name="TextAppearance.Quantum.Button" />
+ <public type="style" name="ThemeOverlay.Material" />
+ <public type="style" name="ThemeOverlay.Material.ActionBar" />
+ <public type="style" name="ThemeOverlay.Material.Light" />
+ <public type="style" name="ThemeOverlay.Material.Dark" />
+ <public type="style" name="ThemeOverlay.Material.Dark.ActionBar" />
+
+ <public type="style" name="Widget.Material" />
+ <public type="style" name="Widget.Material.ActionBar" />
+ <public type="style" name="Widget.Material.ActionBar.Solid" />
+ <public type="style" name="Widget.Material.ActionBar.TabBar" />
+ <public type="style" name="Widget.Material.ActionBar.TabText" />
+ <public type="style" name="Widget.Material.ActionBar.TabView" />
+ <public type="style" name="Widget.Material.ActionButton" />
+ <public type="style" name="Widget.Material.ActionButton.CloseMode" />
+ <public type="style" name="Widget.Material.ActionButton.Overflow" />
+ <public type="style" name="Widget.Material.ActionMode" />
+ <public type="style" name="Widget.Material.AutoCompleteTextView" />
+ <public type="style" name="Widget.Material.Button" />
+ <public type="style" name="Widget.Material.Button.Borderless" />
+ <public type="style" name="Widget.Material.Button.Borderless.Small" />
+ <public type="style" name="Widget.Material.Button.Inset" />
+ <public type="style" name="Widget.Material.Button.Small" />
+ <public type="style" name="Widget.Material.Button.Toggle" />
+ <public type="style" name="Widget.Material.ButtonBar" />
+ <public type="style" name="Widget.Material.ButtonBar.AlertDialog" />
+ <public type="style" name="Widget.Material.CalendarView" />
+ <public type="style" name="Widget.Material.CheckedTextView" />
+ <public type="style" name="Widget.Material.CompoundButton.CheckBox" />
+ <public type="style" name="Widget.Material.CompoundButton.RadioButton" />
+ <public type="style" name="Widget.Material.CompoundButton.Star" />
+ <public type="style" name="Widget.Material.DatePicker" />
+ <public type="style" name="Widget.Material.DropDownItem" />
+ <public type="style" name="Widget.Material.DropDownItem.Spinner" />
+ <public type="style" name="Widget.Material.EditText" />
+ <public type="style" name="Widget.Material.ExpandableListView" />
+ <public type="style" name="Widget.Material.FastScroll" />
+ <public type="style" name="Widget.Material.GridView" />
+ <public type="style" name="Widget.Material.HorizontalScrollView" />
+ <public type="style" name="Widget.Material.ImageButton" />
+ <public type="style" name="Widget.Material.ListPopupWindow" />
+ <public type="style" name="Widget.Material.ListView" />
+ <public type="style" name="Widget.Material.ListView.DropDown" />
+ <public type="style" name="Widget.Material.MediaRouteButton" />
+ <public type="style" name="Widget.Material.PopupMenu" />
+ <public type="style" name="Widget.Material.PopupMenu.Overflow" />
+ <public type="style" name="Widget.Material.PopupWindow" />
+ <public type="style" name="Widget.Material.ProgressBar" />
+ <public type="style" name="Widget.Material.ProgressBar.Horizontal" />
+ <public type="style" name="Widget.Material.ProgressBar.Large" />
+ <public type="style" name="Widget.Material.ProgressBar.Small" />
+ <public type="style" name="Widget.Material.ProgressBar.Small.Title" />
+ <public type="style" name="Widget.Material.RatingBar" />
+ <public type="style" name="Widget.Material.RatingBar.Indicator" />
+ <public type="style" name="Widget.Material.RatingBar.Small" />
+ <public type="style" name="Widget.Material.ScrollView" />
+ <public type="style" name="Widget.Material.SeekBar" />
+ <public type="style" name="Widget.Material.SegmentedButton" />
+ <public type="style" name="Widget.Material.StackView" />
+ <public type="style" name="Widget.Material.Spinner" />
+ <public type="style" name="Widget.Material.Tab" />
+ <public type="style" name="Widget.Material.TabWidget" />
+ <public type="style" name="Widget.Material.TextView" />
+ <public type="style" name="Widget.Material.TextView.SpinnerItem" />
+ <public type="style" name="Widget.Material.Toolbar" />
+ <public type="style" name="Widget.Material.Toolbar.Button.Navigation" />
+ <public type="style" name="Widget.Material.WebTextView" />
+ <public type="style" name="Widget.Material.WebView" />
+
+ <public type="style" name="Widget.Material.Light" />
+ <public type="style" name="Widget.Material.Light.ActionBar" />
+ <public type="style" name="Widget.Material.Light.ActionBar.Solid" />
+ <public type="style" name="Widget.Material.Light.ActionBar.TabBar" />
+ <public type="style" name="Widget.Material.Light.ActionBar.TabText" />
+ <public type="style" name="Widget.Material.Light.ActionBar.TabView" />
+ <public type="style" name="Widget.Material.Light.ActionButton" />
+ <public type="style" name="Widget.Material.Light.ActionButton.CloseMode" />
+ <public type="style" name="Widget.Material.Light.ActionButton.Overflow" />
+ <public type="style" name="Widget.Material.Light.ActionMode" />
+ <public type="style" name="Widget.Material.Light.AutoCompleteTextView" />
+ <public type="style" name="Widget.Material.Light.Button" />
+ <public type="style" name="Widget.Material.Light.Button.Borderless" />
+ <public type="style" name="Widget.Material.Light.Button.Borderless.Small" />
+ <public type="style" name="Widget.Material.Light.Button.Inset" />
+ <public type="style" name="Widget.Material.Light.Button.Small" />
+ <public type="style" name="Widget.Material.Light.Button.Toggle" />
+ <public type="style" name="Widget.Material.Light.ButtonBar" />
+ <public type="style" name="Widget.Material.Light.ButtonBar.AlertDialog" />
+ <public type="style" name="Widget.Material.Light.CalendarView" />
+ <public type="style" name="Widget.Material.Light.CheckedTextView" />
+ <public type="style" name="Widget.Material.Light.CompoundButton.CheckBox" />
+ <public type="style" name="Widget.Material.Light.CompoundButton.RadioButton" />
+ <public type="style" name="Widget.Material.Light.CompoundButton.Star" />
+ <public type="style" name="Widget.Material.Light.DropDownItem" />
+ <public type="style" name="Widget.Material.Light.DropDownItem.Spinner" />
+ <public type="style" name="Widget.Material.Light.EditText" />
+ <public type="style" name="Widget.Material.Light.ExpandableListView" />
+ <public type="style" name="Widget.Material.Light.FastScroll" />
+ <public type="style" name="Widget.Material.Light.GridView" />
+ <public type="style" name="Widget.Material.Light.HorizontalScrollView" />
+ <public type="style" name="Widget.Material.Light.ImageButton" />
+ <public type="style" name="Widget.Material.Light.ListPopupWindow" />
+ <public type="style" name="Widget.Material.Light.ListView" />
+ <public type="style" name="Widget.Material.Light.ListView.DropDown" />
+ <public type="style" name="Widget.Material.Light.MediaRouteButton" />
+ <public type="style" name="Widget.Material.Light.PopupMenu" />
+ <public type="style" name="Widget.Material.Light.PopupMenu.Overflow" />
+ <public type="style" name="Widget.Material.Light.PopupWindow" />
+ <public type="style" name="Widget.Material.Light.ProgressBar" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Horizontal" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Inverse" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Large" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Large.Inverse" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Small" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Small.Inverse" />
+ <public type="style" name="Widget.Material.Light.ProgressBar.Small.Title" />
+ <public type="style" name="Widget.Material.Light.RatingBar" />
+ <public type="style" name="Widget.Material.Light.RatingBar.Indicator" />
+ <public type="style" name="Widget.Material.Light.RatingBar.Small" />
+ <public type="style" name="Widget.Material.Light.ScrollView" />
+ <public type="style" name="Widget.Material.Light.SeekBar" />
+ <public type="style" name="Widget.Material.Light.SegmentedButton" />
+ <public type="style" name="Widget.Material.Light.StackView" />
+ <public type="style" name="Widget.Material.Light.Spinner" />
+ <public type="style" name="Widget.Material.Light.Tab" />
+ <public type="style" name="Widget.Material.Light.TabWidget" />
+ <public type="style" name="Widget.Material.Light.TextView" />
+ <public type="style" name="Widget.Material.Light.TextView.SpinnerItem" />
+ <public type="style" name="Widget.Material.Light.WebTextView" />
+ <public type="style" name="Widget.Material.Light.WebView" />
+
+ <public type="style" name="TextAppearance.Material.Display4" />
+ <public type="style" name="TextAppearance.Material.Display3" />
+ <public type="style" name="TextAppearance.Material.Display2" />
+ <public type="style" name="TextAppearance.Material.Display1" />
+ <public type="style" name="TextAppearance.Material.Headline" />
+ <public type="style" name="TextAppearance.Material.Title" />
+ <public type="style" name="TextAppearance.Material.Subhead" />
+ <public type="style" name="TextAppearance.Material.Body2" />
+ <public type="style" name="TextAppearance.Material.Body1" />
+ <public type="style" name="TextAppearance.Material.Caption" />
+ <public type="style" name="TextAppearance.Material.Menu" />
+ <public type="style" name="TextAppearance.Material.Button" />
<public-padding type="interpolator" name="l_resource_pad" end="0x010c0010" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 241526ebabc3..a224cd5c5c7f 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -457,10 +457,10 @@
<string name="android_system_label">Android System</string>
<!-- Label for the user owner in the intent forwarding app. -->
- <string name="user_owner_label">Personal</string>
+ <string name="user_owner_label">Personal apps</string>
<!-- Label for a corporate profile in the intent forwarding app. -->
- <string name="managed_profile_label">Work</string>
+ <string name="managed_profile_label">Android for Work</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_costMoney">Services that cost you money</string>
@@ -1260,11 +1260,11 @@
<!-- Title of a permission that is never presented to the user. This is not a
permission that an application must be granted by the user. Instead, it
is part of a mechanism that applications use to indicate to the system
- that they want to do occasional work while the device is idle. -->
- <string name="permlab_bindIdleService">run application during idle time</string>
+ that they want to do scheduled background work. -->
+ <string name="permlab_bindJobService">run the application\'s scheduled background work</string>
<!-- Description of an application permission, so that the user can understand
what is being done if they are curious. -->
- <string name="permdesc_bindIdleService">This permission allows the Android system to run the application in the background while the device is not in use.</string>
+ <string name="permdesc_bindJobService">This permission allows the Android system to run the application in the background when requested.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_diagnostic">read/write to resources owned by diag</string>
diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml
index 609a0f3cb019..84dbc7921b16 100644
--- a/core/res/res/values/styles_device_defaults.xml
+++ b/core/res/res/values/styles_device_defaults.xml
@@ -32,149 +32,149 @@ easier.
-->
<resources>
<!-- Widget Styles -->
- <style name="Widget.DeviceDefault" parent="Widget.Quantum"/>
- <style name="Widget.DeviceDefault.Button" parent="Widget.Quantum.Button"/>
- <style name="Widget.DeviceDefault.Button.Small" parent="Widget.Quantum.Button.Small"/>
- <style name="Widget.DeviceDefault.Button.Inset" parent="Widget.Quantum.Button.Inset"/>
- <style name="Widget.DeviceDefault.Button.Toggle" parent="Widget.Quantum.Button.Toggle"/>
- <style name="Widget.DeviceDefault.TextView" parent="Widget.Quantum.TextView"/>
- <style name="Widget.DeviceDefault.CheckedTextView" parent="Widget.Quantum.CheckedTextView"/>
- <style name="Widget.DeviceDefault.AutoCompleteTextView" parent="Widget.Quantum.AutoCompleteTextView"/>
- <style name="Widget.DeviceDefault.CompoundButton.CheckBox" parent="Widget.Quantum.CompoundButton.CheckBox"/>
- <style name="Widget.DeviceDefault.ListView.DropDown" parent="Widget.Quantum.ListView.DropDown"/>
- <style name="Widget.DeviceDefault.EditText" parent="Widget.Quantum.EditText"/>
- <style name="Widget.DeviceDefault.ExpandableListView" parent="Widget.Quantum.ExpandableListView"/>
- <style name="Widget.DeviceDefault.GridView" parent="Widget.Quantum.GridView"/>
- <style name="Widget.DeviceDefault.ImageButton" parent="Widget.Quantum.ImageButton"/>
- <style name="Widget.DeviceDefault.ListView" parent="Widget.Quantum.ListView"/>
- <style name="Widget.DeviceDefault.PopupWindow" parent="Widget.Quantum.PopupWindow"/>
- <style name="Widget.DeviceDefault.ProgressBar" parent="Widget.Quantum.ProgressBar"/>
- <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Quantum.ProgressBar.Horizontal"/>
- <style name="Widget.DeviceDefault.ProgressBar.Small" parent="Widget.Quantum.ProgressBar.Small"/>
- <style name="Widget.DeviceDefault.ProgressBar.Small.Title" parent="Widget.Quantum.ProgressBar.Small.Title"/>
- <style name="Widget.DeviceDefault.ProgressBar.Large" parent="Widget.Quantum.ProgressBar.Large"/>
- <style name="Widget.DeviceDefault.SeekBar" parent="Widget.Quantum.SeekBar"/>
- <style name="Widget.DeviceDefault.RatingBar" parent="Widget.Quantum.RatingBar"/>
- <style name="Widget.DeviceDefault.RatingBar.Indicator" parent="Widget.Quantum.RatingBar.Indicator"/>
- <style name="Widget.DeviceDefault.RatingBar.Small" parent="Widget.Quantum.RatingBar.Small"/>
- <style name="Widget.DeviceDefault.CompoundButton.RadioButton" parent="Widget.Quantum.CompoundButton.RadioButton"/>
- <style name="Widget.DeviceDefault.ScrollView" parent="Widget.Quantum.ScrollView"/>
- <style name="Widget.DeviceDefault.HorizontalScrollView" parent="Widget.Quantum.HorizontalScrollView"/>
- <style name="Widget.DeviceDefault.Spinner" parent="Widget.Quantum.Spinner"/>
- <style name="Widget.DeviceDefault.CompoundButton.Star" parent="Widget.Quantum.CompoundButton.Star"/>
- <style name="Widget.DeviceDefault.TabWidget" parent="Widget.Quantum.TabWidget"/>
- <style name="Widget.DeviceDefault.WebTextView" parent="Widget.Quantum.WebTextView"/>
- <style name="Widget.DeviceDefault.WebView" parent="Widget.Quantum.WebView"/>
- <style name="Widget.DeviceDefault.DropDownItem" parent="Widget.Quantum.DropDownItem"/>
- <style name="Widget.DeviceDefault.DropDownItem.Spinner" parent="Widget.Quantum.DropDownItem.Spinner"/>
- <style name="Widget.DeviceDefault.TextView.SpinnerItem" parent="Widget.Quantum.TextView.SpinnerItem"/>
- <style name="Widget.DeviceDefault.ListPopupWindow" parent="Widget.Quantum.ListPopupWindow"/>
- <style name="Widget.DeviceDefault.PopupMenu" parent="Widget.Quantum.PopupMenu"/>
- <style name="Widget.DeviceDefault.ActionButton" parent="Widget.Quantum.ActionButton"/>
- <style name="Widget.DeviceDefault.ActionButton.Overflow" parent="Widget.Quantum.ActionButton.Overflow"/>
- <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Quantum.ActionButton"/>
- <style name="Widget.DeviceDefault.ActionMode" parent="Widget.Quantum.ActionMode"/>
- <style name="Widget.DeviceDefault.ActionButton.CloseMode" parent="Widget.Quantum.ActionButton.CloseMode"/>
- <style name="Widget.DeviceDefault.ActionBar" parent="Widget.Quantum.ActionBar"/>
- <style name="Widget.DeviceDefault.Button.Borderless" parent="Widget.Quantum.Button.Borderless"/>
- <style name="Widget.DeviceDefault.Tab" parent="Widget.Quantum.Tab"/>
- <style name="Widget.DeviceDefault.CalendarView" parent="Widget.Quantum.CalendarView"/>
- <style name="Widget.DeviceDefault.DatePicker" parent="Widget.Quantum.DatePicker"/>
- <style name="Widget.DeviceDefault.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView"/>
- <style name="Widget.DeviceDefault.ActionBar.TabText" parent="Widget.Quantum.ActionBar.TabText"/>
- <style name="Widget.DeviceDefault.ActionBar.TabBar" parent="Widget.Quantum.ActionBar.TabBar"/>
- <style name="Widget.DeviceDefault.ActionBar.Solid" parent="Widget.Quantum.ActionBar.Solid"/>
- <style name="Widget.DeviceDefault.Button.Borderless.Small" parent="Widget.Quantum.Button.Borderless.Small"/>
- <style name="Widget.DeviceDefault.AbsListView" parent="Widget.Quantum.AbsListView"/>
- <style name="Widget.DeviceDefault.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Spinner.DropDown.ActionBar"/>
- <style name="Widget.DeviceDefault.PopupWindow.ActionMode" parent="Widget.Quantum.PopupWindow.ActionMode"/>
- <style name="Widget.DeviceDefault.CompoundButton.Switch" parent="Widget.Quantum.CompoundButton.Switch"/>
- <style name="Widget.DeviceDefault.ExpandableListView.White" parent="Widget.Quantum.ExpandableListView.White"/>
- <style name="Widget.DeviceDefault.FastScroll" parent="Widget.Quantum.FastScroll"/>
+ <style name="Widget.DeviceDefault" parent="Widget.Material"/>
+ <style name="Widget.DeviceDefault.Button" parent="Widget.Material.Button"/>
+ <style name="Widget.DeviceDefault.Button.Small" parent="Widget.Material.Button.Small"/>
+ <style name="Widget.DeviceDefault.Button.Inset" parent="Widget.Material.Button.Inset"/>
+ <style name="Widget.DeviceDefault.Button.Toggle" parent="Widget.Material.Button.Toggle"/>
+ <style name="Widget.DeviceDefault.TextView" parent="Widget.Material.TextView"/>
+ <style name="Widget.DeviceDefault.CheckedTextView" parent="Widget.Material.CheckedTextView"/>
+ <style name="Widget.DeviceDefault.AutoCompleteTextView" parent="Widget.Material.AutoCompleteTextView"/>
+ <style name="Widget.DeviceDefault.CompoundButton.CheckBox" parent="Widget.Material.CompoundButton.CheckBox"/>
+ <style name="Widget.DeviceDefault.ListView.DropDown" parent="Widget.Material.ListView.DropDown"/>
+ <style name="Widget.DeviceDefault.EditText" parent="Widget.Material.EditText"/>
+ <style name="Widget.DeviceDefault.ExpandableListView" parent="Widget.Material.ExpandableListView"/>
+ <style name="Widget.DeviceDefault.GridView" parent="Widget.Material.GridView"/>
+ <style name="Widget.DeviceDefault.ImageButton" parent="Widget.Material.ImageButton"/>
+ <style name="Widget.DeviceDefault.ListView" parent="Widget.Material.ListView"/>
+ <style name="Widget.DeviceDefault.PopupWindow" parent="Widget.Material.PopupWindow"/>
+ <style name="Widget.DeviceDefault.ProgressBar" parent="Widget.Material.ProgressBar"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Material.ProgressBar.Horizontal"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Small" parent="Widget.Material.ProgressBar.Small"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Small.Title" parent="Widget.Material.ProgressBar.Small.Title"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Large" parent="Widget.Material.ProgressBar.Large"/>
+ <style name="Widget.DeviceDefault.SeekBar" parent="Widget.Material.SeekBar"/>
+ <style name="Widget.DeviceDefault.RatingBar" parent="Widget.Material.RatingBar"/>
+ <style name="Widget.DeviceDefault.RatingBar.Indicator" parent="Widget.Material.RatingBar.Indicator"/>
+ <style name="Widget.DeviceDefault.RatingBar.Small" parent="Widget.Material.RatingBar.Small"/>
+ <style name="Widget.DeviceDefault.CompoundButton.RadioButton" parent="Widget.Material.CompoundButton.RadioButton"/>
+ <style name="Widget.DeviceDefault.ScrollView" parent="Widget.Material.ScrollView"/>
+ <style name="Widget.DeviceDefault.HorizontalScrollView" parent="Widget.Material.HorizontalScrollView"/>
+ <style name="Widget.DeviceDefault.Spinner" parent="Widget.Material.Spinner"/>
+ <style name="Widget.DeviceDefault.CompoundButton.Star" parent="Widget.Material.CompoundButton.Star"/>
+ <style name="Widget.DeviceDefault.TabWidget" parent="Widget.Material.TabWidget"/>
+ <style name="Widget.DeviceDefault.WebTextView" parent="Widget.Material.WebTextView"/>
+ <style name="Widget.DeviceDefault.WebView" parent="Widget.Material.WebView"/>
+ <style name="Widget.DeviceDefault.DropDownItem" parent="Widget.Material.DropDownItem"/>
+ <style name="Widget.DeviceDefault.DropDownItem.Spinner" parent="Widget.Material.DropDownItem.Spinner"/>
+ <style name="Widget.DeviceDefault.TextView.SpinnerItem" parent="Widget.Material.TextView.SpinnerItem"/>
+ <style name="Widget.DeviceDefault.ListPopupWindow" parent="Widget.Material.ListPopupWindow"/>
+ <style name="Widget.DeviceDefault.PopupMenu" parent="Widget.Material.PopupMenu"/>
+ <style name="Widget.DeviceDefault.ActionButton" parent="Widget.Material.ActionButton"/>
+ <style name="Widget.DeviceDefault.ActionButton.Overflow" parent="Widget.Material.ActionButton.Overflow"/>
+ <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Material.ActionButton"/>
+ <style name="Widget.DeviceDefault.ActionMode" parent="Widget.Material.ActionMode"/>
+ <style name="Widget.DeviceDefault.ActionButton.CloseMode" parent="Widget.Material.ActionButton.CloseMode"/>
+ <style name="Widget.DeviceDefault.ActionBar" parent="Widget.Material.ActionBar"/>
+ <style name="Widget.DeviceDefault.Button.Borderless" parent="Widget.Material.Button.Borderless"/>
+ <style name="Widget.DeviceDefault.Tab" parent="Widget.Material.Tab"/>
+ <style name="Widget.DeviceDefault.CalendarView" parent="Widget.Material.CalendarView"/>
+ <style name="Widget.DeviceDefault.DatePicker" parent="Widget.Material.DatePicker"/>
+ <style name="Widget.DeviceDefault.ActionBar.TabView" parent="Widget.Material.ActionBar.TabView"/>
+ <style name="Widget.DeviceDefault.ActionBar.TabText" parent="Widget.Material.ActionBar.TabText"/>
+ <style name="Widget.DeviceDefault.ActionBar.TabBar" parent="Widget.Material.ActionBar.TabBar"/>
+ <style name="Widget.DeviceDefault.ActionBar.Solid" parent="Widget.Material.ActionBar.Solid"/>
+ <style name="Widget.DeviceDefault.Button.Borderless.Small" parent="Widget.Material.Button.Borderless.Small"/>
+ <style name="Widget.DeviceDefault.AbsListView" parent="Widget.Material.AbsListView"/>
+ <style name="Widget.DeviceDefault.Spinner.DropDown.ActionBar" parent="Widget.Material.Spinner.DropDown.ActionBar"/>
+ <style name="Widget.DeviceDefault.PopupWindow.ActionMode" parent="Widget.Material.PopupWindow.ActionMode"/>
+ <style name="Widget.DeviceDefault.CompoundButton.Switch" parent="Widget.Material.CompoundButton.Switch"/>
+ <style name="Widget.DeviceDefault.ExpandableListView.White" parent="Widget.Material.ExpandableListView.White"/>
+ <style name="Widget.DeviceDefault.FastScroll" parent="Widget.Material.FastScroll"/>
<!-- The FragmentBreadCrumbs widget is deprecated starting in API level 21 ({@link android.os.Build.VERSION_CODES#.L}). -->
<style name="Widget.DeviceDefault.FragmentBreadCrumbs" parent="Widget.Holo.FragmentBreadCrumbs"/>
- <style name="Widget.DeviceDefault.Gallery" parent="Widget.Quantum.Gallery"/>
- <style name="Widget.DeviceDefault.GestureOverlayView" parent="Widget.Quantum.GestureOverlayView"/>
- <style name="Widget.DeviceDefault.ImageWell" parent="Widget.Quantum.ImageWell"/>
- <style name="Widget.DeviceDefault.KeyboardView" parent="Widget.Quantum.KeyboardView"/>
- <style name="Widget.DeviceDefault.ListView.White" parent="Widget.Quantum.ListView.White"/>
- <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton" />
- <style name="Widget.DeviceDefault.NumberPicker" parent="Widget.Quantum.NumberPicker"/>
- <style name="Widget.DeviceDefault.PreferenceFrameLayout" parent="Widget.Quantum.PreferenceFrameLayout"/>
- <style name="Widget.DeviceDefault.ProgressBar.Inverse" parent="Widget.Quantum.ProgressBar.Inverse"/>
- <style name="Widget.DeviceDefault.ProgressBar.Large.Inverse" parent="Widget.Quantum.ProgressBar.Large.Inverse"/>
- <style name="Widget.DeviceDefault.ProgressBar.Small.Inverse" parent="Widget.Quantum.ProgressBar.Small.Inverse"/>
- <style name="Widget.DeviceDefault.QuickContactBadge.WindowLarge" parent="Widget.Quantum.QuickContactBadge.WindowLarge"/>
- <style name="Widget.DeviceDefault.QuickContactBadge.WindowMedium" parent="Widget.Quantum.QuickContactBadge.WindowMedium"/>
- <style name="Widget.DeviceDefault.QuickContactBadge.WindowSmall" parent="Widget.Quantum.QuickContactBadge.WindowSmall"/>
- <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge" parent="Widget.Quantum.QuickContactBadgeSmall.WindowLarge"/>
- <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium" parent="Widget.Quantum.QuickContactBadgeSmall.WindowMedium"/>
- <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall" parent="Widget.Quantum.QuickContactBadgeSmall.WindowSmall"/>
- <style name="Widget.DeviceDefault.Spinner.DropDown" parent="Widget.Quantum.Spinner.DropDown"/>
- <style name="Widget.DeviceDefault.StackView" parent="Widget.Quantum.StackView"/>
- <style name="Widget.DeviceDefault.TextSelectHandle" parent="Widget.Quantum.TextSelectHandle"/>
- <style name="Widget.DeviceDefault.TextSuggestionsPopupWindow" parent="Widget.Quantum.TextSuggestionsPopupWindow"/>
- <style name="Widget.DeviceDefault.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/>
- <style name="Widget.DeviceDefault.TimePicker" parent="Widget.Quantum.TimePicker"/>
+ <style name="Widget.DeviceDefault.Gallery" parent="Widget.Material.Gallery"/>
+ <style name="Widget.DeviceDefault.GestureOverlayView" parent="Widget.Material.GestureOverlayView"/>
+ <style name="Widget.DeviceDefault.ImageWell" parent="Widget.Material.ImageWell"/>
+ <style name="Widget.DeviceDefault.KeyboardView" parent="Widget.Material.KeyboardView"/>
+ <style name="Widget.DeviceDefault.ListView.White" parent="Widget.Material.ListView.White"/>
+ <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Material.MediaRouteButton" />
+ <style name="Widget.DeviceDefault.NumberPicker" parent="Widget.Material.NumberPicker"/>
+ <style name="Widget.DeviceDefault.PreferenceFrameLayout" parent="Widget.Material.PreferenceFrameLayout"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Inverse" parent="Widget.Material.ProgressBar.Inverse"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Large.Inverse" parent="Widget.Material.ProgressBar.Large.Inverse"/>
+ <style name="Widget.DeviceDefault.ProgressBar.Small.Inverse" parent="Widget.Material.ProgressBar.Small.Inverse"/>
+ <style name="Widget.DeviceDefault.QuickContactBadge.WindowLarge" parent="Widget.Material.QuickContactBadge.WindowLarge"/>
+ <style name="Widget.DeviceDefault.QuickContactBadge.WindowMedium" parent="Widget.Material.QuickContactBadge.WindowMedium"/>
+ <style name="Widget.DeviceDefault.QuickContactBadge.WindowSmall" parent="Widget.Material.QuickContactBadge.WindowSmall"/>
+ <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge" parent="Widget.Material.QuickContactBadgeSmall.WindowLarge"/>
+ <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium" parent="Widget.Material.QuickContactBadgeSmall.WindowMedium"/>
+ <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall" parent="Widget.Material.QuickContactBadgeSmall.WindowSmall"/>
+ <style name="Widget.DeviceDefault.Spinner.DropDown" parent="Widget.Material.Spinner.DropDown"/>
+ <style name="Widget.DeviceDefault.StackView" parent="Widget.Material.StackView"/>
+ <style name="Widget.DeviceDefault.TextSelectHandle" parent="Widget.Material.TextSelectHandle"/>
+ <style name="Widget.DeviceDefault.TextSuggestionsPopupWindow" parent="Widget.Material.TextSuggestionsPopupWindow"/>
+ <style name="Widget.DeviceDefault.TextView.ListSeparator" parent="Widget.Material.TextView.ListSeparator"/>
+ <style name="Widget.DeviceDefault.TimePicker" parent="Widget.Material.TimePicker"/>
- <style name="Widget.DeviceDefault.Light" parent="Widget.Quantum.Light"/>
- <style name="Widget.DeviceDefault.Light.Button" parent="Widget.Quantum.Light.Button"/>
- <style name="Widget.DeviceDefault.Light.Button.Small" parent="Widget.Quantum.Light.Button.Small"/>
- <style name="Widget.DeviceDefault.Light.Button.Inset" parent="Widget.Quantum.Light.Button.Inset"/>
- <style name="Widget.DeviceDefault.Light.Button.Toggle" parent="Widget.Quantum.Light.Button.Toggle"/>
- <style name="Widget.DeviceDefault.Light.StackView" parent="Widget.Quantum.Light.StackView"/>
- <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Quantum.Light.TextView"/>
- <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Quantum.Light.CheckedTextView"/>
- <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Quantum.Light.AutoCompleteTextView"/>
- <style name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" parent="Widget.Quantum.Light.CompoundButton.CheckBox"/>
- <style name="Widget.DeviceDefault.Light.ListView.DropDown" parent="Widget.Quantum.Light.ListView.DropDown"/>
- <style name="Widget.DeviceDefault.Light.EditText" parent="Widget.Quantum.Light.EditText"/>
- <style name="Widget.DeviceDefault.Light.ExpandableListView" parent="Widget.Quantum.Light.ExpandableListView"/>
- <style name="Widget.DeviceDefault.Light.FastScroll" parent="Widget.Quantum.Light.FastScroll"/>
+ <style name="Widget.DeviceDefault.Light" parent="Widget.Material.Light"/>
+ <style name="Widget.DeviceDefault.Light.Button" parent="Widget.Material.Light.Button"/>
+ <style name="Widget.DeviceDefault.Light.Button.Small" parent="Widget.Material.Light.Button.Small"/>
+ <style name="Widget.DeviceDefault.Light.Button.Inset" parent="Widget.Material.Light.Button.Inset"/>
+ <style name="Widget.DeviceDefault.Light.Button.Toggle" parent="Widget.Material.Light.Button.Toggle"/>
+ <style name="Widget.DeviceDefault.Light.StackView" parent="Widget.Material.Light.StackView"/>
+ <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Material.Light.TextView"/>
+ <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Material.Light.CheckedTextView"/>
+ <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Material.Light.AutoCompleteTextView"/>
+ <style name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" parent="Widget.Material.Light.CompoundButton.CheckBox"/>
+ <style name="Widget.DeviceDefault.Light.ListView.DropDown" parent="Widget.Material.Light.ListView.DropDown"/>
+ <style name="Widget.DeviceDefault.Light.EditText" parent="Widget.Material.Light.EditText"/>
+ <style name="Widget.DeviceDefault.Light.ExpandableListView" parent="Widget.Material.Light.ExpandableListView"/>
+ <style name="Widget.DeviceDefault.Light.FastScroll" parent="Widget.Material.Light.FastScroll"/>
<!-- The FragmentBreadCrumbs widget is deprecated starting in API level 21 ({@link android.os.Build.VERSION_CODES#.L}). -->
<style name="Widget.DeviceDefault.Light.FragmentBreadCrumbs" parent="Widget.Holo.Light.FragmentBreadCrumbs"/>
- <style name="Widget.DeviceDefault.Light.GridView" parent="Widget.Quantum.Light.GridView"/>
- <style name="Widget.DeviceDefault.Light.ImageButton" parent="Widget.Quantum.Light.ImageButton"/>
- <style name="Widget.DeviceDefault.Light.ListView" parent="Widget.Quantum.Light.ListView"/>
- <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Quantum.Light.MediaRouteButton" />
- <style name="Widget.DeviceDefault.Light.PopupWindow" parent="Widget.Quantum.Light.PopupWindow"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar" parent="Widget.Quantum.Light.ProgressBar"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" parent="Widget.Quantum.Light.ProgressBar.Horizontal"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Small" parent="Widget.Quantum.Light.ProgressBar.Small"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" parent="Widget.Quantum.Light.ProgressBar.Small.Title"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Large" parent="Widget.Quantum.Light.ProgressBar.Large"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Inverse" parent="Widget.Quantum.Light.ProgressBar.Inverse"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" parent="Widget.Quantum.Light.ProgressBar.Small.Inverse"/>
- <style name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" parent="Widget.Quantum.Light.ProgressBar.Large.Inverse"/>
- <style name="Widget.DeviceDefault.Light.SeekBar" parent="Widget.Quantum.Light.SeekBar"/>
- <style name="Widget.DeviceDefault.Light.RatingBar" parent="Widget.Quantum.Light.RatingBar"/>
- <style name="Widget.DeviceDefault.Light.RatingBar.Indicator" parent="Widget.Quantum.Light.RatingBar.Indicator"/>
- <style name="Widget.DeviceDefault.Light.RatingBar.Small" parent="Widget.Quantum.Light.RatingBar.Small"/>
- <style name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" parent="Widget.Quantum.Light.CompoundButton.RadioButton"/>
- <style name="Widget.DeviceDefault.Light.ScrollView" parent="Widget.Quantum.Light.ScrollView"/>
- <style name="Widget.DeviceDefault.Light.HorizontalScrollView" parent="Widget.Quantum.Light.HorizontalScrollView"/>
- <style name="Widget.DeviceDefault.Light.Spinner" parent="Widget.Quantum.Light.Spinner"/>
- <style name="Widget.DeviceDefault.Light.CompoundButton.Star" parent="Widget.Quantum.Light.CompoundButton.Star"/>
- <style name="Widget.DeviceDefault.Light.TabWidget" parent="Widget.Quantum.Light.TabWidget"/>
- <style name="Widget.DeviceDefault.Light.WebTextView" parent="Widget.Quantum.Light.WebTextView"/>
- <style name="Widget.DeviceDefault.Light.WebView" parent="Widget.Quantum.Light.WebView"/>
- <style name="Widget.DeviceDefault.Light.DropDownItem" parent="Widget.Quantum.Light.DropDownItem"/>
- <style name="Widget.DeviceDefault.Light.DropDownItem.Spinner" parent="Widget.Quantum.Light.DropDownItem.Spinner"/>
- <style name="Widget.DeviceDefault.Light.TextView.SpinnerItem" parent="Widget.Quantum.Light.TextView.SpinnerItem"/>
- <style name="Widget.DeviceDefault.Light.ListPopupWindow" parent="Widget.Quantum.Light.ListPopupWindow"/>
- <style name="Widget.DeviceDefault.Light.PopupMenu" parent="Widget.Quantum.Light.PopupMenu"/>
- <style name="Widget.DeviceDefault.Light.Tab" parent="Widget.Quantum.Light.Tab"/>
- <style name="Widget.DeviceDefault.Light.CalendarView" parent="Widget.Quantum.Light.CalendarView"/>
- <style name="Widget.DeviceDefault.Light.Button.Borderless.Small" parent="Widget.Quantum.Light.Button.Borderless.Small"/>
- <style name="Widget.DeviceDefault.Light.ActionButton" parent="Widget.Quantum.Light.ActionButton"/>
- <style name="Widget.DeviceDefault.Light.ActionButton.Overflow" parent="Widget.Quantum.Light.ActionButton.Overflow"/>
- <style name="Widget.DeviceDefault.Light.ActionMode" parent="Widget.Quantum.Light.ActionMode"/>
- <style name="Widget.DeviceDefault.Light.ActionButton.CloseMode" parent="Widget.Quantum.Light.ActionButton.CloseMode"/>
- <style name="Widget.DeviceDefault.Light.ActionBar" parent="Widget.Quantum.Light.ActionBar"/>
- <style name="Widget.DeviceDefault.Light.ActionBar.TabView" parent="Widget.Quantum.Light.ActionBar.TabView"/>
- <style name="Widget.DeviceDefault.Light.ActionBar.TabText" parent="Widget.Quantum.Light.ActionBar.TabText"/>
- <style name="Widget.DeviceDefault.Light.ActionBar.TabBar" parent="Widget.Quantum.Light.ActionBar.TabBar"/>
- <style name="Widget.DeviceDefault.Light.ActionBar.Solid" parent="Widget.Quantum.Light.ActionBar.Solid"/>
+ <style name="Widget.DeviceDefault.Light.GridView" parent="Widget.Material.Light.GridView"/>
+ <style name="Widget.DeviceDefault.Light.ImageButton" parent="Widget.Material.Light.ImageButton"/>
+ <style name="Widget.DeviceDefault.Light.ListView" parent="Widget.Material.Light.ListView"/>
+ <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Material.Light.MediaRouteButton" />
+ <style name="Widget.DeviceDefault.Light.PopupWindow" parent="Widget.Material.Light.PopupWindow"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar" parent="Widget.Material.Light.ProgressBar"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" parent="Widget.Material.Light.ProgressBar.Horizontal"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Small" parent="Widget.Material.Light.ProgressBar.Small"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" parent="Widget.Material.Light.ProgressBar.Small.Title"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Large" parent="Widget.Material.Light.ProgressBar.Large"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Inverse" parent="Widget.Material.Light.ProgressBar.Inverse"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" parent="Widget.Material.Light.ProgressBar.Small.Inverse"/>
+ <style name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" parent="Widget.Material.Light.ProgressBar.Large.Inverse"/>
+ <style name="Widget.DeviceDefault.Light.SeekBar" parent="Widget.Material.Light.SeekBar"/>
+ <style name="Widget.DeviceDefault.Light.RatingBar" parent="Widget.Material.Light.RatingBar"/>
+ <style name="Widget.DeviceDefault.Light.RatingBar.Indicator" parent="Widget.Material.Light.RatingBar.Indicator"/>
+ <style name="Widget.DeviceDefault.Light.RatingBar.Small" parent="Widget.Material.Light.RatingBar.Small"/>
+ <style name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" parent="Widget.Material.Light.CompoundButton.RadioButton"/>
+ <style name="Widget.DeviceDefault.Light.ScrollView" parent="Widget.Material.Light.ScrollView"/>
+ <style name="Widget.DeviceDefault.Light.HorizontalScrollView" parent="Widget.Material.Light.HorizontalScrollView"/>
+ <style name="Widget.DeviceDefault.Light.Spinner" parent="Widget.Material.Light.Spinner"/>
+ <style name="Widget.DeviceDefault.Light.CompoundButton.Star" parent="Widget.Material.Light.CompoundButton.Star"/>
+ <style name="Widget.DeviceDefault.Light.TabWidget" parent="Widget.Material.Light.TabWidget"/>
+ <style name="Widget.DeviceDefault.Light.WebTextView" parent="Widget.Material.Light.WebTextView"/>
+ <style name="Widget.DeviceDefault.Light.WebView" parent="Widget.Material.Light.WebView"/>
+ <style name="Widget.DeviceDefault.Light.DropDownItem" parent="Widget.Material.Light.DropDownItem"/>
+ <style name="Widget.DeviceDefault.Light.DropDownItem.Spinner" parent="Widget.Material.Light.DropDownItem.Spinner"/>
+ <style name="Widget.DeviceDefault.Light.TextView.SpinnerItem" parent="Widget.Material.Light.TextView.SpinnerItem"/>
+ <style name="Widget.DeviceDefault.Light.ListPopupWindow" parent="Widget.Material.Light.ListPopupWindow"/>
+ <style name="Widget.DeviceDefault.Light.PopupMenu" parent="Widget.Material.Light.PopupMenu"/>
+ <style name="Widget.DeviceDefault.Light.Tab" parent="Widget.Material.Light.Tab"/>
+ <style name="Widget.DeviceDefault.Light.CalendarView" parent="Widget.Material.Light.CalendarView"/>
+ <style name="Widget.DeviceDefault.Light.Button.Borderless.Small" parent="Widget.Material.Light.Button.Borderless.Small"/>
+ <style name="Widget.DeviceDefault.Light.ActionButton" parent="Widget.Material.Light.ActionButton"/>
+ <style name="Widget.DeviceDefault.Light.ActionButton.Overflow" parent="Widget.Material.Light.ActionButton.Overflow"/>
+ <style name="Widget.DeviceDefault.Light.ActionMode" parent="Widget.Material.Light.ActionMode"/>
+ <style name="Widget.DeviceDefault.Light.ActionButton.CloseMode" parent="Widget.Material.Light.ActionButton.CloseMode"/>
+ <style name="Widget.DeviceDefault.Light.ActionBar" parent="Widget.Material.Light.ActionBar"/>
+ <style name="Widget.DeviceDefault.Light.ActionBar.TabView" parent="Widget.Material.Light.ActionBar.TabView"/>
+ <style name="Widget.DeviceDefault.Light.ActionBar.TabText" parent="Widget.Material.Light.ActionBar.TabText"/>
+ <style name="Widget.DeviceDefault.Light.ActionBar.TabBar" parent="Widget.Material.Light.ActionBar.TabBar"/>
+ <style name="Widget.DeviceDefault.Light.ActionBar.Solid" parent="Widget.Material.Light.ActionBar.Solid"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
<style name="Widget.DeviceDefault.Light.ActionBar.Solid.Inverse" parent="Widget.Holo.Light.ActionBar.Solid.Inverse"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
@@ -185,98 +185,98 @@ easier.
<style name="Widget.DeviceDefault.Light.ActionBar.TabText.Inverse" parent="Widget.Holo.Light.ActionBar.TabText.Inverse"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
<style name="Widget.DeviceDefault.Light.ActionMode.Inverse" parent="Widget.Holo.Light.ActionMode.Inverse"/>
- <style name="Widget.DeviceDefault.Light.AbsListView" parent="Widget.Quantum.Light.AbsListView"/>
- <style name="Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Light.Spinner.DropDown.ActionBar"/>
- <style name="Widget.DeviceDefault.Light.PopupWindow.ActionMode" parent="Widget.Quantum.Light.PopupWindow.ActionMode"/>
- <style name="Widget.DeviceDefault.Light.Button.Borderless" parent="Widget.Quantum.Light.Button.Borderless"/>
- <style name="Widget.DeviceDefault.Light.DatePicker" parent="Widget.Quantum.Light.DatePicker"/>
- <style name="Widget.DeviceDefault.Light.ExpandableListView.White" parent="Widget.Quantum.Light.ExpandableListView.White"/>
- <style name="Widget.DeviceDefault.Light.Gallery" parent="Widget.Quantum.Light.Gallery"/>
- <style name="Widget.DeviceDefault.Light.GestureOverlayView" parent="Widget.Quantum.Light.GestureOverlayView"/>
- <style name="Widget.DeviceDefault.Light.ImageWell" parent="Widget.Quantum.Light.ImageWell"/>
- <style name="Widget.DeviceDefault.Light.ListView.White" parent="Widget.Quantum.Light.ListView.White"/>
- <style name="Widget.DeviceDefault.Light.NumberPicker" parent="Widget.Quantum.Light.NumberPicker"/>
- <style name="Widget.DeviceDefault.Light.Spinner.DropDown" parent="Widget.Quantum.Light.Spinner.DropDown"/>
- <style name="Widget.DeviceDefault.Light.TextView.ListSeparator" parent="Widget.Quantum.Light.TextView.ListSeparator"/>
- <style name="Widget.DeviceDefault.Light.TimePicker" parent="Widget.Quantum.Light.TimePicker"/>
- <style name="Widget.DeviceDefault.Light.TextSuggestionsPopupWindow" parent="Widget.Quantum.Light.TextSuggestionsPopupWindow"/>
+ <style name="Widget.DeviceDefault.Light.AbsListView" parent="Widget.Material.Light.AbsListView"/>
+ <style name="Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar" parent="Widget.Material.Light.Spinner.DropDown.ActionBar"/>
+ <style name="Widget.DeviceDefault.Light.PopupWindow.ActionMode" parent="Widget.Material.Light.PopupWindow.ActionMode"/>
+ <style name="Widget.DeviceDefault.Light.Button.Borderless" parent="Widget.Material.Light.Button.Borderless"/>
+ <style name="Widget.DeviceDefault.Light.DatePicker" parent="Widget.Material.Light.DatePicker"/>
+ <style name="Widget.DeviceDefault.Light.ExpandableListView.White" parent="Widget.Material.Light.ExpandableListView.White"/>
+ <style name="Widget.DeviceDefault.Light.Gallery" parent="Widget.Material.Light.Gallery"/>
+ <style name="Widget.DeviceDefault.Light.GestureOverlayView" parent="Widget.Material.Light.GestureOverlayView"/>
+ <style name="Widget.DeviceDefault.Light.ImageWell" parent="Widget.Material.Light.ImageWell"/>
+ <style name="Widget.DeviceDefault.Light.ListView.White" parent="Widget.Material.Light.ListView.White"/>
+ <style name="Widget.DeviceDefault.Light.NumberPicker" parent="Widget.Material.Light.NumberPicker"/>
+ <style name="Widget.DeviceDefault.Light.Spinner.DropDown" parent="Widget.Material.Light.Spinner.DropDown"/>
+ <style name="Widget.DeviceDefault.Light.TextView.ListSeparator" parent="Widget.Material.Light.TextView.ListSeparator"/>
+ <style name="Widget.DeviceDefault.Light.TimePicker" parent="Widget.Material.Light.TimePicker"/>
+ <style name="Widget.DeviceDefault.Light.TextSuggestionsPopupWindow" parent="Widget.Material.Light.TextSuggestionsPopupWindow"/>
<!-- Text Appearance Styles -->
- <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Quantum"/>
- <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Quantum.Inverse"/>
- <style name="TextAppearance.DeviceDefault.Large" parent="TextAppearance.Quantum.Large"/>
- <style name="TextAppearance.DeviceDefault.Large.Inverse" parent="TextAppearance.Quantum.Large.Inverse"/>
- <style name="TextAppearance.DeviceDefault.Medium" parent="TextAppearance.Quantum.Medium"/>
- <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Quantum.Medium.Inverse"/>
- <style name="TextAppearance.DeviceDefault.Small" parent="TextAppearance.Quantum.Small"/>
- <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Quantum.Small.Inverse"/>
- <style name="TextAppearance.DeviceDefault.SearchResult.Title" parent="TextAppearance.Quantum.SearchResult.Title"/>
- <style name="TextAppearance.DeviceDefault.SearchResult.Subtitle" parent="TextAppearance.Quantum.SearchResult.Subtitle"/>
- <style name="TextAppearance.DeviceDefault.TimePicker.TimeLabel" parent="TextAppearance.Quantum.TimePicker.TimeLabel"/>
- <style name="TextAppearance.DeviceDefault.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.TimePicker.AmPmLabel"/>
- <style name="TextAppearance.DeviceDefault.Widget" parent="TextAppearance.Quantum.Widget"/>
- <style name="TextAppearance.DeviceDefault.Widget.Button" parent="TextAppearance.Quantum.Widget.Button"/>
- <style name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Widget.IconMenu.Item"/>
- <style name="TextAppearance.DeviceDefault.Widget.TabWidget" parent="TextAppearance.Quantum.Widget.TabWidget"/>
- <style name="TextAppearance.DeviceDefault.Widget.TextView" parent="TextAppearance.Quantum.Widget.TextView"/>
- <style name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" parent="TextAppearance.Quantum.Widget.TextView.PopupMenu"/>
- <style name="TextAppearance.DeviceDefault.Widget.DropDownHint" parent="TextAppearance.Quantum.Widget.DropDownHint"/>
- <style name="TextAppearance.DeviceDefault.Widget.DropDownItem" parent="TextAppearance.Quantum.Widget.DropDownItem"/>
- <style name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" parent="TextAppearance.Quantum.Widget.TextView.SpinnerItem"/>
- <style name="TextAppearance.DeviceDefault.Widget.EditText" parent="TextAppearance.Quantum.Widget.EditText"/>
- <style name="TextAppearance.DeviceDefault.Widget.PopupMenu" parent="TextAppearance.Quantum.Widget.PopupMenu"/>
- <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" parent="TextAppearance.Quantum.Widget.PopupMenu.Large"/>
- <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" parent="TextAppearance.Quantum.Widget.PopupMenu.Small"/>
- <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" parent="TextAppearance.Quantum.Widget.ActionBar.Title"/>
- <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" parent="TextAppearance.Quantum.Widget.ActionBar.Subtitle"/>
- <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Widget.ActionMode.Title"/>
- <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle"/>
- <style name="TextAppearance.DeviceDefault.WindowTitle" parent="TextAppearance.Quantum.WindowTitle"/>
- <style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Quantum.DialogWindowTitle"/>
+ <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Material"/>
+ <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Material.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Large" parent="TextAppearance.Material.Large"/>
+ <style name="TextAppearance.DeviceDefault.Large.Inverse" parent="TextAppearance.Material.Large.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Medium" parent="TextAppearance.Material.Medium"/>
+ <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Material.Medium.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Small" parent="TextAppearance.Material.Small"/>
+ <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Material.Small.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.SearchResult.Title" parent="TextAppearance.Material.SearchResult.Title"/>
+ <style name="TextAppearance.DeviceDefault.SearchResult.Subtitle" parent="TextAppearance.Material.SearchResult.Subtitle"/>
+ <style name="TextAppearance.DeviceDefault.TimePicker.TimeLabel" parent="TextAppearance.Material.TimePicker.TimeLabel"/>
+ <style name="TextAppearance.DeviceDefault.TimePicker.AmPmLabel" parent="TextAppearance.Material.TimePicker.AmPmLabel"/>
+ <style name="TextAppearance.DeviceDefault.Widget" parent="TextAppearance.Material.Widget"/>
+ <style name="TextAppearance.DeviceDefault.Widget.Button" parent="TextAppearance.Material.Widget.Button"/>
+ <style name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" parent="TextAppearance.Material.Widget.IconMenu.Item"/>
+ <style name="TextAppearance.DeviceDefault.Widget.TabWidget" parent="TextAppearance.Material.Widget.TabWidget"/>
+ <style name="TextAppearance.DeviceDefault.Widget.TextView" parent="TextAppearance.Material.Widget.TextView"/>
+ <style name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" parent="TextAppearance.Material.Widget.TextView.PopupMenu"/>
+ <style name="TextAppearance.DeviceDefault.Widget.DropDownHint" parent="TextAppearance.Material.Widget.DropDownHint"/>
+ <style name="TextAppearance.DeviceDefault.Widget.DropDownItem" parent="TextAppearance.Material.Widget.DropDownItem"/>
+ <style name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" parent="TextAppearance.Material.Widget.TextView.SpinnerItem"/>
+ <style name="TextAppearance.DeviceDefault.Widget.EditText" parent="TextAppearance.Material.Widget.EditText"/>
+ <style name="TextAppearance.DeviceDefault.Widget.PopupMenu" parent="TextAppearance.Material.Widget.PopupMenu"/>
+ <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" parent="TextAppearance.Material.Widget.PopupMenu.Large"/>
+ <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" parent="TextAppearance.Material.Widget.PopupMenu.Small"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" parent="TextAppearance.Material.Widget.ActionBar.Title"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" parent="TextAppearance.Material.Widget.ActionBar.Subtitle"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" parent="TextAppearance.Material.Widget.ActionMode.Title"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" parent="TextAppearance.Material.Widget.ActionMode.Subtitle"/>
+ <style name="TextAppearance.DeviceDefault.WindowTitle" parent="TextAppearance.Material.WindowTitle"/>
+ <style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Material.DialogWindowTitle"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
- <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Material.Widget.ActionBar.Title.Inverse"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
- <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
- <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Material.Widget.ActionMode.Title.Inverse"/>
<!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
- <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse"/>
- <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Widget.ActionBar.Menu"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse"/>
+ <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" parent="TextAppearance.Material.Widget.ActionBar.Menu"/>
<!-- Preference Styles -->
- <style name="Preference.DeviceDefault" parent="Preference.Quantum"/>
- <style name="Preference.DeviceDefault.Category" parent="Preference.Quantum.Category"/>
- <style name="Preference.DeviceDefault.CheckBoxPreference" parent="Preference.Quantum.CheckBoxPreference"/>
- <style name="Preference.DeviceDefault.DialogPreference" parent="Preference.Quantum.DialogPreference"/>
- <style name="Preference.DeviceDefault.DialogPreference.EditTextPreference" parent="Preference.Quantum.DialogPreference.EditTextPreference"/>
- <style name="Preference.DeviceDefault.DialogPreference.YesNoPreference" parent="Preference.Quantum.DialogPreference.YesNoPreference"/>
- <style name="Preference.DeviceDefault.Information" parent="Preference.Quantum.Information"/>
- <style name="Preference.DeviceDefault.PreferenceScreen" parent="Preference.Quantum.PreferenceScreen"/>
- <style name="Preference.DeviceDefault.RingtonePreference" parent="Preference.Quantum.RingtonePreference"/>
- <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Quantum.SwitchPreference"/>
+ <style name="Preference.DeviceDefault" parent="Preference.Material"/>
+ <style name="Preference.DeviceDefault.Category" parent="Preference.Material.Category"/>
+ <style name="Preference.DeviceDefault.CheckBoxPreference" parent="Preference.Material.CheckBoxPreference"/>
+ <style name="Preference.DeviceDefault.DialogPreference" parent="Preference.Material.DialogPreference"/>
+ <style name="Preference.DeviceDefault.DialogPreference.EditTextPreference" parent="Preference.Material.DialogPreference.EditTextPreference"/>
+ <style name="Preference.DeviceDefault.DialogPreference.YesNoPreference" parent="Preference.Material.DialogPreference.YesNoPreference"/>
+ <style name="Preference.DeviceDefault.Information" parent="Preference.Material.Information"/>
+ <style name="Preference.DeviceDefault.PreferenceScreen" parent="Preference.Material.PreferenceScreen"/>
+ <style name="Preference.DeviceDefault.RingtonePreference" parent="Preference.Material.RingtonePreference"/>
+ <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Material.SwitchPreference"/>
<!-- AlertDialog Styles -->
- <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Quantum"/>
- <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Quantum.Light"/>
+ <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Material"/>
+ <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Material.Light"/>
<!-- Animation Styles -->
- <style name="Animation.DeviceDefault.Activity" parent="Animation.Quantum.Activity"/>
- <style name="Animation.DeviceDefault.Dialog" parent="Animation.Quantum.Dialog"/>
+ <style name="Animation.DeviceDefault.Activity" parent="Animation.Material.Activity"/>
+ <style name="Animation.DeviceDefault.Dialog" parent="Animation.Material.Dialog"/>
<!-- DialogWindowTitle Styles -->
- <style name="DialogWindowTitle.DeviceDefault" parent="DialogWindowTitle.Quantum"/>
- <style name="DialogWindowTitle.DeviceDefault.Light" parent="DialogWindowTitle.Quantum.Light"/>
+ <style name="DialogWindowTitle.DeviceDefault" parent="DialogWindowTitle.Material"/>
+ <style name="DialogWindowTitle.DeviceDefault.Light" parent="DialogWindowTitle.Material.Light"/>
<!-- WindowTitle Styles -->
- <style name="WindowTitle.DeviceDefault" parent="WindowTitle.Quantum"/>
- <style name="WindowTitleBackground.DeviceDefault" parent="WindowTitleBackground.Quantum"/>
+ <style name="WindowTitle.DeviceDefault" parent="WindowTitle.Material"/>
+ <style name="WindowTitleBackground.DeviceDefault" parent="WindowTitleBackground.Material"/>
<!-- Other Styles -->
- <style name="DeviceDefault.ButtonBar" parent="Widget.Quantum.ButtonBar"/>
- <style name="DeviceDefault.ButtonBar.AlertDialog" parent="Widget.Quantum.ButtonBar.AlertDialog"/>
- <style name="DeviceDefault.SegmentedButton" parent="Widget.Quantum.SegmentedButton"/>
+ <style name="DeviceDefault.ButtonBar" parent="Widget.Material.ButtonBar"/>
+ <style name="DeviceDefault.ButtonBar.AlertDialog" parent="Widget.Material.ButtonBar.AlertDialog"/>
+ <style name="DeviceDefault.SegmentedButton" parent="Widget.Material.SegmentedButton"/>
- <style name="DeviceDefault.Light.ButtonBar" parent="Widget.Quantum.Light.ButtonBar"/>
- <style name="DeviceDefault.Light.ButtonBar.AlertDialog" parent="Widget.Quantum.Light.ButtonBar.AlertDialog"/>
- <style name="DeviceDefault.Light.SegmentedButton" parent="Widget.Quantum.Light.SegmentedButton"/>
+ <style name="DeviceDefault.Light.ButtonBar" parent="Widget.Material.Light.ButtonBar"/>
+ <style name="DeviceDefault.Light.ButtonBar.AlertDialog" parent="Widget.Material.Light.ButtonBar.AlertDialog"/>
+ <style name="DeviceDefault.Light.SegmentedButton" parent="Widget.Material.Light.SegmentedButton"/>
</resources>
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
new file mode 100644
index 000000000000..a40835c58e90
--- /dev/null
+++ b/core/res/res/values/styles_material.xml
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+===============================================================
+ PLEASE READ
+===============================================================
+
+The Material themes must not be modified in order to pass CTS.
+Many related themes and styles depend on other values defined in this file.
+If you would like to provide custom themes and styles for your device,
+please see styles_device_defaults.xml.
+
+===============================================================
+ PLEASE READ
+===============================================================
+ -->
+<resources>
+ <!-- Preference styles -->
+ <eat-comment/>
+
+ <style name="Preference.Material">
+ <item name="layout">@layout/preference_material</item>
+ </style>
+
+ <style name="PreferenceFragment.Material">
+ <item name="paddingStart">@dimen/preference_fragment_padding_side</item>
+ <item name="paddingEnd">@dimen/preference_fragment_padding_side</item>
+ </style>
+
+ <style name="Preference.Material.Information">
+ <item name="layout">@layout/preference_information_material</item>
+ <item name="enabled">false</item>
+ <item name="shouldDisableView">false</item>
+ </style>
+
+ <style name="Preference.Material.Category">
+ <item name="layout">@layout/preference_category_material</item>
+ <!-- The title should not dim if the category is disabled, instead only the preference children should dim. -->
+ <item name="shouldDisableView">false</item>
+ <item name="selectable">false</item>
+ </style>
+
+ <style name="Preference.Material.CheckBoxPreference">
+ <item name="widgetLayout">@layout/preference_widget_checkbox</item>
+ </style>
+
+ <style name="Preference.Material.SwitchPreference">
+ <item name="widgetLayout">@layout/preference_widget_switch</item>
+ <item name="switchTextOn">@string/capital_on</item>
+ <item name="switchTextOff">@string/capital_off</item>
+ </style>
+
+ <style name="Preference.Material.PreferenceScreen"/>
+
+ <style name="Preference.Material.DialogPreference">
+ <item name="positiveButtonText">@string/ok</item>
+ <item name="negativeButtonText">@string/cancel</item>
+ </style>
+
+ <style name="Preference.Material.DialogPreference.YesNoPreference">
+ <item name="positiveButtonText">@string/yes</item>
+ <item name="negativeButtonText">@string/no</item>
+ </style>
+
+ <style name="Preference.Material.DialogPreference.EditTextPreference">
+ <item name="dialogLayout">@layout/preference_dialog_edittext</item>
+ </style>
+
+ <style name="Preference.Material.RingtonePreference">
+ <item name="ringtoneType">ringtone</item>
+ <item name="showSilent">true</item>
+ <item name="showDefault">true</item>
+ </style>
+
+ <!-- Begin Material theme styles -->
+
+ <!-- Text styles -->
+
+ <style name="TextAppearance.Material">
+ <item name="textColor">?attr/textColorPrimary</item>
+ <item name="textColorHint">?attr/textColorHint</item>
+ <item name="textColorHighlight">?attr/textColorHighlight</item>
+ <item name="textColorLink">?attr/textColorLink</item>
+ <item name="textSize">@dimen/text_size_body_1_material</item>
+ <item name="fontFamily">@string/font_family_body_1_material</item>
+ </style>
+
+ <style name="TextAppearance.Material.Display4">
+ <item name="textSize">@dimen/text_size_display_4_material</item>
+ <item name="fontFamily">@string/font_family_display_4_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Display3">
+ <item name="textSize">@dimen/text_size_display_3_material</item>
+ <item name="fontFamily">@string/font_family_display_3_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Display2">
+ <item name="textSize">@dimen/text_size_display_2_material</item>
+ <item name="fontFamily">@string/font_family_display_2_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Display1">
+ <item name="textSize">@dimen/text_size_display_1_material</item>
+ <item name="fontFamily">@string/font_family_display_1_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Headline">
+ <item name="textSize">@dimen/text_size_headline_material</item>
+ <item name="fontFamily">@string/font_family_headline_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Title">
+ <item name="textSize">@dimen/text_size_title_material</item>
+ <item name="fontFamily">@string/font_family_title_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Title.Inverse">
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Subhead">
+ <item name="textSize">@dimen/text_size_subhead_material</item>
+ <item name="fontFamily">@string/font_family_subhead_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Subhead.Inverse">
+ <item name="textColor">?attr/textColorSecondaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Body2">
+ <item name="textSize">@dimen/text_size_body_2_material</item>
+ <item name="fontFamily">@string/font_family_body_2_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Body1">
+ <item name="textSize">@dimen/text_size_body_1_material</item>
+ <item name="fontFamily">@string/font_family_body_1_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Caption">
+ <item name="textSize">@dimen/text_size_caption_material</item>
+ <item name="fontFamily">@string/font_family_caption_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Menu">
+ <item name="textSize">@dimen/text_size_menu_material</item>
+ <item name="fontFamily">@string/font_family_menu_material</item>
+ </style>
+
+ <style name="TextAppearance.Material.Menu.Inverse">
+ <item name="textColor">?attr/textColorSecondaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Button">
+ <item name="textSize">@dimen/text_size_button_material</item>
+ <item name="fontFamily">@string/font_family_button_material</item>
+ <item name="textAllCaps">true</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <!-- Deprecated text styles -->
+
+ <style name="TextAppearance.Material.Inverse">
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Large">
+ <item name="textSize">@dimen/text_size_large_material</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Large.Inverse">
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Medium">
+ <item name="textSize">@dimen/text_size_medium_material</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Medium.Inverse">
+ <item name="textColor">?attr/textColorSecondaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Small">
+ <item name="textSize">@dimen/text_size_small_material</item>
+ <item name="textColor">?attr/textColorTertiary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Small.Inverse">
+ <item name="textColor">?attr/textColorTertiaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.SearchResult" />
+ <style name="TextAppearance.Material.SearchResult.Title" parent="TextAppearance.Material.Title" />
+ <style name="TextAppearance.Material.SearchResult.Subtitle" parent="TextAppearance.Material.Subhead" />
+
+ <style name="TextAppearance.Material.Widget"/>
+ <style name="TextAppearance.Material.Widget.Button" parent="TextAppearance.Material.Button" />
+
+ <style name="TextAppearance.Material.Widget.EditText">
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ </style>
+
+ <style name="TextAppearance.Material.Widget.Switch" parent="TextAppearance.Material.Button" />
+
+ <style name="TextAppearance.Material.Widget.PopupMenu"/>
+ <style name="TextAppearance.Material.Widget.PopupMenu.Large" parent="TextAppearance.Material.Menu" />
+ <style name="TextAppearance.Material.Widget.PopupMenu.Small" parent="TextAppearance.Material.Menu" />
+
+ <style name="TextAppearance.Material.Widget.DropDownHint" parent="TextAppearance.Material.Menu" />
+
+ <style name="TextAppearance.Material.Widget.IconMenu.Item" parent="TextAppearance.Material.Small">
+ <item name="textColor">?attr/textColorPrimary</item>
+ </style>
+
+ <style name="TextAppearance.Material.Widget.TabWidget" parent="TextAppearance.Material.Button" />
+
+ <style name="TextAppearance.Material.Widget.TextView">
+ <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+ <item name="textColorHint">?attr/textColorHint</item>
+ </style>
+
+ <style name="TextAppearance.Material.Widget.TextView.PopupMenu" parent="TextAppearance.Material.Menu" />
+ <style name="TextAppearance.Material.Widget.TextView.SpinnerItem" />
+
+ <style name="TextAppearance.Material.Widget.DropDownItem">
+ <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+ </style>
+
+ <style name="TextAppearance.Material.Widget.ActionMode"/>
+ <style name="TextAppearance.Material.Widget.ActionMode.Title" parent="TextAppearance.Material.Title" />
+ <style name="TextAppearance.Material.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Material.Title.Inverse" />
+ <style name="TextAppearance.Material.Widget.ActionMode.Subtitle" parent="TextAppearance.Material.Subhead" />
+ <style name="TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Material.Subhead.Inverse" />
+
+ <style name="TextAppearance.Material.Widget.ActionBar.Title" parent="TextAppearance.Material.Title" />
+ <style name="TextAppearance.Material.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Material.Title.Inverse" />
+ <style name="TextAppearance.Material.Widget.ActionBar.Subtitle" parent="TextAppearance.Material.Subhead" />
+ <style name="TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Material.Subhead.Inverse" />
+
+ <style name="TextAppearance.Material.Widget.ActionBar.Menu" parent="TextAppearance.Material.Menu">
+ <item name="textColor">?attr/actionMenuTextColor</item>
+ <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
+ </style>
+
+ <style name="TextAppearance.Material.Widget.ActionBar.Menu.Inverse" parent="TextAppearance.Material.Menu.Inverse">
+ <item name="textColor">?attr/actionMenuTextColor</item>
+ <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
+ </style>
+
+ <style name="TextAppearance.Material.WindowTitle" parent="TextAppearance.Material.Title" />
+ <style name="TextAppearance.Material.DialogWindowTitle" parent="TextAppearance.Material.Title" />
+
+ <style name="TextAppearance.Material.CalendarViewWeekDayView" parent="TextAppearance.Material.Small">
+ <item name="textStyle">bold</item>
+ <item name="textColor">#505050</item>
+ </style>
+
+ <style name="TextAppearance.Material.TimePicker.TimeLabel" parent="TextAppearance.Material">
+ <item name="textSize">@dimen/timepicker_time_label_size</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ </style>
+
+ <style name="TextAppearance.Material.TimePicker.AmPmLabel" parent="TextAppearance.Material">
+ <item name="textSize">@dimen/timepicker_ampm_label_size</item>
+ <item name="textAllCaps">true</item>
+ <item name="textColor">?attr/textColorSecondary</item>
+ <item name="textStyle">bold</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material" />
+
+ <style name="TextAppearance.StatusBar.Material.EventContent">
+ <item name="android:textColor">#90000000</item>
+ <item name="android:textSize">@dimen/notification_text_size</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material.EventContent.Title">
+ <item name="android:textColor">#DD000000</item>
+ <item name="android:textSize">@dimen/notification_title_text_size</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material.EventContent.Line2">
+ <item name="android:textSize">@dimen/notification_subtext_size</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material.EventContent.Info">
+ <item name="android:textSize">@dimen/notification_subtext_size</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material.EventContent.Time">
+ <item name="android:textSize">@dimen/notification_subtext_size</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Material.EventContent.Emphasis">
+ <item name="android:textColor">#66000000</item>
+ </style>
+
+ <style name="Widget.StatusBar.Material.ProgressBar" parent="Widget.Material.Light.ProgressBar.Horizontal">
+ </style>
+
+ <style name="Widget.StatusBar.Material.ProgressBar.Media">
+ <item name="android:progressDrawable">@drawable/notification_material_media_progress</item>
+ </style>
+
+ <!-- Widget Styles -->
+
+ <style name="Material"/>
+ <style name="Material.Light"/>
+ <style name="Widget.Material" parent="Widget" />
+
+ <!-- Bordered ink button -->
+ <style name="Widget.Material.Button" parent="Widget.Button">
+ <item name="background">@drawable/btn_default_material</item>
+ <item name="textAppearance">?attr/textAppearanceButton</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ <item name="minHeight">48dip</item>
+ <item name="minWidth">88dip</item>
+
+ <!-- TODO: Turn this back on when we support inset drawable outlines. -->
+ <!-- <item name="stateListAnimator">@anim/button_state_list_anim_material</item> -->
+ </style>
+
+ <!-- Small bordered ink button -->
+ <style name="Widget.Material.Button.Small">
+ <item name="minHeight">48dip</item>
+ <item name="minWidth">48dip</item>
+ </style>
+
+ <!-- Borderless ink button -->
+ <style name="Widget.Material.Button.Borderless">
+ <item name="background">@drawable/btn_borderless_material</item>
+ <item name="stateListAnimator">@null</item>
+ </style>
+
+ <!-- Small borderless ink button -->
+ <style name="Widget.Material.Button.Borderless.Small">
+ <item name="minHeight">48dip</item>
+ <item name="minWidth">48dip</item>
+ </style>
+
+ <style name="Widget.Material.Button.Inset">
+ <item name="background">@drawable/button_inset</item>
+ </style>
+
+ <style name="Widget.Material.Button.Toggle">
+ <item name="background">@drawable/btn_toggle_material</item>
+ <item name="textOn">@string/capital_on</item>
+ <item name="textOff">@string/capital_off</item>
+ <item name="minHeight">48dip</item>
+ </style>
+
+ <style name="Widget.Material.ButtonBar">
+ <item name="background">@null</item>
+ </style>
+
+ <style name="Widget.Material.ButtonBar.AlertDialog">
+ <item name="background">@null</item>
+ </style>
+
+ <style name="Widget.Material.SegmentedButton" parent="SegmentedButton">
+ <item name="background">@drawable/btn_group_holo_dark</item>
+ </style>
+
+ <style name="Widget.Material.StackView">
+ <item name="resOutColor">@color/holo_blue_light</item>
+ <item name="clickColor">@color/holo_blue_light</item>
+ </style>
+
+ <style name="Widget.Material.TextView" parent="Widget.TextView"/>
+
+ <style name="Widget.Material.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
+ <item name="background">@drawable/list_section_divider_material</item>
+ <item name="textAllCaps">true</item>
+ </style>
+
+ <style name="Widget.Material.TextView.SpinnerItem" parent="Widget.TextView.SpinnerItem">
+ <item name="textAppearance">@style/TextAppearance.Material.Widget.TextView.SpinnerItem</item>
+ <item name="paddingStart">8dp</item>
+ <item name="paddingEnd">8dp</item>
+ </style>
+
+ <style name="Widget.Material.CheckedTextView" parent="Widget.CheckedTextView" />
+ <style name="Widget.Material.TextSelectHandle" parent="Widget.TextSelectHandle"/>
+ <style name="Widget.Material.TextSuggestionsPopupWindow" parent="Widget.TextSuggestionsPopupWindow"/>
+ <style name="Widget.Material.AbsListView" parent="Widget.AbsListView"/>
+
+ <style name="Widget.Material.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
+ <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
+ <item name="popupBackground">@drawable/popup_background_material</item>
+ </style>
+
+ <style name="Widget.Material.CompoundButton" parent="Widget.CompoundButton"/>
+
+ <style name="Widget.Material.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox">
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.CompoundButton.RadioButton" parent="Widget.CompoundButton.RadioButton">
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+ <item name="button">@drawable/btn_star_material</item>
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.CompoundButton.Switch">
+ <item name="track">@drawable/switch_track_material</item>
+ <item name="thumb">@drawable/switch_thumb_material_anim</item>
+ <item name="splitTrack">true</item>
+ <item name="switchTextAppearance">@style/TextAppearance.Material.Widget.Switch</item>
+ <item name="textOn"></item>
+ <item name="textOff"></item>
+ <item name="switchMinWidth">4dip</item>
+ <item name="switchPadding">4dip</item>
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.EditText" parent="Widget.EditText"/>
+
+ <style name="Widget.Material.ExpandableListView" parent="Widget.Material.ListView">
+ <item name="groupIndicator">@drawable/expander_group_material</item>
+ <item name="indicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
+ <item name="indicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
+ <item name="childDivider">?attr/listDivider</item>
+ </style>
+
+ <style name="Widget.Material.ExpandableListView.White"/>
+ <style name="Widget.Material.Gallery" parent="Widget.Gallery"/>
+ <style name="Widget.Material.GestureOverlayView" parent="Widget.GestureOverlayView"/>
+
+ <style name="Widget.Material.GridView" parent="Widget.GridView">
+ <item name="android:listSelector">?attr/selectableItemBackground</item>
+ </style>
+
+ <style name="Widget.Material.CalendarView" parent="Widget.CalendarView">
+ <item name="selectedWeekBackgroundColor">#330099FF</item>
+ <item name="focusedMonthDateColor">#FFFFFFFF</item>
+ <item name="unfocusedMonthDateColor">#66FFFFFF</item>
+ <item name="weekNumberColor">#33FFFFFF</item>
+ <item name="weekSeparatorLineColor">#19FFFFFF</item>
+ <item name="selectedDateVerticalBar">@drawable/day_picker_week_view_dayline_holo</item>
+ <item name="weekDayTextAppearance">@style/TextAppearance.Material.CalendarViewWeekDayView</item>
+ </style>
+
+ <style name="Widget.Material.ImageButton" parent="Widget.ImageButton">
+ <item name="background">@drawable/btn_default_material</item>
+ </style>
+
+ <style name="Widget.Material.NumberPicker" parent="Widget.NumberPicker">
+ <item name="internalLayout">@layout/number_picker_with_selector_wheel</item>
+ <item name="solidColor">@color/transparent</item>
+ <item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
+ <item name="selectionDividerHeight">2dip</item>
+ <item name="selectionDividersDistance">48dip</item>
+ <item name="internalMinWidth">64dip</item>
+ <item name="internalMaxHeight">180dip</item>
+ <item name="virtualButtonPressedDrawable">?attr/selectableItemBackground</item>
+ </style>
+
+ <style name="Widget.Material.TimePicker" parent="Widget.TimePicker">
+ <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
+ <item name="internalLayout">@layout/time_picker_holo</item>
+ <item name="disabledColor">@color/bright_foreground_disabled_material_dark</item>
+ <item name="headerSelectedTextColor">?attr/colorControlActivated</item>
+ <item name="headerUnselectedTextColor">?attr/textColorPrimary</item>
+ <item name="headerBackgroundColor">@color/transparent</item>
+ <item name="numbersTextColor">?attr/textColorSecondary</item>
+ <item name="numbersBackgroundColor">@color/transparent</item>
+ <item name="amPmTextColor">?attr/textColorSecondary</item>
+ <item name="amPmUnselectedBackgroundColor">@color/transparent</item>
+ <item name="amPmSelectedBackgroundColor">?attr/colorControlActivated</item>
+ <item name="numbersSelectorColor">?attr/colorControlActivated</item>
+ </style>
+
+ <style name="Widget.Material.DatePicker" parent="Widget.DatePicker">
+ <item name="internalLayout">@layout/date_picker_holo</item>
+ <item name="calendarViewShown">true</item>
+ </style>
+
+ <style name="Widget.Material.ActivityChooserView" parent="Widget.ActivityChooserView">
+ <item name="background">@drawable/ab_share_pack_material</item>
+ </style>
+
+ <style name="Widget.Material.ImageWell" parent="Widget.ImageWell"/>
+
+ <style name="Widget.Material.ListView" parent="Widget.ListView">
+ <item name="divider">?attr/listDivider</item>
+ <item name="listSelector">?attr/listChoiceBackgroundIndicator</item>
+ </style>
+
+ <style name="Widget.Material.ListView.DropDown"/>
+ <style name="Widget.Material.ListView.White"/>
+
+ <style name="Widget.Material.PopupWindow" parent="Widget.PopupWindow"/>
+
+ <style name="Widget.Material.PopupWindow.ActionMode">
+ <item name="popupBackground">@drawable/popup_background_material</item>
+ <item name="popupAnimationStyle">@style/Animation.PopupWindow.ActionMode</item>
+ </style>
+
+ <style name="Widget.Material.ProgressBar" parent="Widget.ProgressBar">
+ <item name="indeterminateDrawable">@drawable/progress_medium_material</item>
+ </style>
+
+ <style name="Widget.Material.ProgressBar.Inverse"/>
+
+ <style name="Widget.Material.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal">
+ <item name="progressDrawable">@drawable/progress_horizontal_material</item>
+ <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
+ <item name="minHeight">16dip</item>
+ <item name="maxHeight">16dip</item>
+ </style>
+
+ <style name="Widget.Material.ProgressBar.Small" parent="Widget.ProgressBar.Small">
+ <item name="indeterminateDrawable">@drawable/progress_small_material</item>
+ </style>
+
+ <style name="Widget.Material.ProgressBar.Small.Inverse"/>
+ <style name="Widget.Material.ProgressBar.Small.Title"/>
+
+ <style name="Widget.Material.ProgressBar.Large" parent="Widget.ProgressBar.Large">
+ <item name="indeterminateDrawable">@drawable/progress_large_material</item>
+ </style>
+
+ <style name="Widget.Material.ProgressBar.Large.Inverse"/>
+
+ <style name="Widget.Material.SeekBar">
+ <item name="indeterminateOnly">false</item>
+ <item name="progressDrawable">@drawable/scrubber_progress_horizontal_material</item>
+ <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_material</item>
+ <item name="thumb">@drawable/scrubber_control_material_anim</item>
+ <item name="splitTrack">true</item>
+ <item name="focusable">true</item>
+ <item name="paddingStart">16dip</item>
+ <item name="paddingEnd">16dip</item>
+ <item name="mirrorForRtl">true</item>
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.RatingBar" parent="Widget.RatingBar">
+ <item name="progressDrawable">@drawable/ratingbar_full_material</item>
+ <item name="indeterminateDrawable">@drawable/ratingbar_full_material</item>
+ </style>
+
+ <style name="Widget.Material.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
+ <item name="progressDrawable">@drawable/ratingbar_holo_dark</item>
+ <item name="indeterminateDrawable">@drawable/ratingbar_holo_dark</item>
+ <item name="minHeight">35dip</item>
+ <item name="maxHeight">35dip</item>
+ </style>
+
+ <style name="Widget.Material.RatingBar.Small" parent="Widget.RatingBar.Small">
+ <item name="progressDrawable">@drawable/ratingbar_small_holo_dark</item>
+ <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_dark</item>
+ <item name="minHeight">16dip</item>
+ <item name="maxHeight">16dip</item>
+ </style>
+
+ <style name="Widget.Material.ScrollView" parent="Widget.ScrollView"/>
+ <style name="Widget.Material.HorizontalScrollView" parent="Widget.HorizontalScrollView"/>
+
+ <style name="Widget.Material.Spinner" parent="Widget.Spinner.DropDown">
+ <item name="background">@drawable/spinner_background_material</item>
+ <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
+ <item name="popupBackground">@drawable/popup_background_material</item>
+ <item name="dropDownVerticalOffset">0dip</item>
+ <item name="dropDownHorizontalOffset">0dip</item>
+ <item name="dropDownWidth">wrap_content</item>
+ <item name="popupPromptView">@layout/simple_dropdown_hint</item>
+ <item name="gravity">start|center_vertical</item>
+ <item name="disableChildrenWhenDisabled">true</item>
+ </style>
+
+ <style name="Widget.Material.Spinner.DropDown"/>
+
+ <style name="Widget.Material.Spinner.DropDown.ActionBar">
+ <item name="background">@drawable/spinner_background_material</item>
+ </style>
+
+ <style name="Widget.Material.TabWidget" parent="Widget.TabWidget">
+ <item name="tabStripLeft">@null</item>
+ <item name="tabStripRight">@null</item>
+ <item name="tabStripEnabled">false</item>
+ <item name="divider">?attr/dividerVertical</item>
+ <item name="showDividers">middle</item>
+ <item name="dividerPadding">8dip</item>
+ <item name="measureWithLargestChild">true</item>
+ <item name="tabLayout">@layout/tab_indicator_material</item>
+ </style>
+
+ <style name="Widget.Material.Tab" parent="Widget.Material.ActionBar.TabView">
+ <item name="background">@drawable/tab_indicator_material</item>
+ <item name="layout_width">0dip</item>
+ <item name="layout_weight">1</item>
+ <item name="minWidth">80dip</item>
+ </style>
+
+ <style name="Widget.Material.TabText" parent="Widget.Material.ActionBar.TabText">
+ <item name="maxWidth">180dip</item>
+ </style>
+
+ <style name="Widget.Material.Toolbar" parent="Widget.Toolbar">
+ <item name="android:navigationButtonStyle">@android:style/Widget.Material.Toolbar.Button.Navigation</item>
+ </style>
+
+ <style name="Widget.Material.Toolbar.Button.Navigation" parent="Widget.Toolbar.Button.Navigation">
+ <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
+ </style>
+
+ <style name="Widget.Material.WebTextView" parent="Widget.WebTextView"/>
+
+ <style name="Widget.Material.WebView" parent="Widget.WebView"/>
+
+ <style name="Widget.Material.DropDownItem" parent="Widget.DropDownItem">
+ <item name="textAppearance">@style/TextAppearance.Material.Widget.DropDownItem</item>
+ <item name="paddingStart">8dp</item>
+ <item name="paddingEnd">8dp</item>
+ </style>
+
+ <style name="Widget.Material.DropDownItem.Spinner"/>
+
+ <style name="Widget.Material.KeyboardView" parent="Widget.KeyboardView"/>
+ <style name="Widget.Material.QuickContactBadge.WindowSmall" parent="Widget.QuickContactBadge.WindowSmall"/>
+ <style name="Widget.Material.QuickContactBadge.WindowMedium" parent="Widget.QuickContactBadge.WindowMedium"/>
+ <style name="Widget.Material.QuickContactBadge.WindowLarge" parent="Widget.QuickContactBadge.WindowLarge"/>
+ <style name="Widget.Material.QuickContactBadgeSmall.WindowSmall" parent="Widget.QuickContactBadgeSmall.WindowSmall"/>
+ <style name="Widget.Material.QuickContactBadgeSmall.WindowMedium" parent="Widget.QuickContactBadgeSmall.WindowMedium"/>
+ <style name="Widget.Material.QuickContactBadgeSmall.WindowLarge" parent="Widget.QuickContactBadgeSmall.WindowLarge"/>
+
+ <style name="Widget.Material.ListPopupWindow" parent="Widget.ListPopupWindow">
+ <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
+ <item name="popupBackground">@drawable/popup_background_material</item>
+ <item name="popupAnimationStyle">@style/Animation.Material.Popup</item>
+ <item name="dropDownVerticalOffset">0dip</item>
+ <item name="dropDownHorizontalOffset">0dip</item>
+ <item name="dropDownWidth">wrap_content</item>
+ </style>
+
+ <style name="Widget.Material.PopupMenu" parent="Widget.Material.ListPopupWindow"/>
+
+ <style name="Widget.Material.PopupMenu.Overflow">
+ <item name="overlapAnchor">true</item>
+ </style>
+
+ <style name="Widget.Material.ActionButton" parent="Widget.ActionButton">
+ <item name="minWidth">@dimen/action_button_min_width_material</item>
+ <item name="minHeight">@dimen/action_button_min_height_material</item>
+ <item name="gravity">center</item>
+ <item name="scaleType">center</item>
+ <item name="maxLines">2</item>
+ </style>
+
+ <style name="Widget.Material.ActionButton.CloseMode">
+ <item name="background">@drawable/btn_cab_done_material</item>
+ </style>
+
+ <style name="Widget.Material.ActionButton.Overflow">
+ <item name="src">@drawable/ic_menu_moreoverflow_material</item>
+ <item name="background">?attr/actionBarItemBackground</item>
+ <item name="contentDescription">@string/action_menu_overflow_description</item>
+ <item name="minWidth">@dimen/action_overflow_min_width_material</item>
+ <item name="minHeight">@dimen/action_button_min_height_material</item>
+ <item name="scaleType">center</item>
+ </style>
+
+ <style name="Widget.Material.ActionBar.TabView" parent="Widget.ActionBar.TabView">
+ <item name="background">@drawable/tab_indicator_material</item>
+ <item name="paddingStart">16dip</item>
+ <item name="paddingEnd">16dip</item>
+ </style>
+
+ <style name="Widget.Material.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">
+ <item name="divider">?attr/actionBarDivider</item>
+ <item name="showDividers">middle</item>
+ <item name="dividerPadding">12dip</item>
+ </style>
+
+ <style name="Widget.Material.ActionBar.TabText" parent="Widget.ActionBar.TabText">
+ <item name="textAppearance">@style/TextAppearance.Material.Medium</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ <item name="textSize">12sp</item>
+ <item name="textStyle">bold</item>
+ <item name="textAllCaps">true</item>
+ <item name="ellipsize">marquee</item>
+ <item name="maxLines">2</item>
+ </style>
+
+ <style name="Widget.Material.ActionBar" parent="Widget.ActionBar">
+ <item name="background">@null</item>
+ <item name="backgroundStacked">@null</item>
+ <item name="backgroundSplit">@null</item>
+ <item name="displayOptions">showTitle</item>
+ <item name="divider">?attr/dividerVertical</item>
+ <item name="titleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Title</item>
+ <item name="subtitleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Subtitle</item>
+ <item name="progressBarStyle">@style/Widget.Material.ProgressBar.Horizontal</item>
+ <item name="indeterminateProgressStyle">@style/Widget.Material.ProgressBar</item>
+ <item name="progressBarPadding">32dip</item>
+ <item name="itemPadding">8dip</item>
+ <item name="homeLayout">@layout/action_bar_home_material</item>
+ <item name="gravity">center_vertical</item>
+ <item name="contentInsetStart">16dp</item>
+ </style>
+
+ <style name="Widget.Material.ActionBar.Solid">
+ <item name="background">?attr/colorPrimary</item>
+ <item name="backgroundStacked">?attr/colorPrimary</item>
+ <item name="backgroundSplit">?attr/colorPrimary</item>
+ </style>
+
+ <style name="Widget.Material.ActionMode" parent="Widget.ActionMode">
+ <item name="titleTextStyle">@style/TextAppearance.Material.Widget.ActionMode.Title</item>
+ <item name="subtitleTextStyle">@style/TextAppearance.Material.Widget.ActionMode.Subtitle</item>
+ </style>
+
+ <style name="Widget.Material.FastScroll" parent="Widget.FastScroll">
+ <item name="thumbMinWidth">0dp</item>
+ <item name="thumbMinHeight">0dp</item>
+ </style>
+
+ <style name="Widget.Material.PreferenceFrameLayout">
+ <item name="borderTop">0dip</item>
+ <item name="borderBottom">@dimen/preference_fragment_padding_bottom</item>
+ <item name="borderLeft">?attr/preferenceFragmentPaddingSide</item>
+ <item name="borderRight">?attr/preferenceFragmentPaddingSide</item>
+ </style>
+
+ <style name="Widget.Material.MediaRouteButton">
+ <item name="background">?attr/selectableItemBackgroundBorderless</item>
+ <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_material</item>
+ <item name="minWidth">56dp</item>
+ <item name="minHeight">48dp</item>
+ <item name="focusable">true</item>
+ <item name="contentDescription">@string/media_route_button_content_description</item>
+ </style>
+
+ <!-- Light widget styles -->
+
+ <style name="Widget.Material.Light" parent="Widget.Material"/>
+ <style name="Widget.Material.Light.Button" parent="Widget.Material.Button"/>
+ <style name="Widget.Material.Light.Button.Small" parent="Widget.Material.Button.Small"/>
+ <style name="Widget.Material.Light.Button.Borderless" parent="Widget.Material.Button.Borderless"/>
+ <style name="Widget.Material.Light.Button.Borderless.Small" parent="Widget.Material.Button.Borderless.Small"/>
+ <style name="Widget.Material.Light.Button.Inset" parent="Widget.Material.Button.Inset"/>
+ <style name="Widget.Material.Light.Button.Toggle" parent="Widget.Material.Button.Toggle" />
+ <style name="Widget.Material.Light.ButtonBar" parent="Widget.Material.ButtonBar"/>
+ <style name="Widget.Material.Light.ButtonBar.AlertDialog" parent="Widget.Material.ButtonBar.AlertDialog"/>
+
+ <style name="Widget.Material.Light.SegmentedButton" parent="Widget.Material.SegmentedButton">
+ <item name="background">@drawable/btn_group_holo_light</item>
+ </style>
+
+ <style name="Widget.Material.Light.StackView" parent="Widget.Material.StackView"/>
+ <style name="Widget.Material.Light.TextView" parent="Widget.Material.TextView"/>
+ <style name="Widget.Material.Light.TextView.ListSeparator" parent="Widget.Material.TextView.ListSeparator"/>
+ <style name="Widget.Material.Light.TextView.SpinnerItem" parent="Widget.Material.TextView.SpinnerItem"/>
+ <style name="Widget.Material.Light.CheckedTextView" parent="Widget.Material.CheckedTextView"/>
+ <style name="Widget.Material.Light.TextSelectHandle" parent="Widget.Material.TextSelectHandle"/>
+ <style name="Widget.Material.Light.TextSuggestionsPopupWindow" parent="Widget.Material.TextSuggestionsPopupWindow"/>
+ <style name="Widget.Material.Light.AbsListView" parent="Widget.Material.AbsListView"/>
+ <style name="Widget.Material.Light.AutoCompleteTextView" parent="Widget.Material.AutoCompleteTextView" />
+ <style name="Widget.Material.Light.CompoundButton" parent="Widget.Material.CompoundButton"/>
+ <style name="Widget.Material.Light.CompoundButton.CheckBox" parent="Widget.Material.CompoundButton.CheckBox"/>
+ <style name="Widget.Material.Light.CompoundButton.RadioButton" parent="Widget.Material.CompoundButton.RadioButton"/>
+ <style name="Widget.Material.Light.CompoundButton.Star" parent="Widget.Material.CompoundButton.Star"/>
+ <style name="Widget.Material.Light.CompoundButton.Switch" parent="Widget.Material.CompoundButton.Switch" />
+ <style name="Widget.Material.Light.ListView.DropDown" parent="Widget.Material.ListView.DropDown"/>
+ <style name="Widget.Material.Light.EditText" parent="Widget.Material.EditText"/>
+ <style name="Widget.Material.Light.ExpandableListView" parent="Widget.Material.ExpandableListView"/>
+ <style name="Widget.Material.Light.ExpandableListView.White" parent="Widget.Material.ExpandableListView.White"/>
+ <style name="Widget.Material.Light.Gallery" parent="Widget.Material.Gallery"/>
+ <style name="Widget.Material.Light.GestureOverlayView" parent="Widget.Material.GestureOverlayView"/>
+ <style name="Widget.Material.Light.GridView" parent="Widget.Material.GridView"/>
+ <style name="Widget.Material.Light.ImageButton" parent="Widget.Material.ImageButton"/>
+
+ <style name="Widget.Material.Light.CalendarView" parent="Widget.CalendarView">
+ <item name="selectedWeekBackgroundColor">#330066ff</item>
+ <item name="focusedMonthDateColor">#FF000000</item>
+ <item name="unfocusedMonthDateColor">#7F08002B</item>
+ <item name="weekNumberColor">#7F080021</item>
+ <item name="weekSeparatorLineColor">#7F08002A</item>
+ <item name="weekDayTextAppearance">@style/TextAppearance.Material.CalendarViewWeekDayView</item>
+ </style>
+
+ <style name="Widget.Material.Light.NumberPicker" parent="Widget.Material.NumberPicker"/>
+
+ <style name="Widget.Material.Light.TimePicker" parent="Widget.Material.TimePicker">
+ <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
+ <item name="internalLayout">@layout/time_picker_holo</item>
+ <item name="disabledColor">@color/bright_foreground_disabled_material_light</item>
+ </style>
+
+ <style name="Widget.Material.Light.DatePicker" parent="Widget.Material.DatePicker"/>
+ <style name="Widget.Material.Light.ActivityChooserView" parent="Widget.Material.ActivityChooserView" />
+ <style name="Widget.Material.Light.ImageWell" parent="Widget.Material.ImageWell"/>
+ <style name="Widget.Material.Light.ListView" parent="Widget.Material.ListView"/>
+ <style name="Widget.Material.Light.ListView.White" parent="Widget.Material.ListView.White"/>
+ <style name="Widget.Material.Light.PopupWindow" parent="Widget.Material.PopupWindow"/>
+ <style name="Widget.Material.Light.PopupWindow.ActionMode" parent="Widget.Material.PopupWindow.ActionMode"/>
+ <style name="Widget.Material.Light.ProgressBar" parent="Widget.Material.ProgressBar"/>
+ <style name="Widget.Material.Light.ProgressBar.Horizontal" parent="Widget.Material.ProgressBar.Horizontal"/>
+ <style name="Widget.Material.Light.ProgressBar.Small" parent="Widget.Material.ProgressBar.Small"/>
+ <style name="Widget.Material.Light.ProgressBar.Small.Title" parent="Widget.Material.ProgressBar.Small.Title"/>
+ <style name="Widget.Material.Light.ProgressBar.Large" parent="Widget.Material.ProgressBar.Large"/>
+ <style name="Widget.Material.Light.ProgressBar.Inverse" parent="Widget.Material.ProgressBar.Inverse"/>
+ <style name="Widget.Material.Light.ProgressBar.Small.Inverse" parent="Widget.Material.ProgressBar.Small.Inverse"/>
+ <style name="Widget.Material.Light.ProgressBar.Large.Inverse" parent="Widget.Material.ProgressBar.Large.Inverse"/>
+ <style name="Widget.Material.Light.SeekBar" parent="Widget.Material.SeekBar"/>
+ <style name="Widget.Material.Light.RatingBar" parent="Widget.Material.RatingBar" />
+
+ <style name="Widget.Material.Light.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
+ <item name="progressDrawable">@drawable/ratingbar_holo_light</item>
+ <item name="indeterminateDrawable">@drawable/ratingbar_holo_light</item>
+ <item name="minHeight">35dip</item>
+ <item name="maxHeight">35dip</item>
+ </style>
+
+ <style name="Widget.Material.Light.RatingBar.Small" parent="Widget.RatingBar.Small">
+ <item name="progressDrawable">@drawable/ratingbar_small_holo_light</item>
+ <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_light</item>
+ <item name="minHeight">16dip</item>
+ <item name="maxHeight">16dip</item>
+ </style>
+
+ <style name="Widget.Material.Light.ScrollView" parent="Widget.Material.ScrollView"/>
+ <style name="Widget.Material.Light.HorizontalScrollView" parent="Widget.Material.HorizontalScrollView"/>
+ <style name="Widget.Material.Light.Spinner" parent="Widget.Material.Spinner" />
+ <style name="Widget.Material.Light.Spinner.DropDown" parent="Widget.Material.Spinner.DropDown"/>
+ <style name="Widget.Material.Light.Spinner.DropDown.ActionBar" parent="Widget.Material.Spinner.DropDown.ActionBar"/>
+ <style name="Widget.Material.Light.TabWidget" parent="Widget.Material.TabWidget"/>
+ <style name="Widget.Material.Light.WebTextView" parent="Widget.Material.WebTextView"/>
+ <style name="Widget.Material.Light.WebView" parent="Widget.Material.WebView"/>
+ <style name="Widget.Material.Light.DropDownItem" parent="Widget.Material.DropDownItem"/>
+ <style name="Widget.Material.Light.DropDownItem.Spinner" parent="Widget.Material.DropDownItem.Spinner"/>
+ <style name="Widget.Material.Light.KeyboardView" parent="Widget.Material.KeyboardView"/>
+ <style name="Widget.Material.Light.QuickContactBadge.WindowSmall" parent="Widget.Material.QuickContactBadge.WindowSmall"/>
+ <style name="Widget.Material.Light.QuickContactBadge.WindowMedium" parent="Widget.Material.QuickContactBadge.WindowMedium"/>
+ <style name="Widget.Material.Light.QuickContactBadge.WindowLarge" parent="Widget.Material.QuickContactBadge.WindowLarge"/>
+ <style name="Widget.Material.Light.QuickContactBadgeSmall.WindowSmall" parent="Widget.Material.QuickContactBadgeSmall.WindowSmall"/>
+ <style name="Widget.Material.Light.QuickContactBadgeSmall.WindowMedium" parent="Widget.Material.QuickContactBadgeSmall.WindowMedium"/>
+ <style name="Widget.Material.Light.QuickContactBadgeSmall.WindowLarge" parent="Widget.Material.QuickContactBadgeSmall.WindowLarge"/>
+ <style name="Widget.Material.Light.ListPopupWindow" parent="Widget.Material.ListPopupWindow"/>
+ <style name="Widget.Material.Light.PopupMenu" parent="Widget.Material.ListPopupWindow"/>
+ <style name="Widget.Material.Light.PopupMenu.Overflow" parent="Widget.Material.PopupMenu.Overflow"/>
+ <style name="Widget.Material.Light.ActionButton" parent="Widget.Material.ActionButton"/>
+ <style name="Widget.Material.Light.ActionButton.Overflow" parent="Widget.Material.ActionButton.Overflow"/>
+ <style name="Widget.Material.Light.Tab" parent="Widget.Material.Tab"/>
+ <style name="Widget.Material.Light.ActionBar.TabView" parent="Widget.Material.ActionBar.TabView"/>
+ <style name="Widget.Material.Light.ActionBar.TabBar" parent="Widget.Material.ActionBar.TabBar"/>
+ <style name="Widget.Material.Light.ActionBar.TabText" parent="Widget.Material.ActionBar.TabText"/>
+ <style name="Widget.Material.Light.ActionMode" parent="Widget.Material.ActionMode" />
+ <style name="Widget.Material.Light.ActionButton.CloseMode" parent="Widget.Material.ActionButton.CloseMode" />
+
+ <style name="Widget.Material.Light.ActionBar" parent="Widget.Material.ActionBar">
+ <item name="titleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Title</item>
+ <item name="subtitleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Subtitle</item>
+ <item name="background">@null</item>
+ <item name="backgroundStacked">@null</item>
+ <item name="backgroundSplit">@null</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_material</item>
+ <item name="progressBarStyle">@style/Widget.Material.Light.ProgressBar.Horizontal</item>
+ <item name="indeterminateProgressStyle">@style/Widget.Material.Light.ProgressBar</item>
+ </style>
+
+ <style name="Widget.Material.Light.ActionBar.Solid">
+ <item name="background">?attr/colorPrimary</item>
+ <item name="backgroundStacked">?attr/colorPrimary</item>
+ <item name="backgroundSplit">?attr/colorPrimary</item>
+ </style>
+
+ <style name="Widget.Material.Light.FastScroll" parent="Widget.Material.FastScroll"/>
+ <style name="Widget.Material.Light.MediaRouteButton" parent="Widget.Material.MediaRouteButton" />
+
+ <!-- Animation Styles -->
+
+ <style name="Animation.Material" parent="Animation"/>
+ <style name="Animation.Material.Activity" parent="Animation.Activity"/>
+
+ <style name="Animation.Material.Dialog">
+ <item name="windowEnterAnimation">@anim/popup_enter_material</item>
+ <item name="windowExitAnimation">@anim/popup_exit_material</item>
+ </style>
+
+ <style name="Animation.Material.Popup">
+ <item name="windowEnterAnimation">@anim/popup_enter_material</item>
+ <item name="windowExitAnimation">@anim/popup_exit_material</item>
+ </style>
+
+ <!-- Dialog styles -->
+
+ <style name="AlertDialog.Material" parent="AlertDialog">
+ <item name="fullDark">@color/transparent</item>
+ <item name="topDark">@color/transparent</item>
+ <item name="centerDark">@color/transparent</item>
+ <item name="bottomDark">@color/transparent</item>
+ <item name="fullBright">@color/transparent</item>
+ <item name="topBright">@color/transparent</item>
+ <item name="centerBright">@color/transparent</item>
+ <item name="bottomBright">@color/transparent</item>
+ <item name="bottomMedium">@color/transparent</item>
+ <item name="centerMedium">@color/transparent</item>
+ <item name="layout">@layout/alert_dialog_material</item>
+ <item name="listLayout">@layout/select_dialog_material</item>
+ <item name="progressLayout">@layout/progress_dialog_material</item>
+ <item name="horizontalProgressLayout">@layout/alert_dialog_progress_material</item>
+ <item name="listItemLayout">@layout/select_dialog_item_material</item>
+ <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item>
+ <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item>
+ </style>
+
+ <style name="AlertDialog.Material.Light"/>
+
+ <!-- Window title -->
+ <style name="WindowTitleBackground.Material">
+ <item name="background">@null</item>
+ </style>
+
+ <style name="WindowTitle.Material">
+ <item name="singleLine">true</item>
+ <item name="textAppearance">@style/TextAppearance.Material.WindowTitle</item>
+ <item name="shadowRadius">0</item>
+ </style>
+
+ <style name="DialogWindowTitle.Material">
+ <item name="maxLines">1</item>
+ <item name="scrollHorizontally">true</item>
+ <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
+ </style>
+
+ <style name="DialogWindowTitle.Material.Light" />
+
+</resources>
diff --git a/core/res/res/values/styles_quantum.xml b/core/res/res/values/styles_quantum.xml
deleted file mode 100644
index b5afc2f1aff6..000000000000
--- a/core/res/res/values/styles_quantum.xml
+++ /dev/null
@@ -1,973 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!--
-===============================================================
- PLEASE READ
-===============================================================
-
-The Quantum themes must not be modified in order to pass CTS.
-Many related themes and styles depend on other values defined in this file.
-If you would like to provide custom themes and styles for your device,
-please see styles_device_defaults.xml.
-
-===============================================================
- PLEASE READ
-===============================================================
- -->
-<resources>
- <!-- Preference styles -->
- <eat-comment/>
-
- <style name="Preference.Quantum">
- <item name="layout">@layout/preference_quantum</item>
- </style>
-
- <style name="PreferenceFragment.Quantum">
- <item name="paddingStart">@dimen/preference_fragment_padding_side</item>
- <item name="paddingEnd">@dimen/preference_fragment_padding_side</item>
- </style>
-
- <style name="Preference.Quantum.Information">
- <item name="layout">@layout/preference_information_quantum</item>
- <item name="enabled">false</item>
- <item name="shouldDisableView">false</item>
- </style>
-
- <style name="Preference.Quantum.Category">
- <item name="layout">@layout/preference_category_quantum</item>
- <!-- The title should not dim if the category is disabled, instead only the preference children should dim. -->
- <item name="shouldDisableView">false</item>
- <item name="selectable">false</item>
- </style>
-
- <style name="Preference.Quantum.CheckBoxPreference">
- <item name="widgetLayout">@layout/preference_widget_checkbox</item>
- </style>
-
- <style name="Preference.Quantum.SwitchPreference">
- <item name="widgetLayout">@layout/preference_widget_switch</item>
- <item name="switchTextOn">@string/capital_on</item>
- <item name="switchTextOff">@string/capital_off</item>
- </style>
-
- <style name="Preference.Quantum.PreferenceScreen"/>
-
- <style name="Preference.Quantum.DialogPreference">
- <item name="positiveButtonText">@string/ok</item>
- <item name="negativeButtonText">@string/cancel</item>
- </style>
-
- <style name="Preference.Quantum.DialogPreference.YesNoPreference">
- <item name="positiveButtonText">@string/yes</item>
- <item name="negativeButtonText">@string/no</item>
- </style>
-
- <style name="Preference.Quantum.DialogPreference.EditTextPreference">
- <item name="dialogLayout">@layout/preference_dialog_edittext</item>
- </style>
-
- <style name="Preference.Quantum.RingtonePreference">
- <item name="ringtoneType">ringtone</item>
- <item name="showSilent">true</item>
- <item name="showDefault">true</item>
- </style>
-
- <!-- Begin Quantum theme styles -->
-
- <!-- Text styles -->
-
- <style name="TextAppearance.Quantum">
- <item name="textColor">?attr/textColorPrimary</item>
- <item name="textColorHint">?attr/textColorHint</item>
- <item name="textColorHighlight">?attr/textColorHighlight</item>
- <item name="textColorLink">?attr/textColorLink</item>
- <item name="textSize">@dimen/text_size_body_1_quantum</item>
- <item name="fontFamily">@string/font_family_body_1_quantum</item>
- </style>
-
- <style name="TextAppearance.Quantum.Display4">
- <item name="textSize">@dimen/text_size_display_4_quantum</item>
- <item name="fontFamily">@string/font_family_display_4_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Display3">
- <item name="textSize">@dimen/text_size_display_3_quantum</item>
- <item name="fontFamily">@string/font_family_display_3_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Display2">
- <item name="textSize">@dimen/text_size_display_2_quantum</item>
- <item name="fontFamily">@string/font_family_display_2_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Display1">
- <item name="textSize">@dimen/text_size_display_1_quantum</item>
- <item name="fontFamily">@string/font_family_display_1_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Headline">
- <item name="textSize">@dimen/text_size_headline_quantum</item>
- <item name="fontFamily">@string/font_family_headline_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Title">
- <item name="textSize">@dimen/text_size_title_quantum</item>
- <item name="fontFamily">@string/font_family_title_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Title.Inverse">
- <item name="textColor">?attr/textColorPrimaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Subhead">
- <item name="textSize">@dimen/text_size_subhead_quantum</item>
- <item name="fontFamily">@string/font_family_subhead_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Subhead.Inverse">
- <item name="textColor">?attr/textColorSecondaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Body2">
- <item name="textSize">@dimen/text_size_body_2_quantum</item>
- <item name="fontFamily">@string/font_family_body_2_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Body1">
- <item name="textSize">@dimen/text_size_body_1_quantum</item>
- <item name="fontFamily">@string/font_family_body_1_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Caption">
- <item name="textSize">@dimen/text_size_caption_quantum</item>
- <item name="fontFamily">@string/font_family_caption_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Menu">
- <item name="textSize">@dimen/text_size_menu_quantum</item>
- <item name="fontFamily">@string/font_family_menu_quantum</item>
- </style>
-
- <style name="TextAppearance.Quantum.Menu.Inverse">
- <item name="textColor">?attr/textColorSecondaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Button">
- <item name="textSize">@dimen/text_size_button_quantum</item>
- <item name="fontFamily">@string/font_family_button_quantum</item>
- <item name="textAllCaps">true</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <!-- Deprecated text styles -->
-
- <style name="TextAppearance.Quantum.Inverse">
- <item name="textColor">?attr/textColorPrimaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Large">
- <item name="textSize">@dimen/text_size_large_quantum</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Large.Inverse">
- <item name="textColor">?attr/textColorPrimaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Medium">
- <item name="textSize">@dimen/text_size_medium_quantum</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Medium.Inverse">
- <item name="textColor">?attr/textColorSecondaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Small">
- <item name="textSize">@dimen/text_size_small_quantum</item>
- <item name="textColor">?attr/textColorTertiary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Small.Inverse">
- <item name="textColor">?attr/textColorTertiaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
- <item name="textColorLink">?attr/textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.SearchResult" />
- <style name="TextAppearance.Quantum.SearchResult.Title" parent="TextAppearance.Quantum.Title" />
- <style name="TextAppearance.Quantum.SearchResult.Subtitle" parent="TextAppearance.Quantum.Subhead" />
-
- <style name="TextAppearance.Quantum.Widget"/>
- <style name="TextAppearance.Quantum.Widget.Button" parent="TextAppearance.Quantum.Button" />
-
- <style name="TextAppearance.Quantum.Widget.EditText">
- <item name="textColor">?attr/textColorPrimaryInverse</item>
- <item name="textColorHint">?attr/textColorHintInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.Switch" parent="TextAppearance.Quantum.Button" />
-
- <style name="TextAppearance.Quantum.Widget.PopupMenu"/>
- <style name="TextAppearance.Quantum.Widget.PopupMenu.Large" parent="TextAppearance.Quantum.Menu" />
- <style name="TextAppearance.Quantum.Widget.PopupMenu.Small" parent="TextAppearance.Quantum.Menu" />
-
- <style name="TextAppearance.Quantum.Widget.DropDownHint" parent="TextAppearance.Quantum.Menu" />
-
- <style name="TextAppearance.Quantum.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Small">
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.TabWidget" parent="TextAppearance.Quantum.Button" />
-
- <style name="TextAppearance.Quantum.Widget.TextView">
- <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
- <item name="textColorHint">?attr/textColorHint</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.TextView.PopupMenu" parent="TextAppearance.Quantum.Menu" />
- <style name="TextAppearance.Quantum.Widget.TextView.SpinnerItem" />
-
- <style name="TextAppearance.Quantum.Widget.DropDownItem">
- <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.ActionMode"/>
- <style name="TextAppearance.Quantum.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Title" />
- <style name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Quantum.Title.Inverse" />
- <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Subhead" />
- <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Subhead.Inverse" />
-
- <style name="TextAppearance.Quantum.Widget.ActionBar.Title" parent="TextAppearance.Quantum.Title" />
- <style name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Quantum.Title.Inverse" />
- <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle" parent="TextAppearance.Quantum.Subhead" />
- <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Quantum.Subhead.Inverse" />
-
- <style name="TextAppearance.Quantum.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Menu">
- <item name="textColor">?attr/actionMenuTextColor</item>
- <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.ActionBar.Menu.Inverse" parent="TextAppearance.Quantum.Menu.Inverse">
- <item name="textColor">?attr/actionMenuTextColor</item>
- <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
- </style>
-
- <style name="TextAppearance.Quantum.WindowTitle" parent="TextAppearance.Quantum.Headline" />
- <style name="TextAppearance.Quantum.DialogWindowTitle" parent="TextAppearance.Quantum.Headline" />
-
- <style name="TextAppearance.Quantum.CalendarViewWeekDayView" parent="TextAppearance.Quantum.Small">
- <item name="textStyle">bold</item>
- <item name="textColor">#505050</item>
- </style>
-
- <style name="TextAppearance.Quantum.TimePicker.TimeLabel" parent="TextAppearance.Quantum">
- <item name="textSize">@dimen/timepicker_time_label_size</item>
- <item name="textColor">?attr/textColorSecondary</item>
- </style>
-
- <style name="TextAppearance.Quantum.TimePicker.AmPmLabel" parent="TextAppearance.Quantum">
- <item name="textSize">@dimen/timepicker_ampm_label_size</item>
- <item name="textAllCaps">true</item>
- <item name="textColor">?attr/textColorSecondary</item>
- <item name="textStyle">bold</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum" />
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent">
- <item name="android:textColor">#90000000</item>
- <item name="android:textSize">@dimen/notification_text_size</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent.Title">
- <item name="android:textColor">#DD000000</item>
- <item name="android:textSize">@dimen/notification_title_text_size</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent.Line2">
- <item name="android:textSize">@dimen/notification_subtext_size</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent.Info">
- <item name="android:textSize">@dimen/notification_subtext_size</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent.Time">
- <item name="android:textSize">@dimen/notification_subtext_size</item>
- </style>
-
- <style name="TextAppearance.StatusBar.Quantum.EventContent.Emphasis">
- <item name="android:textColor">#66000000</item>
- </style>
-
- <style name="Widget.StatusBar.Quantum.ProgressBar" parent="Widget.Quantum.Light.ProgressBar.Horizontal">
- <item name="android:progressDrawable">@drawable/notification_quantum_media_progress</item>
- </style>
-
- <!-- Widget Styles -->
-
- <style name="Quantum"/>
- <style name="Quantum.Light"/>
- <style name="Widget.Quantum" parent="Widget" />
-
- <!-- Bordered ink button -->
- <style name="Widget.Quantum.Button" parent="Widget.Button">
- <item name="background">@drawable/btn_default_quantum</item>
- <item name="textAppearance">?attr/textAppearanceButton</item>
- <item name="textColor">?attr/textColorPrimary</item>
- <item name="minHeight">48dip</item>
- <item name="minWidth">88dip</item>
-
- <!-- TODO: Turn this back on when we support inset drawable outlines. -->
- <!-- <item name="stateListAnimator">@anim/button_state_list_anim_quantum</item> -->
- </style>
-
- <!-- Small bordered ink button -->
- <style name="Widget.Quantum.Button.Small">
- <item name="minHeight">48dip</item>
- <item name="minWidth">48dip</item>
- </style>
-
- <!-- Borderless ink button -->
- <style name="Widget.Quantum.Button.Borderless">
- <item name="background">@drawable/btn_borderless_quantum</item>
- <item name="stateListAnimator">@null</item>
- </style>
-
- <!-- Small borderless ink button -->
- <style name="Widget.Quantum.Button.Borderless.Small">
- <item name="minHeight">48dip</item>
- <item name="minWidth">48dip</item>
- </style>
-
- <style name="Widget.Quantum.Button.Inset">
- <item name="background">@drawable/button_inset</item>
- </style>
-
- <style name="Widget.Quantum.Button.Toggle">
- <item name="background">@drawable/btn_toggle_quantum</item>
- <item name="textOn">@string/capital_on</item>
- <item name="textOff">@string/capital_off</item>
- <item name="minHeight">48dip</item>
- </style>
-
- <style name="Widget.Quantum.ButtonBar">
- <item name="background">@null</item>
- </style>
-
- <style name="Widget.Quantum.ButtonBar.AlertDialog">
- <item name="background">@null</item>
- </style>
-
- <style name="Widget.Quantum.SegmentedButton" parent="SegmentedButton">
- <item name="background">@drawable/btn_group_holo_dark</item>
- </style>
-
- <style name="Widget.Quantum.StackView">
- <item name="resOutColor">@color/holo_blue_light</item>
- <item name="clickColor">@color/holo_blue_light</item>
- </style>
-
- <style name="Widget.Quantum.TextView" parent="Widget.TextView"/>
-
- <style name="Widget.Quantum.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
- <item name="background">@drawable/list_section_divider_quantum</item>
- <item name="textAllCaps">true</item>
- </style>
-
- <style name="Widget.Quantum.TextView.SpinnerItem" parent="Widget.TextView.SpinnerItem">
- <item name="textAppearance">@style/TextAppearance.Quantum.Widget.TextView.SpinnerItem</item>
- <item name="paddingStart">8dp</item>
- <item name="paddingEnd">8dp</item>
- </style>
-
- <style name="Widget.Quantum.CheckedTextView" parent="Widget.CheckedTextView" />
- <style name="Widget.Quantum.TextSelectHandle" parent="Widget.TextSelectHandle"/>
- <style name="Widget.Quantum.TextSuggestionsPopupWindow" parent="Widget.TextSuggestionsPopupWindow"/>
- <style name="Widget.Quantum.AbsListView" parent="Widget.AbsListView"/>
-
- <style name="Widget.Quantum.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
- <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
- <item name="popupBackground">@drawable/popup_background_quantum</item>
- </style>
-
- <style name="Widget.Quantum.CompoundButton" parent="Widget.CompoundButton"/>
-
- <style name="Widget.Quantum.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox">
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- </style>
-
- <style name="Widget.Quantum.CompoundButton.RadioButton" parent="Widget.CompoundButton.RadioButton">
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- </style>
-
- <style name="Widget.Quantum.CompoundButton.Star" parent="Widget.CompoundButton.Star">
- <item name="button">@drawable/btn_star_quantum</item>
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- </style>
-
- <style name="Widget.Quantum.CompoundButton.Switch">
- <item name="track">@drawable/switch_track_quantum</item>
- <item name="thumb">@drawable/switch_thumb_quantum_anim</item>
- <item name="splitTrack">true</item>
- <item name="switchTextAppearance">@style/TextAppearance.Quantum.Widget.Switch</item>
- <item name="textOn"></item>
- <item name="textOff"></item>
- <item name="switchMinWidth">4dip</item>
- <item name="switchPadding">4dip</item>
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- </style>
-
- <style name="Widget.Quantum.EditText" parent="Widget.EditText"/>
-
- <style name="Widget.Quantum.ExpandableListView" parent="Widget.Quantum.ListView">
- <item name="groupIndicator">@drawable/expander_group_quantum</item>
- <item name="indicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
- <item name="indicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
- <item name="childDivider">?attr/listDivider</item>
- </style>
-
- <style name="Widget.Quantum.ExpandableListView.White"/>
- <style name="Widget.Quantum.Gallery" parent="Widget.Gallery"/>
- <style name="Widget.Quantum.GestureOverlayView" parent="Widget.GestureOverlayView"/>
-
- <style name="Widget.Quantum.GridView" parent="Widget.GridView">
- <item name="android:listSelector">?attr/selectableItemBackground</item>
- </style>
-
- <style name="Widget.Quantum.CalendarView" parent="Widget.CalendarView">
- <item name="selectedWeekBackgroundColor">#330099FF</item>
- <item name="focusedMonthDateColor">#FFFFFFFF</item>
- <item name="unfocusedMonthDateColor">#66FFFFFF</item>
- <item name="weekNumberColor">#33FFFFFF</item>
- <item name="weekSeparatorLineColor">#19FFFFFF</item>
- <item name="selectedDateVerticalBar">@drawable/day_picker_week_view_dayline_holo</item>
- <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.CalendarViewWeekDayView</item>
- </style>
-
- <style name="Widget.Quantum.ImageButton" parent="Widget.ImageButton">
- <item name="background">@drawable/btn_default_quantum</item>
- </style>
-
- <style name="Widget.Quantum.NumberPicker" parent="Widget.NumberPicker">
- <item name="internalLayout">@layout/number_picker_with_selector_wheel</item>
- <item name="solidColor">@color/transparent</item>
- <item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
- <item name="selectionDividerHeight">2dip</item>
- <item name="selectionDividersDistance">48dip</item>
- <item name="internalMinWidth">64dip</item>
- <item name="internalMaxHeight">180dip</item>
- <item name="virtualButtonPressedDrawable">?attr/selectableItemBackground</item>
- </style>
-
- <style name="Widget.Quantum.TimePicker" parent="Widget.TimePicker">
- <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
- <item name="internalLayout">@layout/time_picker_holo</item>
- <item name="disabledColor">@color/bright_foreground_disabled_quantum_dark</item>
- <item name="headerSelectedTextColor">?attr/colorControlActivated</item>
- <item name="headerUnselectedTextColor">?attr/textColorPrimary</item>
- <item name="headerBackgroundColor">@color/transparent</item>
- <item name="numbersTextColor">?attr/textColorSecondary</item>
- <item name="numbersBackgroundColor">@color/transparent</item>
- <item name="amPmTextColor">?attr/textColorSecondary</item>
- <item name="amPmUnselectedBackgroundColor">@color/transparent</item>
- <item name="amPmSelectedBackgroundColor">?attr/colorControlActivated</item>
- <item name="numbersSelectorColor">?attr/colorControlActivated</item>
- </style>
-
- <style name="Widget.Quantum.DatePicker" parent="Widget.DatePicker">
- <item name="internalLayout">@layout/date_picker_holo</item>
- <item name="calendarViewShown">true</item>
- </style>
-
- <style name="Widget.Quantum.ActivityChooserView" parent="Widget.ActivityChooserView">
- <item name="background">@drawable/ab_share_pack_quantum</item>
- </style>
-
- <style name="Widget.Quantum.ImageWell" parent="Widget.ImageWell"/>
-
- <style name="Widget.Quantum.ListView" parent="Widget.ListView">
- <item name="divider">?attr/listDivider</item>
- <item name="listSelector">?attr/listChoiceBackgroundIndicator</item>
- </style>
-
- <style name="Widget.Quantum.ListView.DropDown"/>
- <style name="Widget.Quantum.ListView.White"/>
-
- <style name="Widget.Quantum.PopupWindow" parent="Widget.PopupWindow"/>
-
- <style name="Widget.Quantum.PopupWindow.ActionMode">
- <item name="popupBackground">@drawable/popup_background_quantum</item>
- <item name="popupAnimationStyle">@style/Animation.PopupWindow.ActionMode</item>
- </style>
-
- <style name="Widget.Quantum.ProgressBar" parent="Widget.ProgressBar">
- <item name="indeterminateDrawable">@drawable/progress_medium_quantum</item>
- </style>
-
- <style name="Widget.Quantum.ProgressBar.Inverse"/>
-
- <style name="Widget.Quantum.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal">
- <item name="progressDrawable">@drawable/progress_horizontal_quantum</item>
- <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
- <item name="minHeight">16dip</item>
- <item name="maxHeight">16dip</item>
- </style>
-
- <style name="Widget.Quantum.ProgressBar.Small" parent="Widget.ProgressBar.Small">
- <item name="indeterminateDrawable">@drawable/progress_small_quantum</item>
- </style>
-
- <style name="Widget.Quantum.ProgressBar.Small.Inverse"/>
- <style name="Widget.Quantum.ProgressBar.Small.Title"/>
-
- <style name="Widget.Quantum.ProgressBar.Large" parent="Widget.ProgressBar.Large">
- <item name="indeterminateDrawable">@drawable/progress_large_quantum</item>
- </style>
-
- <style name="Widget.Quantum.ProgressBar.Large.Inverse"/>
-
- <style name="Widget.Quantum.SeekBar">
- <item name="indeterminateOnly">false</item>
- <item name="progressDrawable">@drawable/scrubber_progress_horizontal_quantum</item>
- <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_quantum</item>
- <item name="thumb">@drawable/scrubber_control_quantum_anim</item>
- <item name="splitTrack">true</item>
- <item name="focusable">true</item>
- <item name="paddingStart">16dip</item>
- <item name="paddingEnd">16dip</item>
- <item name="mirrorForRtl">true</item>
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- </style>
-
- <style name="Widget.Quantum.RatingBar" parent="Widget.RatingBar">
- <item name="progressDrawable">@drawable/ratingbar_full_quantum</item>
- <item name="indeterminateDrawable">@drawable/ratingbar_full_quantum</item>
- </style>
-
- <style name="Widget.Quantum.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
- <item name="progressDrawable">@drawable/ratingbar_holo_dark</item>
- <item name="indeterminateDrawable">@drawable/ratingbar_holo_dark</item>
- <item name="minHeight">35dip</item>
- <item name="maxHeight">35dip</item>
- </style>
-
- <style name="Widget.Quantum.RatingBar.Small" parent="Widget.RatingBar.Small">
- <item name="progressDrawable">@drawable/ratingbar_small_holo_dark</item>
- <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_dark</item>
- <item name="minHeight">16dip</item>
- <item name="maxHeight">16dip</item>
- </style>
-
- <style name="Widget.Quantum.ScrollView" parent="Widget.ScrollView"/>
- <style name="Widget.Quantum.HorizontalScrollView" parent="Widget.HorizontalScrollView"/>
-
- <style name="Widget.Quantum.Spinner" parent="Widget.Spinner.DropDown">
- <item name="background">@drawable/spinner_background_quantum</item>
- <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
- <item name="popupBackground">@drawable/popup_background_quantum</item>
- <item name="dropDownVerticalOffset">0dip</item>
- <item name="dropDownHorizontalOffset">0dip</item>
- <item name="dropDownWidth">wrap_content</item>
- <item name="popupPromptView">@layout/simple_dropdown_hint</item>
- <item name="gravity">start|center_vertical</item>
- <item name="disableChildrenWhenDisabled">true</item>
- </style>
-
- <style name="Widget.Quantum.Spinner.DropDown"/>
-
- <style name="Widget.Quantum.Spinner.DropDown.ActionBar">
- <item name="background">@drawable/spinner_background_quantum</item>
- </style>
-
- <style name="Widget.Quantum.TabWidget" parent="Widget.TabWidget">
- <item name="tabStripLeft">@null</item>
- <item name="tabStripRight">@null</item>
- <item name="tabStripEnabled">false</item>
- <item name="divider">?attr/dividerVertical</item>
- <item name="showDividers">middle</item>
- <item name="dividerPadding">8dip</item>
- <item name="measureWithLargestChild">true</item>
- <item name="tabLayout">@layout/tab_indicator_quantum</item>
- </style>
-
- <style name="Widget.Quantum.Tab" parent="Widget.Quantum.ActionBar.TabView">
- <item name="background">@drawable/tab_indicator_quantum</item>
- <item name="layout_width">0dip</item>
- <item name="layout_weight">1</item>
- <item name="minWidth">80dip</item>
- </style>
-
- <style name="Widget.Quantum.TabText" parent="Widget.Quantum.ActionBar.TabText">
- <item name="maxWidth">180dip</item>
- </style>
-
- <style name="Widget.Quantum.WebTextView" parent="Widget.WebTextView"/>
-
- <style name="Widget.Quantum.WebView" parent="Widget.WebView"/>
-
- <style name="Widget.Quantum.DropDownItem" parent="Widget.DropDownItem">
- <item name="textAppearance">@style/TextAppearance.Quantum.Widget.DropDownItem</item>
- <item name="paddingStart">8dp</item>
- <item name="paddingEnd">8dp</item>
- </style>
-
- <style name="Widget.Quantum.DropDownItem.Spinner"/>
-
- <style name="Widget.Quantum.KeyboardView" parent="Widget.KeyboardView"/>
- <style name="Widget.Quantum.QuickContactBadge.WindowSmall" parent="Widget.QuickContactBadge.WindowSmall"/>
- <style name="Widget.Quantum.QuickContactBadge.WindowMedium" parent="Widget.QuickContactBadge.WindowMedium"/>
- <style name="Widget.Quantum.QuickContactBadge.WindowLarge" parent="Widget.QuickContactBadge.WindowLarge"/>
- <style name="Widget.Quantum.QuickContactBadgeSmall.WindowSmall" parent="Widget.QuickContactBadgeSmall.WindowSmall"/>
- <style name="Widget.Quantum.QuickContactBadgeSmall.WindowMedium" parent="Widget.QuickContactBadgeSmall.WindowMedium"/>
- <style name="Widget.Quantum.QuickContactBadgeSmall.WindowLarge" parent="Widget.QuickContactBadgeSmall.WindowLarge"/>
-
- <style name="Widget.Quantum.ListPopupWindow" parent="Widget.ListPopupWindow">
- <item name="dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
- <item name="popupBackground">@drawable/popup_background_quantum</item>
- <item name="popupAnimationStyle">@style/Animation.Quantum.Popup</item>
- <item name="dropDownVerticalOffset">0dip</item>
- <item name="dropDownHorizontalOffset">0dip</item>
- <item name="dropDownWidth">wrap_content</item>
- </style>
-
- <style name="Widget.Quantum.PopupMenu" parent="Widget.Quantum.ListPopupWindow"/>
-
- <style name="Widget.Quantum.PopupMenu.Overflow">
- <item name="overlapAnchor">true</item>
- </style>
-
- <style name="Widget.Quantum.ActionButton" parent="Widget.ActionButton">
- <item name="minWidth">@dimen/action_button_min_width_quantum</item>
- <item name="minHeight">@dimen/action_button_min_height_quantum</item>
- <item name="gravity">center</item>
- <item name="scaleType">center</item>
- <item name="maxLines">2</item>
- </style>
-
- <style name="Widget.Quantum.ActionButton.CloseMode">
- <item name="background">@drawable/btn_cab_done_quantum</item>
- </style>
-
- <style name="Widget.Quantum.ActionButton.Overflow">
- <item name="src">@drawable/ic_menu_moreoverflow_quantum</item>
- <item name="background">?attr/actionBarItemBackground</item>
- <item name="contentDescription">@string/action_menu_overflow_description</item>
- <item name="minWidth">@dimen/action_overflow_min_width_quantum</item>
- <item name="minHeight">@dimen/action_button_min_height_quantum</item>
- <item name="scaleType">center</item>
- </style>
-
- <style name="Widget.Quantum.ActionBar.TabView" parent="Widget.ActionBar.TabView">
- <item name="background">@drawable/tab_indicator_quantum</item>
- <item name="paddingStart">16dip</item>
- <item name="paddingEnd">16dip</item>
- </style>
-
- <style name="Widget.Quantum.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">
- <item name="divider">?attr/actionBarDivider</item>
- <item name="showDividers">middle</item>
- <item name="dividerPadding">12dip</item>
- </style>
-
- <style name="Widget.Quantum.ActionBar.TabText" parent="Widget.ActionBar.TabText">
- <item name="textAppearance">@style/TextAppearance.Quantum.Medium</item>
- <item name="textColor">?attr/textColorPrimary</item>
- <item name="textSize">12sp</item>
- <item name="textStyle">bold</item>
- <item name="textAllCaps">true</item>
- <item name="ellipsize">marquee</item>
- <item name="maxLines">2</item>
- </style>
-
- <style name="Widget.Quantum.ActionBar" parent="Widget.ActionBar">
- <item name="background">@null</item>
- <item name="backgroundStacked">@null</item>
- <item name="backgroundSplit">@null</item>
- <item name="displayOptions">showTitle</item>
- <item name="divider">?attr/dividerVertical</item>
- <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
- <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
- <item name="progressBarStyle">@style/Widget.Quantum.ProgressBar.Horizontal</item>
- <item name="indeterminateProgressStyle">@style/Widget.Quantum.ProgressBar</item>
- <item name="progressBarPadding">32dip</item>
- <item name="itemPadding">8dip</item>
- <item name="homeLayout">@layout/action_bar_home_quantum</item>
- <item name="gravity">center_vertical</item>
- <item name="contentInsetStart">16dp</item>
- </style>
-
- <style name="Widget.Quantum.ActionBar.Solid">
- <item name="background">?attr/colorPrimary</item>
- <item name="backgroundStacked">?attr/colorPrimary</item>
- <item name="backgroundSplit">?attr/colorPrimary</item>
- </style>
-
- <style name="Widget.Quantum.ActionMode" parent="Widget.ActionMode">
- <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Title</item>
- <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Subtitle</item>
- </style>
-
- <style name="Widget.Quantum.FastScroll" parent="Widget.FastScroll">
- <item name="thumbMinWidth">0dp</item>
- <item name="thumbMinHeight">0dp</item>
- </style>
-
- <style name="Widget.Quantum.PreferenceFrameLayout">
- <item name="borderTop">0dip</item>
- <item name="borderBottom">@dimen/preference_fragment_padding_bottom</item>
- <item name="borderLeft">?attr/preferenceFragmentPaddingSide</item>
- <item name="borderRight">?attr/preferenceFragmentPaddingSide</item>
- </style>
-
- <style name="Widget.Quantum.MediaRouteButton">
- <item name="background">?attr/selectableItemBackgroundBorderless</item>
- <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_quantum</item>
- <item name="minWidth">56dp</item>
- <item name="minHeight">48dp</item>
- <item name="focusable">true</item>
- <item name="contentDescription">@string/media_route_button_content_description</item>
- </style>
-
- <!-- Light widget styles -->
-
- <style name="Widget.Quantum.Light" parent="Widget.Quantum"/>
- <style name="Widget.Quantum.Light.Button" parent="Widget.Quantum.Button"/>
- <style name="Widget.Quantum.Light.Button.Small" parent="Widget.Quantum.Button.Small"/>
- <style name="Widget.Quantum.Light.Button.Borderless" parent="Widget.Quantum.Button.Borderless"/>
- <style name="Widget.Quantum.Light.Button.Borderless.Small" parent="Widget.Quantum.Button.Borderless.Small"/>
- <style name="Widget.Quantum.Light.Button.Inset" parent="Widget.Quantum.Button.Inset"/>
- <style name="Widget.Quantum.Light.Button.Toggle" parent="Widget.Quantum.Button.Toggle" />
- <style name="Widget.Quantum.Light.ButtonBar" parent="Widget.Quantum.ButtonBar"/>
- <style name="Widget.Quantum.Light.ButtonBar.AlertDialog" parent="Widget.Quantum.ButtonBar.AlertDialog"/>
-
- <style name="Widget.Quantum.Light.SegmentedButton" parent="Widget.Quantum.SegmentedButton">
- <item name="background">@drawable/btn_group_holo_light</item>
- </style>
-
- <style name="Widget.Quantum.Light.StackView" parent="Widget.Quantum.StackView"/>
- <style name="Widget.Quantum.Light.TextView" parent="Widget.Quantum.TextView"/>
- <style name="Widget.Quantum.Light.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/>
- <style name="Widget.Quantum.Light.TextView.SpinnerItem" parent="Widget.Quantum.TextView.SpinnerItem"/>
- <style name="Widget.Quantum.Light.CheckedTextView" parent="Widget.Quantum.CheckedTextView"/>
- <style name="Widget.Quantum.Light.TextSelectHandle" parent="Widget.Quantum.TextSelectHandle"/>
- <style name="Widget.Quantum.Light.TextSuggestionsPopupWindow" parent="Widget.Quantum.TextSuggestionsPopupWindow"/>
- <style name="Widget.Quantum.Light.AbsListView" parent="Widget.Quantum.AbsListView"/>
- <style name="Widget.Quantum.Light.AutoCompleteTextView" parent="Widget.Quantum.AutoCompleteTextView" />
- <style name="Widget.Quantum.Light.CompoundButton" parent="Widget.Quantum.CompoundButton"/>
- <style name="Widget.Quantum.Light.CompoundButton.CheckBox" parent="Widget.Quantum.CompoundButton.CheckBox"/>
- <style name="Widget.Quantum.Light.CompoundButton.RadioButton" parent="Widget.Quantum.CompoundButton.RadioButton"/>
- <style name="Widget.Quantum.Light.CompoundButton.Star" parent="Widget.Quantum.CompoundButton.Star"/>
- <style name="Widget.Quantum.Light.CompoundButton.Switch" parent="Widget.Quantum.CompoundButton.Switch" />
- <style name="Widget.Quantum.Light.ListView.DropDown" parent="Widget.Quantum.ListView.DropDown"/>
- <style name="Widget.Quantum.Light.EditText" parent="Widget.Quantum.EditText"/>
- <style name="Widget.Quantum.Light.ExpandableListView" parent="Widget.Quantum.ExpandableListView"/>
- <style name="Widget.Quantum.Light.ExpandableListView.White" parent="Widget.Quantum.ExpandableListView.White"/>
- <style name="Widget.Quantum.Light.Gallery" parent="Widget.Quantum.Gallery"/>
- <style name="Widget.Quantum.Light.GestureOverlayView" parent="Widget.Quantum.GestureOverlayView"/>
- <style name="Widget.Quantum.Light.GridView" parent="Widget.Quantum.GridView"/>
- <style name="Widget.Quantum.Light.ImageButton" parent="Widget.Quantum.ImageButton"/>
-
- <style name="Widget.Quantum.Light.CalendarView" parent="Widget.CalendarView">
- <item name="selectedWeekBackgroundColor">#330066ff</item>
- <item name="focusedMonthDateColor">#FF000000</item>
- <item name="unfocusedMonthDateColor">#7F08002B</item>
- <item name="weekNumberColor">#7F080021</item>
- <item name="weekSeparatorLineColor">#7F08002A</item>
- <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.CalendarViewWeekDayView</item>
- </style>
-
- <style name="Widget.Quantum.Light.NumberPicker" parent="Widget.Quantum.NumberPicker"/>
-
- <style name="Widget.Quantum.Light.TimePicker" parent="Widget.Quantum.TimePicker">
- <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
- <item name="internalLayout">@layout/time_picker_holo</item>
- <item name="disabledColor">@color/bright_foreground_disabled_quantum_light</item>
- </style>
-
- <style name="Widget.Quantum.Light.DatePicker" parent="Widget.Quantum.DatePicker"/>
- <style name="Widget.Quantum.Light.ActivityChooserView" parent="Widget.Quantum.ActivityChooserView" />
- <style name="Widget.Quantum.Light.ImageWell" parent="Widget.Quantum.ImageWell"/>
- <style name="Widget.Quantum.Light.ListView" parent="Widget.Quantum.ListView"/>
- <style name="Widget.Quantum.Light.ListView.White" parent="Widget.Quantum.ListView.White"/>
- <style name="Widget.Quantum.Light.PopupWindow" parent="Widget.Quantum.PopupWindow"/>
- <style name="Widget.Quantum.Light.PopupWindow.ActionMode" parent="Widget.Quantum.PopupWindow.ActionMode"/>
- <style name="Widget.Quantum.Light.ProgressBar" parent="Widget.Quantum.ProgressBar"/>
- <style name="Widget.Quantum.Light.ProgressBar.Horizontal" parent="Widget.Quantum.ProgressBar.Horizontal"/>
- <style name="Widget.Quantum.Light.ProgressBar.Small" parent="Widget.Quantum.ProgressBar.Small"/>
- <style name="Widget.Quantum.Light.ProgressBar.Small.Title" parent="Widget.Quantum.ProgressBar.Small.Title"/>
- <style name="Widget.Quantum.Light.ProgressBar.Large" parent="Widget.Quantum.ProgressBar.Large"/>
- <style name="Widget.Quantum.Light.ProgressBar.Inverse" parent="Widget.Quantum.ProgressBar.Inverse"/>
- <style name="Widget.Quantum.Light.ProgressBar.Small.Inverse" parent="Widget.Quantum.ProgressBar.Small.Inverse"/>
- <style name="Widget.Quantum.Light.ProgressBar.Large.Inverse" parent="Widget.Quantum.ProgressBar.Large.Inverse"/>
- <style name="Widget.Quantum.Light.SeekBar" parent="Widget.Quantum.SeekBar"/>
- <style name="Widget.Quantum.Light.RatingBar" parent="Widget.Quantum.RatingBar" />
-
- <style name="Widget.Quantum.Light.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
- <item name="progressDrawable">@drawable/ratingbar_holo_light</item>
- <item name="indeterminateDrawable">@drawable/ratingbar_holo_light</item>
- <item name="minHeight">35dip</item>
- <item name="maxHeight">35dip</item>
- </style>
-
- <style name="Widget.Quantum.Light.RatingBar.Small" parent="Widget.RatingBar.Small">
- <item name="progressDrawable">@drawable/ratingbar_small_holo_light</item>
- <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_light</item>
- <item name="minHeight">16dip</item>
- <item name="maxHeight">16dip</item>
- </style>
-
- <style name="Widget.Quantum.Light.ScrollView" parent="Widget.Quantum.ScrollView"/>
- <style name="Widget.Quantum.Light.HorizontalScrollView" parent="Widget.Quantum.HorizontalScrollView"/>
- <style name="Widget.Quantum.Light.Spinner" parent="Widget.Quantum.Spinner" />
- <style name="Widget.Quantum.Light.Spinner.DropDown" parent="Widget.Quantum.Spinner.DropDown"/>
- <style name="Widget.Quantum.Light.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Spinner.DropDown.ActionBar"/>
- <style name="Widget.Quantum.Light.TabWidget" parent="Widget.Quantum.TabWidget"/>
- <style name="Widget.Quantum.Light.WebTextView" parent="Widget.Quantum.WebTextView"/>
- <style name="Widget.Quantum.Light.WebView" parent="Widget.Quantum.WebView"/>
- <style name="Widget.Quantum.Light.DropDownItem" parent="Widget.Quantum.DropDownItem"/>
- <style name="Widget.Quantum.Light.DropDownItem.Spinner" parent="Widget.Quantum.DropDownItem.Spinner"/>
- <style name="Widget.Quantum.Light.KeyboardView" parent="Widget.Quantum.KeyboardView"/>
- <style name="Widget.Quantum.Light.QuickContactBadge.WindowSmall" parent="Widget.Quantum.QuickContactBadge.WindowSmall"/>
- <style name="Widget.Quantum.Light.QuickContactBadge.WindowMedium" parent="Widget.Quantum.QuickContactBadge.WindowMedium"/>
- <style name="Widget.Quantum.Light.QuickContactBadge.WindowLarge" parent="Widget.Quantum.QuickContactBadge.WindowLarge"/>
- <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowSmall" parent="Widget.Quantum.QuickContactBadgeSmall.WindowSmall"/>
- <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowMedium" parent="Widget.Quantum.QuickContactBadgeSmall.WindowMedium"/>
- <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowLarge" parent="Widget.Quantum.QuickContactBadgeSmall.WindowLarge"/>
- <style name="Widget.Quantum.Light.ListPopupWindow" parent="Widget.Quantum.ListPopupWindow"/>
- <style name="Widget.Quantum.Light.PopupMenu" parent="Widget.Quantum.ListPopupWindow"/>
- <style name="Widget.Quantum.Light.PopupMenu.Overflow" parent="Widget.Quantum.PopupMenu.Overflow"/>
- <style name="Widget.Quantum.Light.ActionButton" parent="Widget.Quantum.ActionButton"/>
- <style name="Widget.Quantum.Light.ActionButton.Overflow" parent="Widget.Quantum.ActionButton.Overflow"/>
- <style name="Widget.Quantum.Light.Tab" parent="Widget.Quantum.Tab"/>
- <style name="Widget.Quantum.Light.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView"/>
- <style name="Widget.Quantum.Light.ActionBar.TabBar" parent="Widget.Quantum.ActionBar.TabBar"/>
- <style name="Widget.Quantum.Light.ActionBar.TabText" parent="Widget.Quantum.ActionBar.TabText"/>
- <style name="Widget.Quantum.Light.ActionMode" parent="Widget.Quantum.ActionMode" />
- <style name="Widget.Quantum.Light.ActionButton.CloseMode" parent="Widget.Quantum.ActionButton.CloseMode" />
-
- <style name="Widget.Quantum.Light.ActionBar" parent="Widget.Quantum.ActionBar">
- <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
- <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
- <item name="background">@null</item>
- <item name="backgroundStacked">@null</item>
- <item name="backgroundSplit">@null</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
- <item name="progressBarStyle">@style/Widget.Quantum.Light.ProgressBar.Horizontal</item>
- <item name="indeterminateProgressStyle">@style/Widget.Quantum.Light.ProgressBar</item>
- </style>
-
- <style name="Widget.Quantum.Light.ActionBar.Solid">
- <item name="background">?attr/colorPrimary</item>
- <item name="backgroundStacked">?attr/colorPrimary</item>
- <item name="backgroundSplit">?attr/colorPrimary</item>
- </style>
-
- <style name="Widget.Quantum.Light.FastScroll" parent="Widget.Quantum.FastScroll"/>
- <style name="Widget.Quantum.Light.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton" />
-
- <!-- Animation Styles -->
-
- <style name="Animation.Quantum" parent="Animation"/>
- <style name="Animation.Quantum.Activity" parent="Animation.Activity"/>
-
- <style name="Animation.Quantum.Dialog">
- <item name="windowEnterAnimation">@anim/popup_enter_quantum</item>
- <item name="windowExitAnimation">@anim/popup_exit_quantum</item>
- </style>
-
- <style name="Animation.Quantum.Popup">
- <item name="windowEnterAnimation">@anim/popup_enter_quantum</item>
- <item name="windowExitAnimation">@anim/popup_exit_quantum</item>
- </style>
-
- <!-- Dialog styles -->
-
- <style name="AlertDialog.Quantum" parent="AlertDialog">
- <item name="fullDark">@color/transparent</item>
- <item name="topDark">@color/transparent</item>
- <item name="centerDark">@color/transparent</item>
- <item name="bottomDark">@color/transparent</item>
- <item name="fullBright">@color/transparent</item>
- <item name="topBright">@color/transparent</item>
- <item name="centerBright">@color/transparent</item>
- <item name="bottomBright">@color/transparent</item>
- <item name="bottomMedium">@color/transparent</item>
- <item name="centerMedium">@color/transparent</item>
- <item name="layout">@layout/alert_dialog_quantum</item>
- <item name="listLayout">@layout/select_dialog_quantum</item>
- <item name="progressLayout">@layout/progress_dialog_quantum</item>
- <item name="horizontalProgressLayout">@layout/alert_dialog_progress_quantum</item>
- <item name="listItemLayout">@layout/select_dialog_item_quantum</item>
- <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_quantum</item>
- <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_quantum</item>
- </style>
-
- <style name="AlertDialog.Quantum.Light"/>
-
- <!-- Window title -->
- <style name="WindowTitleBackground.Quantum">
- <item name="background">@null</item>
- </style>
-
- <style name="WindowTitle.Quantum">
- <item name="singleLine">true</item>
- <item name="textAppearance">@style/TextAppearance.Quantum.WindowTitle</item>
- <item name="shadowRadius">0</item>
- </style>
-
- <style name="DialogWindowTitle.Quantum">
- <item name="maxLines">1</item>
- <item name="scrollHorizontally">true</item>
- <item name="textAppearance">@style/TextAppearance.Quantum.DialogWindowTitle</item>
- </style>
-
- <style name="DialogWindowTitle.Quantum.Light">
- <item name="textAppearance">@style/TextAppearance.Quantum.DialogWindowTitle</item>
- </style>
-
-</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 61b6a0d92c76..d8e31ea5a98f 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -217,6 +217,7 @@
<java-symbol type="id" name="pin_confirm_text" />
<java-symbol type="id" name="pin_error_message" />
<java-symbol type="id" name="timePickerLayout" />
+ <java-symbol type="id" name="profile_icon" />
<java-symbol type="attr" name="actionModeShareDrawable" />
<java-symbol type="attr" name="alertDialogCenterButtons" />
@@ -346,7 +347,7 @@
<java-symbol type="dimen" name="notification_title_text_size" />
<java-symbol type="dimen" name="notification_subtext_size" />
<java-symbol type="dimen" name="immersive_mode_cling_width" />
- <java-symbol type="dimen" name="notification_quantum_rounded_rect_radius" />
+ <java-symbol type="dimen" name="notification_material_rounded_rect_radius" />
<java-symbol type="string" name="add_account_button_label" />
<java-symbol type="string" name="addToDictionary" />
@@ -1017,11 +1018,11 @@
<java-symbol type="drawable" name="text_edit_side_paste_window" />
<java-symbol type="drawable" name="text_edit_paste_window" />
<java-symbol type="drawable" name="btn_check_off" />
- <java-symbol type="drawable" name="btn_code_lock_default_qntm_alpha" />
- <java-symbol type="drawable" name="btn_code_lock_touched_qntm_alpha" />
- <java-symbol type="drawable" name="indicator_code_lock_point_area_default_qntm_alpha" />
- <java-symbol type="drawable" name="indicator_code_lock_point_area_qntm_alpha" />
- <java-symbol type="drawable" name="indicator_code_lock_drag_direction_up_qntm_alpha" />
+ <java-symbol type="drawable" name="btn_code_lock_default_mtrl_alpha" />
+ <java-symbol type="drawable" name="btn_code_lock_touched_mtrl_alpha" />
+ <java-symbol type="drawable" name="indicator_code_lock_point_area_default_mtrl_alpha" />
+ <java-symbol type="drawable" name="indicator_code_lock_point_area_mtrl_alpha" />
+ <java-symbol type="drawable" name="indicator_code_lock_drag_direction_up_mtrl_alpha" />
<java-symbol type="color" name="lock_pattern_view_regular_color" />
<java-symbol type="color" name="lock_pattern_view_success_color" />
<java-symbol type="color" name="lock_pattern_view_error_color" />
@@ -1119,6 +1120,7 @@
<java-symbol type="drawable" name="cling_arrow_up" />
<java-symbol type="drawable" name="cling_bg" />
<java-symbol type="drawable" name="ic_corp_badge" />
+ <java-symbol type="drawable" name="ic_corp_icon_badge" />
<java-symbol type="layout" name="action_bar_home" />
<java-symbol type="layout" name="action_bar_title_item" />
@@ -1507,7 +1509,7 @@
<java-symbol type="integer" name="config_defaultNotificationLedOn" />
<java-symbol type="integer" name="config_deskDockKeepsScreenOn" />
<java-symbol type="integer" name="config_lightSensorWarmupTime" />
- <java-symbol type="integer" name="config_lowBatteryCloseWarningLevel" />
+ <java-symbol type="integer" name="config_lowBatteryCloseWarningBump" />
<java-symbol type="integer" name="config_lowBatteryWarningLevel" />
<java-symbol type="integer" name="config_networkPolicyDefaultWarning" />
<java-symbol type="integer" name="config_networkTransitionTimeout" />
@@ -1655,27 +1657,26 @@
<java-symbol type="integer" name="config_maxResolverActivityColumns" />
<java-symbol type="array" name="config_notificationSignalExtractors" />
- <java-symbol type="layout" name="notification_quantum_action" />
- <java-symbol type="layout" name="notification_quantum_action_list" />
- <java-symbol type="layout" name="notification_quantum_action_tombstone" />
- <java-symbol type="layout" name="notification_template_quantum_base" />
- <java-symbol type="layout" name="notification_template_quantum_big_base" />
- <java-symbol type="layout" name="notification_template_quantum_big_picture" />
- <java-symbol type="layout" name="notification_template_quantum_big_text" />
- <java-symbol type="layout" name="notification_template_quantum_inbox" />
- <java-symbol type="layout" name="notification_template_quantum_media" />
- <java-symbol type="layout" name="notification_template_quantum_big_media" />
+ <java-symbol type="layout" name="notification_material_action" />
+ <java-symbol type="layout" name="notification_material_action_list" />
+ <java-symbol type="layout" name="notification_material_action_tombstone" />
+ <java-symbol type="layout" name="notification_template_material_base" />
+ <java-symbol type="layout" name="notification_template_material_big_base" />
+ <java-symbol type="layout" name="notification_template_material_big_picture" />
+ <java-symbol type="layout" name="notification_template_material_big_text" />
+ <java-symbol type="layout" name="notification_template_material_inbox" />
+ <java-symbol type="layout" name="notification_template_material_media" />
+ <java-symbol type="layout" name="notification_template_material_big_media" />
<java-symbol type="layout" name="notification_template_icon_group" />
- <java-symbol type="layout" name="notification_quantum_media_action" />
+ <java-symbol type="layout" name="notification_material_media_action" />
<java-symbol type="color" name="notification_action_legacy_color_filter" />
<java-symbol type="color" name="notification_icon_bg_color" />
<java-symbol type="drawable" name="notification_icon_legacy_bg" />
<java-symbol type="drawable" name="notification_icon_legacy_bg_inset" />
- <java-symbol type="drawable" name="notification_quantum_bg_dim" />
- <java-symbol type="drawable" name="notification_quantum_bg" />
- <java-symbol type="drawable" name="notification_quantum_media_progress" />
+ <java-symbol type="drawable" name="notification_material_bg_dim" />
+ <java-symbol type="drawable" name="notification_material_bg" />
+ <java-symbol type="drawable" name="notification_material_media_progress" />
<java-symbol type="color" name="notification_media_action_bg" />
- <java-symbol type="color" name="notification_media_info_bg" />
<java-symbol type="color" name="notification_media_progress" />
<java-symbol type="id" name="media_action_area" />
@@ -1862,7 +1863,7 @@
<java-symbol type="string" name="timepicker_transition_end_radius_multiplier" />
<java-symbol type="array" name="config_clockTickVibePattern" />
- <!-- From various Quantum changes -->
+ <!-- From various Material changes -->
<java-symbol type="attr" name="toolbarStyle" />
<java-symbol type="attr" name="titleTextAppearance" />
<java-symbol type="attr" name="subtitleTextAppearance" />
@@ -1871,12 +1872,12 @@
<java-symbol type="id" name="icon_frame" />
<java-symbol type="style" name="Animation.VolumePanel" />
<java-symbol type="transition" name="no_transition" />
- <java-symbol type="color" name="timepicker_default_text_color_quantum" />
- <java-symbol type="color" name="timepicker_default_disabled_color_quantum" />
- <java-symbol type="color" name="timepicker_default_ampm_unselected_background_color_quantum" />
- <java-symbol type="color" name="timepicker_default_ampm_selected_background_color_quantum" />
- <java-symbol type="color" name="timepicker_default_selector_color_quantum" />
- <java-symbol type="color" name="timepicker_default_numbers_background_color_quantum" />
- <java-symbol type="style" name="TextAppearance.Quantum.TimePicker.TimeLabel" />
+ <java-symbol type="color" name="timepicker_default_text_color_material" />
+ <java-symbol type="color" name="timepicker_default_disabled_color_material" />
+ <java-symbol type="color" name="timepicker_default_ampm_unselected_background_color_material" />
+ <java-symbol type="color" name="timepicker_default_ampm_selected_background_color_material" />
+ <java-symbol type="color" name="timepicker_default_selector_color_material" />
+ <java-symbol type="color" name="timepicker_default_numbers_background_color_material" />
+ <java-symbol type="style" name="TextAppearance.Material.TimePicker.TimeLabel" />
</resources>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index aee35ef89c0b..6b7d86100899 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -38,18 +38,18 @@ easier.
to a device’s native theme with all device customizations intact.</p>
<p>For example, when you set your app's {@code targetSdkVersion} to XX or higher, this
theme is applied to your application by default. As such, your app might appear with the
- {@link #Theme_Quantum Quantum} styles on one device, but with a different set of styles on
+ {@link #Theme_Material Material} styles on one device, but with a different set of styles on
another device. This is great if you want your app to fit with the device's native look and
feel. If, however, you prefer to keep your UI style the same across all devices, you should
- apply a specific theme such as {@link #Theme_Quantum Quantum} or one of your own design.
+ apply a specific theme such as {@link #Theme_Material Material} or one of your own design.
For more information, read <a
- href="http://android-developers.blogspot.com/20XX/XX/quantum-everywhere.html">Quantum
+ href="http://android-developers.blogspot.com/20XX/XX/material-everywhere.html">Material
Everywhere</a>.</p>
<p>Styles used by the DeviceDefault theme are named using the convention
Type.DeviceDefault.Etc (for example, {@code Widget.DeviceDefault.Button} and
{@code TextAppearance.DeviceDefault.Widget.PopupMenu.Large}).</p>
-->
- <style name="Theme.DeviceDefault" parent="Theme.Quantum" >
+ <style name="Theme.DeviceDefault" parent="Theme.Material" >
<!-- Text styles -->
<item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
<item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
@@ -210,27 +210,27 @@ easier.
</style>
<!-- Variant of {@link #Theme_DeviceDefault} with no action bar -->
- <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Quantum.NoActionBar" />
+ <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Material.NoActionBar" />
<!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar. This theme
sets {@link android.R.attr#windowFullscreen} to true. -->
- <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Quantum.NoActionBar.Fullscreen" />
+ <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Material.NoActionBar.Fullscreen" />
<!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar and
extending in to overscan region. This theme
sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
to true. -->
- <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Quantum.NoActionBar.Overscan" />
+ <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Material.NoActionBar.Overscan" />
<!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent
system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
{@link android.R.attr#windowTranslucentNavigation} to true. -->
- <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Quantum.NoActionBar.TranslucentDecor" />
+ <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Material.NoActionBar.TranslucentDecor" />
<!-- DeviceDefault theme for dialog windows and activities. This changes the window to be
floating (not fill the entire screen), and puts a frame around its contents. You can set this
theme on an activity if you would like to make an activity that looks like a Dialog. -->
- <style name="Theme.DeviceDefault.Dialog" parent="Theme.Quantum.Dialog" >
+ <style name="Theme.DeviceDefault.Dialog" parent="Theme.Material.Dialog" >
<item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>
<item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item>
@@ -243,14 +243,14 @@ easier.
<!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a
regular dialog. -->
- <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Quantum.Dialog.MinWidth" />
+ <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Material.Dialog.MinWidth" />
<!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar -->
- <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Quantum.Dialog.NoActionBar" />
+ <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Material.Dialog.NoActionBar" />
<!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width
for a regular dialog. -->
- <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Dialog.NoActionBar.MinWidth" />
+ <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Material.Dialog.NoActionBar.MinWidth" />
<!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
<style name="Theme.DeviceDefault.Dialog.FixedSize">
@@ -270,49 +270,49 @@ easier.
<!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller
screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
- <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Quantum.DialogWhenLarge" />
+ <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Material.DialogWhenLarge" />
<!-- DeviceDefault theme for a window without an action bar that will be displayed either
full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
xlarge). -->
- <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.DialogWhenLarge.NoActionBar" />
+ <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Material.DialogWhenLarge.NoActionBar" />
<!-- DeviceDefault theme for a presentation window on a secondary display. -->
- <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Quantum.Dialog.Presentation" />
+ <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Material.Dialog.Presentation" />
- <style name="Theme.DeviceDefault.Dialog.TimePicker" parent="Theme.Quantum.Dialog.TimePicker"/>
+ <style name="Theme.DeviceDefault.Dialog.TimePicker" parent="Theme.Material.Dialog.TimePicker"/>
<!-- DeviceDefault theme for panel windows. This removes all extraneous window
decorations, so you basically have an empty rectangle in which to place your content. It makes
the window floating, with a transparent background, and turns off dimming behind the window. -->
- <style name="Theme.DeviceDefault.Panel" parent="Theme.Quantum.Panel" />
+ <style name="Theme.DeviceDefault.Panel" parent="Theme.Material.Panel" />
<!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
behind them. -->
- <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Quantum.Wallpaper" />
+ <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Material.Wallpaper" />
<!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
behind them and without an action bar. -->
- <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Quantum.Wallpaper.NoTitleBar" />
+ <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Material.Wallpaper.NoTitleBar" />
<!-- DeviceDefault style for input methods, which is used by the
{@link android.inputmethodservice.InputMethodService} class.-->
- <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Quantum.InputMethod" />
+ <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Material.InputMethod" />
<!-- DeviceDefault style for input methods, which is used by the
{@link android.service.voice.VoiceInteractionSession} class.-->
- <style name="Theme.DeviceDefault.VoiceInteractionSession" parent="Theme.Quantum.VoiceInteractionSession" >
+ <style name="Theme.DeviceDefault.VoiceInteractionSession" parent="Theme.Material.VoiceInteractionSession" >
</style>
- <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Quantum.Dialog.Alert">
+ <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Material.Dialog.Alert">
<item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>
</style>
- <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Quantum.SearchBar" />
- <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Quantum.Dialog.NoFrame" />
+ <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Material.SearchBar" />
+ <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Material.Dialog.NoFrame" />
<!-- Variant of {@link #Theme_DeviceDefault} with a light-colored style -->
- <style name="Theme.DeviceDefault.Light" parent="Theme.Quantum.Light" >
+ <style name="Theme.DeviceDefault.Light" parent="Theme.Material.Light" >
<!-- Text styles -->
<item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
<item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
@@ -469,30 +469,30 @@ easier.
<!-- Variant of the DeviceDefault (light) theme that has a solid (opaque) action bar with an
inverse color profile. -->
- <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Quantum.Light.DarkActionBar" />
+ <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Material.Light.DarkActionBar" />
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar -->
- <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Quantum.Light.NoActionBar" />
+ <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Material.Light.NoActionBar" />
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar.
This theme sets {@link android.R.attr#windowFullscreen} to true. -->
- <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Quantum.Light.NoActionBar.Fullscreen" />
+ <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Material.Light.NoActionBar.Fullscreen" />
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar
and extending in to overscan region. This theme
sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
to true. -->
- <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan" parent="Theme.Quantum.Light.NoActionBar.Overscan" />
+ <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan" parent="Theme.Material.Light.NoActionBar.Overscan" />
<!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent
system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
{@link android.R.attr#windowTranslucentNavigation} to true. -->
- <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" parent="Theme.Quantum.Light.NoActionBar.TranslucentDecor" />
+ <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" parent="Theme.Material.Light.NoActionBar.TranslucentDecor" />
<!-- DeviceDefault light theme for dialog windows and activities. This changes the window to be
floating (not fill the entire screen), and puts a frame around its contents. You can set this
theme on an activity if you would like to make an activity that looks like a Dialog.-->
- <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Quantum.Light.Dialog" >
+ <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Material.Light.Dialog" >
<item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item>
<item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item>
@@ -505,14 +505,14 @@ easier.
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} that has a nice minimum width for a
regular dialog. -->
- <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Quantum.Light.Dialog.MinWidth" />
+ <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Material.Light.Dialog.MinWidth" />
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} without an action bar -->
- <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Quantum.Light.Dialog.NoActionBar" />
+ <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Material.Light.Dialog.NoActionBar" />
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog_NoActionBar} that has a nice minimum
width for a regular dialog. -->
- <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" />
+ <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Material.Light.Dialog.NoActionBar.MinWidth" />
<!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
<style name="Theme.DeviceDefault.Light.Dialog.FixedSize">
@@ -532,27 +532,27 @@ easier.
<!-- DeviceDefault light theme for a window that will be displayed either full-screen on smaller
screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
- <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Quantum.Light.DialogWhenLarge" />
+ <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Material.Light.DialogWhenLarge" />
<!-- DeviceDefault light theme for a window without an action bar that will be displayed either
full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
xlarge). -->
- <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.Light.DialogWhenLarge.NoActionBar" />
+ <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Material.Light.DialogWhenLarge.NoActionBar" />
<!-- DeviceDefault light theme for a presentation window on a secondary display. -->
- <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Quantum.Light.Dialog.Presentation" />
+ <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Material.Light.Dialog.Presentation" />
- <style name="Theme.DeviceDefault.Light.Dialog.TimePicker" parent="Theme.Quantum.Light.Dialog.TimePicker"/>
+ <style name="Theme.DeviceDefault.Light.Dialog.TimePicker" parent="Theme.Material.Light.Dialog.TimePicker"/>
<!-- DeviceDefault light theme for panel windows. This removes all extraneous window
decorations, so you basically have an empty rectangle in which to place your content. It makes
the window floating, with a transparent background, and turns off dimming behind the window. -->
- <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Quantum.Light.Panel" />
+ <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Material.Light.Panel" />
- <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Quantum.Light.Dialog.Alert">
+ <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Material.Light.Dialog.Alert">
<item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item>
</style>
- <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Quantum.Light.SearchBar" />
+ <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Material.Light.SearchBar" />
</resources>
diff --git a/core/res/res/values/themes_quantum.xml b/core/res/res/values/themes_material.xml
index eda7174d8d5c..1304d2b2aa0f 100644
--- a/core/res/res/values/themes_quantum.xml
+++ b/core/res/res/values/themes_material.xml
@@ -19,7 +19,7 @@
PLEASE READ
===============================================================
-The Quantum themes must not be modified in order to pass CTS.
+The Material themes must not be modified in order to pass CTS.
Many related themes and styles depend on other values defined in this file.
If you would like to provide custom themes and styles for your device,
please see themes_device_defaults.xml.
@@ -30,89 +30,89 @@ please see themes_device_defaults.xml.
-->
<resources>
- <!-- Quantum Paper theme (dark version).
+ <!-- Material theme (dark version).
<p>If you want to ensure that your
- app consistently uses the Quantum theme at all times, you must explicitly declare it in your
- manifest. For example, {@code &lt;application android:theme="@style/Theme.Quantum"&gt;}.
+ app consistently uses the Material theme at all times, you must explicitly declare it in your
+ manifest. For example, {@code &lt;application android:theme="@style/Theme.Material"&gt;}.
- <p>Styles used by the Quantum theme are named using the convention Type.Quantum.Etc
- (for example, {@code Widget.Quantum.Button} and {@code
- TextAppearance.Quantum.Widget.PopupMenu.Large}).
- Specific resources used by Quantum are named using the convention @type/foo_bar_baz_quantum
+ <p>Styles used by the Material theme are named using the convention Type.Material.Etc
+ (for example, {@code Widget.Material.Button} and {@code
+ TextAppearance.Material.Widget.PopupMenu.Large}).
+ Specific resources used by Material are named using the convention @type/foo_bar_baz_material
with trailing _dark or _light specifiers if they are not shared between both light and
dark versions of the theme. -->
- <style name="Theme.Quantum">
- <item name="colorForeground">@color/bright_foreground_quantum_dark</item>
- <item name="colorForegroundInverse">@color/bright_foreground_quantum_light</item>
- <item name="colorBackground">@color/background_quantum_dark</item>
- <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_dark</item>
+ <style name="Theme.Material">
+ <item name="colorForeground">@color/bright_foreground_material_dark</item>
+ <item name="colorForegroundInverse">@color/bright_foreground_material_light</item>
+ <item name="colorBackground">@color/background_material_dark</item>
+ <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_dark</item>
<item name="disabledAlpha">0.5</item>
<item name="backgroundDimAmount">0.6</item>
<!-- Text styles -->
- <item name="textAppearance">@style/TextAppearance.Quantum</item>
- <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
-
- <item name="textColorPrimary">@color/primary_text_quantum_dark</item>
- <item name="textColorPrimaryInverse">@color/primary_text_quantum_light</item>
- <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_dark</item>
- <item name="textColorSecondaryInverse">@color/secondary_text_quantum_light</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_dark</item>
- <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_light</item>
- <item name="textColorHint">@color/hint_foreground_quantum_dark</item>
- <item name="textColorHintInverse">@color/hint_foreground_quantum_light</item>
- <item name="textColorHighlight">@color/highlighted_text_quantum_dark</item>
- <item name="textColorHighlightInverse">@color/highlighted_text_quantum_light</item>
- <item name="textColorLink">@color/quantum_teal_500</item>
- <item name="textColorLinkInverse">@color/quantum_teal_500</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_dark</item>
- <item name="textColorAlertDialogListItem">@color/primary_text_quantum_dark</item>
-
- <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item>
- <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item>
- <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
- <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item>
- <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
- <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item>
- <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item>
- <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item>
-
- <item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item>
+ <item name="textAppearance">@style/TextAppearance.Material</item>
+ <item name="textAppearanceInverse">@style/TextAppearance.Material.Inverse</item>
+
+ <item name="textColorPrimary">@color/primary_text_material_dark</item>
+ <item name="textColorPrimaryInverse">@color/primary_text_material_light</item>
+ <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_material_dark</item>
+ <item name="textColorSecondary">@color/secondary_text_material_dark</item>
+ <item name="textColorSecondaryInverse">@color/secondary_text_material_light</item>
+ <item name="textColorTertiary">@color/tertiary_text_material_dark</item>
+ <item name="textColorTertiaryInverse">@color/tertiary_text_material_light</item>
+ <item name="textColorHint">@color/hint_foreground_material_dark</item>
+ <item name="textColorHintInverse">@color/hint_foreground_material_light</item>
+ <item name="textColorHighlight">@color/highlighted_text_material_dark</item>
+ <item name="textColorHighlightInverse">@color/highlighted_text_material_light</item>
+ <item name="textColorLink">@color/material_teal_500</item>
+ <item name="textColorLinkInverse">@color/material_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_material_dark</item>
+ <item name="textColorAlertDialogListItem">@color/primary_text_material_dark</item>
+
+ <item name="textAppearanceLarge">@style/TextAppearance.Material.Large</item>
+ <item name="textAppearanceLargeInverse">@style/TextAppearance.Material.Large.Inverse</item>
+ <item name="textAppearanceMedium">@style/TextAppearance.Material.Medium</item>
+ <item name="textAppearanceMediumInverse">@style/TextAppearance.Material.Medium.Inverse</item>
+ <item name="textAppearanceSmall">@style/TextAppearance.Material.Small</item>
+ <item name="textAppearanceSmallInverse">@style/TextAppearance.Material.Small.Inverse</item>
+ <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Material.SearchResult.Title</item>
+ <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Material.SearchResult.Subtitle</item>
+
+ <item name="textAppearanceButton">@style/TextAppearance.Material.Widget.Button</item>
<item name="editTextColor">?attr/textColorPrimary</item>
- <item name="editTextBackground">@drawable/edit_text_quantum</item>
+ <item name="editTextBackground">@drawable/edit_text_material</item>
<item name="candidatesTextStyleSpans">@string/candidates_style</item>
<item name="textCheckMark">@drawable/indicator_check_mark_dark</item>
<item name="textCheckMarkInverse">@drawable/indicator_check_mark_light</item>
- <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Large</item>
- <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Small</item>
+ <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Material.Widget.PopupMenu.Large</item>
+ <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Material.Widget.PopupMenu.Small</item>
<!-- Button styles -->
- <item name="buttonStyle">@style/Widget.Quantum.Button</item>
- <item name="buttonStyleSmall">@style/Widget.Quantum.Button.Small</item>
- <item name="buttonStyleInset">@style/Widget.Quantum.Button.Inset</item>
- <item name="buttonStyleToggle">@style/Widget.Quantum.Button.Toggle</item>
+ <item name="buttonStyle">@style/Widget.Material.Button</item>
+ <item name="buttonStyleSmall">@style/Widget.Material.Button.Small</item>
+ <item name="buttonStyleInset">@style/Widget.Material.Button.Inset</item>
+ <item name="buttonStyleToggle">@style/Widget.Material.Button.Toggle</item>
- <item name="switchStyle">@style/Widget.Quantum.CompoundButton.Switch</item>
- <item name="mediaRouteButtonStyle">@style/Widget.Quantum.MediaRouteButton</item>
+ <item name="switchStyle">@style/Widget.Material.CompoundButton.Switch</item>
+ <item name="mediaRouteButtonStyle">@style/Widget.Material.MediaRouteButton</item>
- <item name="selectableItemBackground">@drawable/item_background_quantum</item>
- <item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_quantum</item>
- <item name="borderlessButtonStyle">@style/Widget.Quantum.Button.Borderless</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
+ <item name="selectableItemBackground">@drawable/item_background_material</item>
+ <item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_material</item>
+ <item name="borderlessButtonStyle">@style/Widget.Material.Button.Borderless</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_material</item>
<!-- List attributes -->
<item name="listPreferredItemHeight">64dip</item>
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Quantum.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Quantum.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Quantum.Body1</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="listPreferredItemPaddingLeft">16dip</item>
<item name="listPreferredItemPaddingRight">16dip</item>
<item name="listPreferredItemPaddingStart">16dip</item>
@@ -120,16 +120,16 @@ please see themes_device_defaults.xml.
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
- <item name="listDivider">@drawable/list_divider_quantum</item>
- <item name="listSeparatorTextViewStyle">@style/Widget.Quantum.TextView.ListSeparator</item>
+ <item name="listDivider">@drawable/list_divider_material</item>
+ <item name="listSeparatorTextViewStyle">@style/Widget.Material.TextView.ListSeparator</item>
- <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum_anim</item>
- <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_anim</item>
+ <item name="listChoiceIndicatorSingle">@drawable/btn_radio_material_anim</item>
+ <item name="listChoiceIndicatorMultiple">@drawable/btn_check_material_anim</item>
<item name="listChoiceBackgroundIndicator">?attr/selectableItemBackground</item>
- <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum</item>
+ <item name="activatedBackgroundIndicator">@drawable/activated_background_material</item>
- <item name="listDividerAlertDialog">@drawable/list_divider_quantum</item>
+ <item name="listDividerAlertDialog">@drawable/list_divider_material</item>
<item name="expandableListPreferredItemPaddingLeft">40dip</item>
<item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
@@ -138,14 +138,14 @@ please see themes_device_defaults.xml.
<item name="expandableListPreferredItemIndicatorRight">0dip</item>
<item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
- <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum</item>
- <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum</item>
+ <item name="findOnPageNextDrawable">@drawable/ic_find_next_material</item>
+ <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_material</item>
<!-- Gallery attributes -->
<item name="galleryItemBackground">@drawable/gallery_item_background</item>
<!-- Window attributes -->
- <item name="windowBackground">@color/background_quantum_dark</item>
+ <item name="windowBackground">@color/background_material_dark</item>
<item name="windowFrame">@null</item>
<item name="windowNoTitle">false</item>
<item name="windowFullscreen">false</item>
@@ -153,11 +153,11 @@ please see themes_device_defaults.xml.
<item name="windowIsFloating">false</item>
<item name="windowContentOverlay">@null</item>
<item name="windowShowWallpaper">false</item>
- <item name="windowTitleStyle">@style/WindowTitle.Quantum</item>
+ <item name="windowTitleStyle">@style/WindowTitle.Material</item>
<item name="windowTitleSize">25dip</item>
- <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Quantum</item>
+ <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Material</item>
<item name="windowContentTransitions">false</item>
- <item name="windowAnimationStyle">@style/Animation.Quantum.Activity</item>
+ <item name="windowAnimationStyle">@style/Animation.Material.Activity</item>
<item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
<item name="windowActionBar">true</item>
<item name="windowActionModeOverlay">false</item>
@@ -170,19 +170,19 @@ please see themes_device_defaults.xml.
<item name="windowSharedElementExitTransition">@transition/move</item>
<!-- Dialog attributes -->
- <item name="dialogTheme">@style/Theme.Quantum.Dialog</item>
- <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_quantum</item>
- <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_quantum</item>
- <item name="dialogTitleDecorLayout">@layout/dialog_title_quantum</item>
+ <item name="dialogTheme">@style/Theme.Material.Dialog</item>
+ <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_material</item>
+ <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_material</item>
+ <item name="dialogTitleDecorLayout">@layout/dialog_title_material</item>
<!-- AlertDialog attributes -->
- <item name="alertDialogTheme">@style/Theme.Quantum.Dialog.Alert</item>
- <item name="alertDialogStyle">@style/AlertDialog.Quantum</item>
+ <item name="alertDialogTheme">@style/Theme.Material.Dialog.Alert</item>
+ <item name="alertDialogStyle">@style/AlertDialog.Material</item>
<item name="alertDialogCenterButtons">false</item>
- <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum</item>
+ <item name="alertDialogIcon">@drawable/ic_dialog_alert_material</item>
<!-- Presentation attributes -->
- <item name="presentationTheme">@style/Theme.Quantum.Dialog.Presentation</item>
+ <item name="presentationTheme">@style/Theme.Material.Dialog.Presentation</item>
<!-- Toast attributes -->
<item name="toastFrameBackground">@drawable/toast_frame</item>
@@ -197,269 +197,271 @@ please see themes_device_defaults.xml.
<item name="panelMenuIsCompact">true</item>
<item name="panelMenuListWidth">250dip</item>
- <item name="panelMenuListTheme">@style/Theme.Quantum.CompactMenu</item>
+ <item name="panelMenuListTheme">@style/Theme.Material.CompactMenu</item>
<!-- Scrollbar attributes -->
<item name="scrollbarFadeDuration">250</item>
<item name="scrollbarDefaultDelayBeforeFade">300</item>
<item name="scrollbarSize">10dip</item>
- <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum</item>
- <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum</item>
+ <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
+ <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_material</item>
<item name="scrollbarTrackHorizontal">@null</item>
<item name="scrollbarTrackVertical">@null</item>
<!-- Text selection handle attributes -->
- <item name="textSelectHandleLeft">@drawable/text_select_handle_left_quantum</item>
- <item name="textSelectHandleRight">@drawable/text_select_handle_right_quantum</item>
- <item name="textSelectHandle">@drawable/text_select_handle_middle_quantum</item>
- <item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
- <item name="textSuggestionsWindowStyle">@style/Widget.Quantum.TextSuggestionsPopupWindow</item>
- <item name="textCursorDrawable">@drawable/text_cursor_quantum</item>
+ <item name="textSelectHandleLeft">@drawable/text_select_handle_left_material</item>
+ <item name="textSelectHandleRight">@drawable/text_select_handle_right_material</item>
+ <item name="textSelectHandle">@drawable/text_select_handle_middle_material</item>
+ <item name="textSelectHandleWindowStyle">@style/Widget.Material.TextSelectHandle</item>
+ <item name="textSuggestionsWindowStyle">@style/Widget.Material.TextSuggestionsPopupWindow</item>
+ <item name="textCursorDrawable">@drawable/text_cursor_material</item>
<!-- Widget styles -->
- <item name="absListViewStyle">@style/Widget.Quantum.AbsListView</item>
- <item name="autoCompleteTextViewStyle">@style/Widget.Quantum.AutoCompleteTextView</item>
- <item name="checkboxStyle">@style/Widget.Quantum.CompoundButton.CheckBox</item>
- <item name="checkedTextViewStyle">@style/Widget.Quantum.CheckedTextView</item>
- <item name="dropDownListViewStyle">@style/Widget.Quantum.ListView.DropDown</item>
- <item name="editTextStyle">@style/Widget.Quantum.EditText</item>
- <item name="expandableListViewStyle">@style/Widget.Quantum.ExpandableListView</item>
- <item name="expandableListViewWhiteStyle">@style/Widget.Quantum.ExpandableListView.White</item>
- <item name="fastScrollStyle">@style/Widget.Quantum.FastScroll</item>
- <item name="galleryStyle">@style/Widget.Quantum.Gallery</item>
- <item name="gestureOverlayViewStyle">@style/Widget.Quantum.GestureOverlayView</item>
- <item name="gridViewStyle">@style/Widget.Quantum.GridView</item>
- <item name="imageButtonStyle">@style/Widget.Quantum.ImageButton</item>
- <item name="imageWellStyle">@style/Widget.Quantum.ImageWell</item>
- <item name="listViewStyle">@style/Widget.Quantum.ListView</item>
- <item name="listViewWhiteStyle">@style/Widget.Quantum.ListView.White</item>
- <item name="popupWindowStyle">@style/Widget.Quantum.PopupWindow</item>
- <item name="progressBarStyle">@style/Widget.Quantum.ProgressBar</item>
- <item name="progressBarStyleHorizontal">@style/Widget.Quantum.ProgressBar.Horizontal</item>
- <item name="progressBarStyleSmall">@style/Widget.Quantum.ProgressBar.Small</item>
- <item name="progressBarStyleSmallTitle">@style/Widget.Quantum.ProgressBar.Small.Title</item>
- <item name="progressBarStyleLarge">@style/Widget.Quantum.ProgressBar.Large</item>
- <item name="progressBarStyleInverse">@style/Widget.Quantum.ProgressBar.Inverse</item>
- <item name="progressBarStyleSmallInverse">@style/Widget.Quantum.ProgressBar.Small.Inverse</item>
- <item name="progressBarStyleLargeInverse">@style/Widget.Quantum.ProgressBar.Large.Inverse</item>
- <item name="seekBarStyle">@style/Widget.Quantum.SeekBar</item>
- <item name="ratingBarStyle">@style/Widget.Quantum.RatingBar</item>
- <item name="ratingBarStyleIndicator">@style/Widget.Quantum.RatingBar.Indicator</item>
- <item name="ratingBarStyleSmall">@style/Widget.Quantum.RatingBar.Small</item>
- <item name="radioButtonStyle">@style/Widget.Quantum.CompoundButton.RadioButton</item>
- <item name="scrollViewStyle">@style/Widget.Quantum.ScrollView</item>
- <item name="horizontalScrollViewStyle">@style/Widget.Quantum.HorizontalScrollView</item>
+ <item name="absListViewStyle">@style/Widget.Material.AbsListView</item>
+ <item name="autoCompleteTextViewStyle">@style/Widget.Material.AutoCompleteTextView</item>
+ <item name="checkboxStyle">@style/Widget.Material.CompoundButton.CheckBox</item>
+ <item name="checkedTextViewStyle">@style/Widget.Material.CheckedTextView</item>
+ <item name="dropDownListViewStyle">@style/Widget.Material.ListView.DropDown</item>
+ <item name="editTextStyle">@style/Widget.Material.EditText</item>
+ <item name="expandableListViewStyle">@style/Widget.Material.ExpandableListView</item>
+ <item name="expandableListViewWhiteStyle">@style/Widget.Material.ExpandableListView.White</item>
+ <item name="fastScrollStyle">@style/Widget.Material.FastScroll</item>
+ <item name="galleryStyle">@style/Widget.Material.Gallery</item>
+ <item name="gestureOverlayViewStyle">@style/Widget.Material.GestureOverlayView</item>
+ <item name="gridViewStyle">@style/Widget.Material.GridView</item>
+ <item name="imageButtonStyle">@style/Widget.Material.ImageButton</item>
+ <item name="imageWellStyle">@style/Widget.Material.ImageWell</item>
+ <item name="listViewStyle">@style/Widget.Material.ListView</item>
+ <item name="listViewWhiteStyle">@style/Widget.Material.ListView.White</item>
+ <item name="popupWindowStyle">@style/Widget.Material.PopupWindow</item>
+ <item name="progressBarStyle">@style/Widget.Material.ProgressBar</item>
+ <item name="progressBarStyleHorizontal">@style/Widget.Material.ProgressBar.Horizontal</item>
+ <item name="progressBarStyleSmall">@style/Widget.Material.ProgressBar.Small</item>
+ <item name="progressBarStyleSmallTitle">@style/Widget.Material.ProgressBar.Small.Title</item>
+ <item name="progressBarStyleLarge">@style/Widget.Material.ProgressBar.Large</item>
+ <item name="progressBarStyleInverse">@style/Widget.Material.ProgressBar.Inverse</item>
+ <item name="progressBarStyleSmallInverse">@style/Widget.Material.ProgressBar.Small.Inverse</item>
+ <item name="progressBarStyleLargeInverse">@style/Widget.Material.ProgressBar.Large.Inverse</item>
+ <item name="seekBarStyle">@style/Widget.Material.SeekBar</item>
+ <item name="ratingBarStyle">@style/Widget.Material.RatingBar</item>
+ <item name="ratingBarStyleIndicator">@style/Widget.Material.RatingBar.Indicator</item>
+ <item name="ratingBarStyleSmall">@style/Widget.Material.RatingBar.Small</item>
+ <item name="radioButtonStyle">@style/Widget.Material.CompoundButton.RadioButton</item>
+ <item name="scrollViewStyle">@style/Widget.Material.ScrollView</item>
+ <item name="horizontalScrollViewStyle">@style/Widget.Material.HorizontalScrollView</item>
<item name="spinnerStyle">?attr/dropDownSpinnerStyle</item>
- <item name="dropDownSpinnerStyle">@style/Widget.Quantum.Spinner.DropDown</item>
- <item name="starStyle">@style/Widget.Quantum.CompoundButton.Star</item>
- <item name="tabWidgetStyle">@style/Widget.Quantum.TabWidget</item>
- <item name="textViewStyle">@style/Widget.Quantum.TextView</item>
+ <item name="dropDownSpinnerStyle">@style/Widget.Material.Spinner.DropDown</item>
+ <item name="starStyle">@style/Widget.Material.CompoundButton.Star</item>
+ <item name="tabWidgetStyle">@style/Widget.Material.TabWidget</item>
+ <item name="textViewStyle">@style/Widget.Material.TextView</item>
<item name="errorMessageBackground">@drawable/popup_inline_error_holo_dark</item>
<item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_dark</item>
- <item name="webTextViewStyle">@style/Widget.Quantum.WebTextView</item>
- <item name="webViewStyle">@style/Widget.Quantum.WebView</item>
- <item name="dropDownItemStyle">@style/Widget.Quantum.DropDownItem</item>
- <item name="spinnerDropDownItemStyle">@style/Widget.Quantum.DropDownItem.Spinner</item>
- <item name="spinnerItemStyle">@style/Widget.Quantum.TextView.SpinnerItem</item>
- <item name="dropDownHintAppearance">@style/TextAppearance.Quantum.Widget.DropDownHint</item>
- <item name="keyboardViewStyle">@style/Widget.Quantum.KeyboardView</item>
- <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Quantum.QuickContactBadge.WindowSmall</item>
- <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Quantum.QuickContactBadge.WindowMedium</item>
- <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Quantum.QuickContactBadge.WindowLarge</item>
- <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Quantum.QuickContactBadgeSmall.WindowSmall</item>
- <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Quantum.QuickContactBadgeSmall.WindowMedium</item>
- <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Quantum.QuickContactBadgeSmall.WindowLarge</item>
- <item name="listPopupWindowStyle">@style/Widget.Quantum.ListPopupWindow</item>
- <item name="popupMenuStyle">@style/Widget.Quantum.PopupMenu</item>
- <item name="stackViewStyle">@style/Widget.Quantum.StackView</item>
- <item name="activityChooserViewStyle">@style/Widget.Quantum.ActivityChooserView</item>
+ <item name="webTextViewStyle">@style/Widget.Material.WebTextView</item>
+ <item name="webViewStyle">@style/Widget.Material.WebView</item>
+ <item name="dropDownItemStyle">@style/Widget.Material.DropDownItem</item>
+ <item name="spinnerDropDownItemStyle">@style/Widget.Material.DropDownItem.Spinner</item>
+ <item name="spinnerItemStyle">@style/Widget.Material.TextView.SpinnerItem</item>
+ <item name="dropDownHintAppearance">@style/TextAppearance.Material.Widget.DropDownHint</item>
+ <item name="keyboardViewStyle">@style/Widget.Material.KeyboardView</item>
+ <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Material.QuickContactBadge.WindowSmall</item>
+ <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Material.QuickContactBadge.WindowMedium</item>
+ <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Material.QuickContactBadge.WindowLarge</item>
+ <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Material.QuickContactBadgeSmall.WindowSmall</item>
+ <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Material.QuickContactBadgeSmall.WindowMedium</item>
+ <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Material.QuickContactBadgeSmall.WindowLarge</item>
+ <item name="listPopupWindowStyle">@style/Widget.Material.ListPopupWindow</item>
+ <item name="popupMenuStyle">@style/Widget.Material.PopupMenu</item>
+ <item name="stackViewStyle">@style/Widget.Material.StackView</item>
+ <item name="activityChooserViewStyle">@style/Widget.Material.ActivityChooserView</item>
<!-- Preference styles -->
- <item name="preferenceScreenStyle">@style/Preference.Quantum.PreferenceScreen</item>
- <item name="preferenceFragmentStyle">@style/PreferenceFragment.Quantum</item>
+ <item name="preferenceScreenStyle">@style/Preference.Material.PreferenceScreen</item>
+ <item name="preferenceFragmentStyle">@style/PreferenceFragment.Material</item>
<item name="preferenceFragmentPaddingSide">0dip</item>
- <item name="preferenceCategoryStyle">@style/Preference.Quantum.Category</item>
- <item name="preferenceStyle">@style/Preference.Quantum</item>
- <item name="preferenceInformationStyle">@style/Preference.Quantum.Information</item>
- <item name="checkBoxPreferenceStyle">@style/Preference.Quantum.CheckBoxPreference</item>
- <item name="switchPreferenceStyle">@style/Preference.Quantum.SwitchPreference</item>
- <item name="yesNoPreferenceStyle">@style/Preference.Quantum.DialogPreference.YesNoPreference</item>
- <item name="dialogPreferenceStyle">@style/Preference.Quantum.DialogPreference</item>
- <item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
- <item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
- <item name="preferenceLayoutChild">@layout/preference_child_quantum</item>
+ <item name="preferenceCategoryStyle">@style/Preference.Material.Category</item>
+ <item name="preferenceStyle">@style/Preference.Material</item>
+ <item name="preferenceInformationStyle">@style/Preference.Material.Information</item>
+ <item name="checkBoxPreferenceStyle">@style/Preference.Material.CheckBoxPreference</item>
+ <item name="switchPreferenceStyle">@style/Preference.Material.SwitchPreference</item>
+ <item name="yesNoPreferenceStyle">@style/Preference.Material.DialogPreference.YesNoPreference</item>
+ <item name="dialogPreferenceStyle">@style/Preference.Material.DialogPreference</item>
+ <item name="editTextPreferenceStyle">@style/Preference.Material.DialogPreference.EditTextPreference</item>
+ <item name="ringtonePreferenceStyle">@style/Preference.Material.RingtonePreference</item>
+ <item name="preferenceLayoutChild">@layout/preference_child_material</item>
<item name="detailsElementBackground">?attr/colorBackground</item>
<!-- Search widget styles -->
<item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>
<!-- Action bar styles -->
- <item name="actionDropDownStyle">@style/Widget.Quantum.Spinner.DropDown.ActionBar</item>
- <item name="actionButtonStyle">@style/Widget.Quantum.ActionButton</item>
- <item name="actionOverflowButtonStyle">@style/Widget.Quantum.ActionButton.Overflow</item>
- <item name="actionOverflowMenuStyle">@android:style/Widget.Quantum.PopupMenu.Overflow</item>
+ <item name="actionDropDownStyle">@style/Widget.Material.Spinner.DropDown.ActionBar</item>
+ <item name="actionButtonStyle">@style/Widget.Material.ActionButton</item>
+ <item name="actionOverflowButtonStyle">@style/Widget.Material.ActionButton.Overflow</item>
+ <item name="actionOverflowMenuStyle">@android:style/Widget.Material.PopupMenu.Overflow</item>
<item name="actionModeBackground">?attr/colorPrimaryDark</item>
<item name="actionModeSplitBackground">?attr/colorPrimaryDark</item>
- <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum</item>
- <item name="actionBarTabStyle">@style/Widget.Quantum.ActionBar.TabView</item>
- <item name="actionBarTabBarStyle">@style/Widget.Quantum.ActionBar.TabBar</item>
- <item name="actionBarTabTextStyle">@style/Widget.Quantum.ActionBar.TabText</item>
- <item name="actionModeStyle">@style/Widget.Quantum.ActionMode</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.Quantum.ActionButton.CloseMode</item>
- <item name="actionBarStyle">@style/Widget.Quantum.ActionBar.Solid</item>
- <item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
- <item name="actionModePopupWindowStyle">@style/Widget.Quantum.PopupWindow.ActionMode</item>
+ <item name="actionModeCloseDrawable">@drawable/ic_cab_done_material</item>
+ <item name="actionBarTabStyle">@style/Widget.Material.ActionBar.TabView</item>
+ <item name="actionBarTabBarStyle">@style/Widget.Material.ActionBar.TabBar</item>
+ <item name="actionBarTabTextStyle">@style/Widget.Material.ActionBar.TabText</item>
+ <item name="actionModeStyle">@style/Widget.Material.ActionMode</item>
+ <item name="actionModeCloseButtonStyle">@style/Widget.Material.ActionButton.CloseMode</item>
+ <item name="actionBarStyle">@style/Widget.Material.ActionBar.Solid</item>
+ <item name="actionBarSize">@dimen/action_bar_default_height_material</item>
+ <item name="actionModePopupWindowStyle">@style/Widget.Material.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/ThemeOverlay.Quantum.ActionBar</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.Material.ActionBar</item>
<item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
- <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
- <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum</item>
- <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum</item>
- <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum</item>
- <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum</item>
- <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum</item>
- <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum</item>
+ <item name="actionModeCutDrawable">@drawable/ic_menu_cut_material</item>
+ <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_material</item>
+ <item name="actionModePasteDrawable">@drawable/ic_menu_paste_material</item>
+ <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_material</item>
+ <item name="actionModeShareDrawable">@drawable/ic_menu_share_material</item>
+ <item name="actionModeFindDrawable">@drawable/ic_menu_find_material</item>
+ <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_material</item>
+
+ <item name="toolbarStyle">@style/Widget.Material.Toolbar</item>
<item name="dividerVertical">?attr/listDivider</item>
<item name="dividerHorizontal">?attr/listDivider</item>
- <item name="buttonBarStyle">@style/Widget.Quantum.ButtonBar</item>
- <item name="buttonBarButtonStyle">@style/Widget.Quantum.Button.Borderless</item>
- <item name="segmentedButtonStyle">@style/Widget.Quantum.SegmentedButton</item>
+ <item name="buttonBarStyle">@style/Widget.Material.ButtonBar</item>
+ <item name="buttonBarButtonStyle">@style/Widget.Material.Button.Borderless</item>
+ <item name="segmentedButtonStyle">@style/Widget.Material.SegmentedButton</item>
<!-- SearchView attributes -->
<item name="searchDropdownBackground">?attr/colorBackground</item>
- <item name="searchViewTextField">@drawable/textfield_search_quantum</item>
- <item name="searchViewTextFieldRight">@drawable/textfield_search_quantum</item>
- <item name="searchViewCloseIcon">@android:drawable/ic_clear_quantum</item>
- <item name="searchViewSearchIcon">@android:drawable/ic_search_api_quantum</item>
- <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_quantum</item>
- <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_quantum</item>
- <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_quantum</item>
+ <item name="searchViewTextField">@drawable/textfield_search_material</item>
+ <item name="searchViewTextFieldRight">@drawable/textfield_search_material</item>
+ <item name="searchViewCloseIcon">@android:drawable/ic_clear_material</item>
+ <item name="searchViewSearchIcon">@android:drawable/ic_search_api_material</item>
+ <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_material</item>
+ <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_material</item>
+ <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_material</item>
- <item name="searchDialogTheme">@style/Theme.Quantum.SearchBar</item>
+ <item name="searchDialogTheme">@style/Theme.Material.SearchBar</item>
<!-- PreferenceFrameLayout attributes -->
- <item name="preferenceFrameLayoutStyle">@style/Widget.Quantum.PreferenceFrameLayout</item>
+ <item name="preferenceFrameLayoutStyle">@style/Widget.Material.PreferenceFrameLayout</item>
<!-- NumberPicker style-->
- <item name="numberPickerStyle">@style/Widget.Quantum.NumberPicker</item>
+ <item name="numberPickerStyle">@style/Widget.Material.NumberPicker</item>
<!-- CalendarView style-->
- <item name="calendarViewStyle">@style/Widget.Quantum.CalendarView</item>
+ <item name="calendarViewStyle">@style/Widget.Material.CalendarView</item>
<!-- TimePicker style -->
- <item name="timePickerStyle">@style/Widget.Quantum.TimePicker</item>
+ <item name="timePickerStyle">@style/Widget.Material.TimePicker</item>
<!-- TimePicker background color -->
<item name="timePickerHeaderBackgroundColor">?colorBackground</item>
<!-- TimePicker Header time label text appearance -->
- <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.TimeLabel</item>
+ <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Material.TimePicker.TimeLabel</item>
<!-- TimePicker Header am pm label text appearance -->
- <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.AmPmLabel</item>
+ <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Material.TimePicker.AmPmLabel</item>
<!-- TimePicker dialog theme -->
- <item name="timePickerDialogTheme">@style/Theme.Quantum.Dialog.TimePicker</item>
+ <item name="timePickerDialogTheme">@style/Theme.Material.Dialog.TimePicker</item>
<!-- DatePicker style -->
- <item name="datePickerStyle">@style/Widget.Quantum.DatePicker</item>
+ <item name="datePickerStyle">@style/Widget.Material.DatePicker</item>
<!-- TODO: This belongs in a FastScroll style -->
- <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum</item>
+ <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_dark</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_dark</item>
- <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum</item>
+ <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_material</item>
<item name="fastScrollOverlayPosition">atThumb</item>
<!-- Color palette -->
- <item name="colorPrimaryDark">@color/quantum_blue_grey_900</item>
- <item name="colorPrimary">@color/quantum_blue_grey_800</item>
- <item name="colorAccent">@color/quantum_light_blue_A200</item>
+ <item name="colorPrimaryDark">@color/material_blue_grey_900</item>
+ <item name="colorPrimary">@color/material_blue_grey_800</item>
+ <item name="colorAccent">@color/material_light_blue_A200</item>
<item name="colorControlNormal">?attr/textColorSecondary</item>
<item name="colorControlActivated">?attr/colorAccent</item>
- <item name="colorControlHighlight">@color/ripple_quantum_dark</item>
- <item name="colorButtonNormal">@color/btn_default_quantum_dark</item>
+ <item name="colorControlHighlight">@color/ripple_material_dark</item>
+ <item name="colorButtonNormal">@color/btn_default_material_dark</item>
</style>
- <!-- Quantum Paper theme (light version). -->
- <style name="Theme.Quantum.Light" parent="Theme.Light">
- <item name="colorForeground">@color/bright_foreground_quantum_light</item>
- <item name="colorForegroundInverse">@color/bright_foreground_quantum_dark</item>
- <item name="colorBackground">@color/background_quantum_light</item>
- <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_light</item>
+ <!-- Material theme (light version). -->
+ <style name="Theme.Material.Light" parent="Theme.Light">
+ <item name="colorForeground">@color/bright_foreground_material_light</item>
+ <item name="colorForegroundInverse">@color/bright_foreground_material_dark</item>
+ <item name="colorBackground">@color/background_material_light</item>
+ <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_light</item>
<item name="disabledAlpha">0.5</item>
<item name="backgroundDimAmount">0.6</item>
<!-- Text styles -->
- <item name="textAppearance">@style/TextAppearance.Quantum</item>
- <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
-
- <item name="textColorPrimary">@color/primary_text_quantum_light</item>
- <item name="textColorPrimaryInverse">@color/primary_text_quantum_dark</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_light</item>
- <item name="textColorSecondaryInverse">@color/secondary_text_quantum_dark</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_light</item>
- <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_dark</item>
- <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_light</item>
- <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorHint">@color/hint_foreground_quantum_light</item>
- <item name="textColorHintInverse">@color/hint_foreground_quantum_dark</item>
- <item name="textColorHighlight">@color/highlighted_text_quantum_light</item>
- <item name="textColorHighlightInverse">@color/highlighted_text_quantum_dark</item>
- <item name="textColorLink">@color/quantum_teal_500</item>
- <item name="textColorLinkInverse">@color/quantum_teal_500</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item>
- <item name="textColorAlertDialogListItem">@color/primary_text_quantum_light</item>
-
- <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item>
- <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item>
- <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
- <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item>
- <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
- <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item>
- <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item>
- <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item>
-
- <item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item>
+ <item name="textAppearance">@style/TextAppearance.Material</item>
+ <item name="textAppearanceInverse">@style/TextAppearance.Material.Inverse</item>
+
+ <item name="textColorPrimary">@color/primary_text_material_light</item>
+ <item name="textColorPrimaryInverse">@color/primary_text_material_dark</item>
+ <item name="textColorSecondary">@color/secondary_text_material_light</item>
+ <item name="textColorSecondaryInverse">@color/secondary_text_material_dark</item>
+ <item name="textColorTertiary">@color/tertiary_text_material_light</item>
+ <item name="textColorTertiaryInverse">@color/tertiary_text_material_dark</item>
+ <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_material_light</item>
+ <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_material_dark</item>
+ <item name="textColorHint">@color/hint_foreground_material_light</item>
+ <item name="textColorHintInverse">@color/hint_foreground_material_dark</item>
+ <item name="textColorHighlight">@color/highlighted_text_material_light</item>
+ <item name="textColorHighlightInverse">@color/highlighted_text_material_dark</item>
+ <item name="textColorLink">@color/material_teal_500</item>
+ <item name="textColorLinkInverse">@color/material_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_material_light</item>
+ <item name="textColorAlertDialogListItem">@color/primary_text_material_light</item>
+
+ <item name="textAppearanceLarge">@style/TextAppearance.Material.Large</item>
+ <item name="textAppearanceLargeInverse">@style/TextAppearance.Material.Large.Inverse</item>
+ <item name="textAppearanceMedium">@style/TextAppearance.Material.Medium</item>
+ <item name="textAppearanceMediumInverse">@style/TextAppearance.Material.Medium.Inverse</item>
+ <item name="textAppearanceSmall">@style/TextAppearance.Material.Small</item>
+ <item name="textAppearanceSmallInverse">@style/TextAppearance.Material.Small.Inverse</item>
+ <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Material.SearchResult.Title</item>
+ <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Material.SearchResult.Subtitle</item>
+
+ <item name="textAppearanceButton">@style/TextAppearance.Material.Widget.Button</item>
<item name="editTextColor">?attr/textColorPrimary</item>
- <item name="editTextBackground">@drawable/edit_text_quantum</item>
+ <item name="editTextBackground">@drawable/edit_text_material</item>
<item name="candidatesTextStyleSpans">@string/candidates_style</item>
<item name="textCheckMark">@drawable/indicator_check_mark_light</item>
<item name="textCheckMarkInverse">@drawable/indicator_check_mark_dark</item>
- <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Large</item>
- <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Small</item>
+ <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Material.Widget.PopupMenu.Large</item>
+ <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Material.Widget.PopupMenu.Small</item>
<!-- Button styles -->
- <item name="buttonStyle">@style/Widget.Quantum.Light.Button</item>
+ <item name="buttonStyle">@style/Widget.Material.Light.Button</item>
- <item name="buttonStyleSmall">@style/Widget.Quantum.Light.Button.Small</item>
- <item name="buttonStyleInset">@style/Widget.Quantum.Light.Button.Inset</item>
+ <item name="buttonStyleSmall">@style/Widget.Material.Light.Button.Small</item>
+ <item name="buttonStyleInset">@style/Widget.Material.Light.Button.Inset</item>
- <item name="buttonStyleToggle">@style/Widget.Quantum.Light.Button.Toggle</item>
- <item name="switchStyle">@style/Widget.Quantum.Light.CompoundButton.Switch</item>
- <item name="mediaRouteButtonStyle">@style/Widget.Quantum.Light.MediaRouteButton</item>
+ <item name="buttonStyleToggle">@style/Widget.Material.Light.Button.Toggle</item>
+ <item name="switchStyle">@style/Widget.Material.Light.CompoundButton.Switch</item>
+ <item name="mediaRouteButtonStyle">@style/Widget.Material.Light.MediaRouteButton</item>
- <item name="selectableItemBackground">@drawable/item_background_quantum</item>
- <item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_quantum</item>
- <item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
+ <item name="selectableItemBackground">@drawable/item_background_material</item>
+ <item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_material</item>
+ <item name="borderlessButtonStyle">@style/Widget.Material.Light.Button.Borderless</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_material</item>
<!-- List attributes -->
<item name="listPreferredItemHeight">64dip</item>
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Quantum.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Quantum.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Quantum.Body1</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="listPreferredItemPaddingLeft">16dip</item>
<item name="listPreferredItemPaddingRight">16dip</item>
<item name="listPreferredItemPaddingStart">16dip</item>
@@ -467,14 +469,14 @@ please see themes_device_defaults.xml.
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
- <item name="listDivider">@drawable/list_divider_quantum</item>
- <item name="listSeparatorTextViewStyle">@style/Widget.Quantum.Light.TextView.ListSeparator</item>
+ <item name="listDivider">@drawable/list_divider_material</item>
+ <item name="listSeparatorTextViewStyle">@style/Widget.Material.Light.TextView.ListSeparator</item>
- <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum_anim</item>
- <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_anim</item>
+ <item name="listChoiceIndicatorSingle">@drawable/btn_radio_material_anim</item>
+ <item name="listChoiceIndicatorMultiple">@drawable/btn_check_material_anim</item>
<item name="listChoiceBackgroundIndicator">?attr/selectableItemBackground</item>
- <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum</item>
+ <item name="activatedBackgroundIndicator">@drawable/activated_background_material</item>
<item name="expandableListPreferredItemPaddingLeft">40dip</item>
<item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
@@ -484,26 +486,26 @@ please see themes_device_defaults.xml.
<item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
- <item name="listDividerAlertDialog">@drawable/list_divider_quantum</item>
- <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum</item>
- <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum</item>
+ <item name="listDividerAlertDialog">@drawable/list_divider_material</item>
+ <item name="findOnPageNextDrawable">@drawable/ic_find_next_material</item>
+ <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_material</item>
<!-- Gallery attributes -->
<item name="galleryItemBackground">@drawable/gallery_item_background</item>
<!-- Window attributes -->
- <item name="windowBackground">@color/background_quantum_light</item>
+ <item name="windowBackground">@color/background_material_light</item>
<item name="windowFrame">@null</item>
<item name="windowNoTitle">false</item>
<item name="windowFullscreen">false</item>
<item name="windowOverscan">false</item>
<item name="windowIsFloating">false</item>
- <item name="windowContentOverlay">@drawable/ab_solid_shadow_quantum</item>
+ <item name="windowContentOverlay">@drawable/ab_solid_shadow_material</item>
<item name="windowShowWallpaper">false</item>
- <item name="windowTitleStyle">@style/WindowTitle.Quantum</item>
+ <item name="windowTitleStyle">@style/WindowTitle.Material</item>
<item name="windowTitleSize">25dip</item>
- <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Quantum</item>
- <item name="windowAnimationStyle">@style/Animation.Quantum.Activity</item>
+ <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Material</item>
+ <item name="windowAnimationStyle">@style/Animation.Material.Activity</item>
<item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
<item name="windowActionBar">true</item>
<item name="windowActionModeOverlay">false</item>
@@ -513,19 +515,19 @@ please see themes_device_defaults.xml.
<item name="navigationBarColor">@color/black</item>
<!-- Dialog attributes -->
- <item name="dialogTheme">@style/Theme.Quantum.Light.Dialog</item>
- <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_quantum</item>
- <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_quantum</item>
- <item name="dialogTitleDecorLayout">@layout/dialog_title_quantum</item>
+ <item name="dialogTheme">@style/Theme.Material.Light.Dialog</item>
+ <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_material</item>
+ <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_material</item>
+ <item name="dialogTitleDecorLayout">@layout/dialog_title_material</item>
<!-- AlertDialog attributes -->
- <item name="alertDialogTheme">@style/Theme.Quantum.Light.Dialog.Alert</item>
- <item name="alertDialogStyle">@style/AlertDialog.Quantum.Light</item>
+ <item name="alertDialogTheme">@style/Theme.Material.Light.Dialog.Alert</item>
+ <item name="alertDialogStyle">@style/AlertDialog.Material.Light</item>
<item name="alertDialogCenterButtons">false</item>
- <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum</item>
+ <item name="alertDialogIcon">@drawable/ic_dialog_alert_material</item>
<!-- Presentation attributes -->
- <item name="presentationTheme">@style/Theme.Quantum.Light.Dialog.Presentation</item>
+ <item name="presentationTheme">@style/Theme.Material.Light.Dialog.Presentation</item>
<!-- Toast attributes -->
<item name="toastFrameBackground">@drawable/toast_frame</item>
@@ -540,361 +542,366 @@ please see themes_device_defaults.xml.
<item name="panelMenuIsCompact">true</item>
<item name="panelMenuListWidth">250dip</item>
- <item name="panelMenuListTheme">@style/Theme.Quantum.Light.CompactMenu</item>
+ <item name="panelMenuListTheme">@style/Theme.Material.Light.CompactMenu</item>
<!-- Scrollbar attributes -->
<item name="scrollbarFadeDuration">250</item>
<item name="scrollbarDefaultDelayBeforeFade">300</item>
<item name="scrollbarSize">10dip</item>
- <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum</item>
- <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum</item>
+ <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
+ <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_material</item>
<item name="scrollbarTrackHorizontal">@null</item>
<item name="scrollbarTrackVertical">@null</item>
<!-- Text selection handle attributes -->
- <item name="textSelectHandleLeft">@drawable/text_select_handle_left_quantum</item>
- <item name="textSelectHandleRight">@drawable/text_select_handle_right_quantum</item>
- <item name="textSelectHandle">@drawable/text_select_handle_middle_quantum</item>
- <item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
- <item name="textSuggestionsWindowStyle">@style/Widget.Quantum.Light.TextSuggestionsPopupWindow</item>
- <item name="textCursorDrawable">@drawable/text_cursor_quantum</item>
+ <item name="textSelectHandleLeft">@drawable/text_select_handle_left_material</item>
+ <item name="textSelectHandleRight">@drawable/text_select_handle_right_material</item>
+ <item name="textSelectHandle">@drawable/text_select_handle_middle_material</item>
+ <item name="textSelectHandleWindowStyle">@style/Widget.Material.TextSelectHandle</item>
+ <item name="textSuggestionsWindowStyle">@style/Widget.Material.Light.TextSuggestionsPopupWindow</item>
+ <item name="textCursorDrawable">@drawable/text_cursor_material</item>
<!-- Widget styles -->
- <item name="absListViewStyle">@style/Widget.Quantum.Light.AbsListView</item>
- <item name="autoCompleteTextViewStyle">@style/Widget.Quantum.Light.AutoCompleteTextView</item>
- <item name="checkboxStyle">@style/Widget.Quantum.Light.CompoundButton.CheckBox</item>
- <item name="checkedTextViewStyle">@style/Widget.Quantum.Light.CheckedTextView</item>
- <item name="dropDownListViewStyle">@style/Widget.Quantum.ListView.DropDown</item>
- <item name="editTextStyle">@style/Widget.Quantum.Light.EditText</item>
- <item name="expandableListViewStyle">@style/Widget.Quantum.Light.ExpandableListView</item>
- <item name="expandableListViewWhiteStyle">@style/Widget.Quantum.Light.ExpandableListView.White</item>
- <item name="fastScrollStyle">@style/Widget.Quantum.Light.FastScroll</item>
- <item name="galleryStyle">@style/Widget.Quantum.Light.Gallery</item>
- <item name="gestureOverlayViewStyle">@style/Widget.Quantum.Light.GestureOverlayView</item>
- <item name="gridViewStyle">@style/Widget.Quantum.Light.GridView</item>
- <item name="imageButtonStyle">@style/Widget.Quantum.Light.ImageButton</item>
- <item name="imageWellStyle">@style/Widget.Quantum.Light.ImageWell</item>
- <item name="listViewStyle">@style/Widget.Quantum.Light.ListView</item>
- <item name="listViewWhiteStyle">@style/Widget.Quantum.Light.ListView.White</item>
- <item name="popupWindowStyle">@style/Widget.Quantum.Light.PopupWindow</item>
- <item name="progressBarStyle">@style/Widget.Quantum.Light.ProgressBar</item>
- <item name="progressBarStyleHorizontal">@style/Widget.Quantum.Light.ProgressBar.Horizontal</item>
- <item name="progressBarStyleSmall">@style/Widget.Quantum.Light.ProgressBar.Small</item>
- <item name="progressBarStyleSmallTitle">@style/Widget.Quantum.Light.ProgressBar.Small.Title</item>
- <item name="progressBarStyleLarge">@style/Widget.Quantum.Light.ProgressBar.Large</item>
- <item name="progressBarStyleInverse">@style/Widget.Quantum.Light.ProgressBar.Inverse</item>
- <item name="progressBarStyleSmallInverse">@style/Widget.Quantum.Light.ProgressBar.Small.Inverse</item>
- <item name="progressBarStyleLargeInverse">@style/Widget.Quantum.Light.ProgressBar.Large.Inverse</item>
- <item name="seekBarStyle">@style/Widget.Quantum.Light.SeekBar</item>
- <item name="ratingBarStyle">@style/Widget.Quantum.Light.RatingBar</item>
- <item name="ratingBarStyleIndicator">@style/Widget.Quantum.Light.RatingBar.Indicator</item>
- <item name="ratingBarStyleSmall">@style/Widget.Quantum.Light.RatingBar.Small</item>
- <item name="radioButtonStyle">@style/Widget.Quantum.Light.CompoundButton.RadioButton</item>
- <item name="scrollViewStyle">@style/Widget.Quantum.Light.ScrollView</item>
- <item name="horizontalScrollViewStyle">@style/Widget.Quantum.Light.HorizontalScrollView</item>
+ <item name="absListViewStyle">@style/Widget.Material.Light.AbsListView</item>
+ <item name="autoCompleteTextViewStyle">@style/Widget.Material.Light.AutoCompleteTextView</item>
+ <item name="checkboxStyle">@style/Widget.Material.Light.CompoundButton.CheckBox</item>
+ <item name="checkedTextViewStyle">@style/Widget.Material.Light.CheckedTextView</item>
+ <item name="dropDownListViewStyle">@style/Widget.Material.ListView.DropDown</item>
+ <item name="editTextStyle">@style/Widget.Material.Light.EditText</item>
+ <item name="expandableListViewStyle">@style/Widget.Material.Light.ExpandableListView</item>
+ <item name="expandableListViewWhiteStyle">@style/Widget.Material.Light.ExpandableListView.White</item>
+ <item name="fastScrollStyle">@style/Widget.Material.Light.FastScroll</item>
+ <item name="galleryStyle">@style/Widget.Material.Light.Gallery</item>
+ <item name="gestureOverlayViewStyle">@style/Widget.Material.Light.GestureOverlayView</item>
+ <item name="gridViewStyle">@style/Widget.Material.Light.GridView</item>
+ <item name="imageButtonStyle">@style/Widget.Material.Light.ImageButton</item>
+ <item name="imageWellStyle">@style/Widget.Material.Light.ImageWell</item>
+ <item name="listViewStyle">@style/Widget.Material.Light.ListView</item>
+ <item name="listViewWhiteStyle">@style/Widget.Material.Light.ListView.White</item>
+ <item name="popupWindowStyle">@style/Widget.Material.Light.PopupWindow</item>
+ <item name="progressBarStyle">@style/Widget.Material.Light.ProgressBar</item>
+ <item name="progressBarStyleHorizontal">@style/Widget.Material.Light.ProgressBar.Horizontal</item>
+ <item name="progressBarStyleSmall">@style/Widget.Material.Light.ProgressBar.Small</item>
+ <item name="progressBarStyleSmallTitle">@style/Widget.Material.Light.ProgressBar.Small.Title</item>
+ <item name="progressBarStyleLarge">@style/Widget.Material.Light.ProgressBar.Large</item>
+ <item name="progressBarStyleInverse">@style/Widget.Material.Light.ProgressBar.Inverse</item>
+ <item name="progressBarStyleSmallInverse">@style/Widget.Material.Light.ProgressBar.Small.Inverse</item>
+ <item name="progressBarStyleLargeInverse">@style/Widget.Material.Light.ProgressBar.Large.Inverse</item>
+ <item name="seekBarStyle">@style/Widget.Material.Light.SeekBar</item>
+ <item name="ratingBarStyle">@style/Widget.Material.Light.RatingBar</item>
+ <item name="ratingBarStyleIndicator">@style/Widget.Material.Light.RatingBar.Indicator</item>
+ <item name="ratingBarStyleSmall">@style/Widget.Material.Light.RatingBar.Small</item>
+ <item name="radioButtonStyle">@style/Widget.Material.Light.CompoundButton.RadioButton</item>
+ <item name="scrollViewStyle">@style/Widget.Material.Light.ScrollView</item>
+ <item name="horizontalScrollViewStyle">@style/Widget.Material.Light.HorizontalScrollView</item>
<item name="spinnerStyle">?attr/dropDownSpinnerStyle</item>
- <item name="dropDownSpinnerStyle">@style/Widget.Quantum.Light.Spinner.DropDown</item>
- <item name="starStyle">@style/Widget.Quantum.Light.CompoundButton.Star</item>
- <item name="tabWidgetStyle">@style/Widget.Quantum.Light.TabWidget</item>
- <item name="textViewStyle">@style/Widget.Quantum.Light.TextView</item>
+ <item name="dropDownSpinnerStyle">@style/Widget.Material.Light.Spinner.DropDown</item>
+ <item name="starStyle">@style/Widget.Material.Light.CompoundButton.Star</item>
+ <item name="tabWidgetStyle">@style/Widget.Material.Light.TabWidget</item>
+ <item name="textViewStyle">@style/Widget.Material.Light.TextView</item>
<item name="errorMessageBackground">@drawable/popup_inline_error_holo_light</item>
<item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_light</item>
- <item name="webTextViewStyle">@style/Widget.Quantum.Light.WebTextView</item>
- <item name="webViewStyle">@style/Widget.Quantum.Light.WebView</item>
- <item name="dropDownItemStyle">@style/Widget.Quantum.Light.DropDownItem</item>
- <item name="spinnerDropDownItemStyle">@style/Widget.Quantum.Light.DropDownItem.Spinner</item>
- <item name="spinnerItemStyle">@style/Widget.Quantum.TextView.SpinnerItem</item>
- <item name="dropDownHintAppearance">@style/TextAppearance.Quantum.Widget.DropDownHint</item>
- <item name="keyboardViewStyle">@style/Widget.Quantum.KeyboardView</item>
- <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Quantum.QuickContactBadge.WindowSmall</item>
- <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Quantum.QuickContactBadge.WindowMedium</item>
- <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Quantum.QuickContactBadge.WindowLarge</item>
- <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Quantum.QuickContactBadgeSmall.WindowSmall</item>
- <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Quantum.QuickContactBadgeSmall.WindowMedium</item>
- <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Quantum.QuickContactBadgeSmall.WindowLarge</item>
- <item name="listPopupWindowStyle">@style/Widget.Quantum.Light.ListPopupWindow</item>
- <item name="popupMenuStyle">@style/Widget.Quantum.Light.PopupMenu</item>
- <item name="stackViewStyle">@style/Widget.Quantum.Light.StackView</item>
- <item name="activityChooserViewStyle">@style/Widget.Quantum.Light.ActivityChooserView</item>
+ <item name="webTextViewStyle">@style/Widget.Material.Light.WebTextView</item>
+ <item name="webViewStyle">@style/Widget.Material.Light.WebView</item>
+ <item name="dropDownItemStyle">@style/Widget.Material.Light.DropDownItem</item>
+ <item name="spinnerDropDownItemStyle">@style/Widget.Material.Light.DropDownItem.Spinner</item>
+ <item name="spinnerItemStyle">@style/Widget.Material.TextView.SpinnerItem</item>
+ <item name="dropDownHintAppearance">@style/TextAppearance.Material.Widget.DropDownHint</item>
+ <item name="keyboardViewStyle">@style/Widget.Material.KeyboardView</item>
+ <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Material.QuickContactBadge.WindowSmall</item>
+ <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Material.QuickContactBadge.WindowMedium</item>
+ <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Material.QuickContactBadge.WindowLarge</item>
+ <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Material.QuickContactBadgeSmall.WindowSmall</item>
+ <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Material.QuickContactBadgeSmall.WindowMedium</item>
+ <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Material.QuickContactBadgeSmall.WindowLarge</item>
+ <item name="listPopupWindowStyle">@style/Widget.Material.Light.ListPopupWindow</item>
+ <item name="popupMenuStyle">@style/Widget.Material.Light.PopupMenu</item>
+ <item name="stackViewStyle">@style/Widget.Material.Light.StackView</item>
+ <item name="activityChooserViewStyle">@style/Widget.Material.Light.ActivityChooserView</item>
<!-- Preference styles -->
- <item name="preferenceScreenStyle">@style/Preference.Quantum.PreferenceScreen</item>
- <item name="preferenceFragmentStyle">@style/PreferenceFragment.Quantum</item>
+ <item name="preferenceScreenStyle">@style/Preference.Material.PreferenceScreen</item>
+ <item name="preferenceFragmentStyle">@style/PreferenceFragment.Material</item>
<item name="preferenceFragmentPaddingSide">0dip</item>
- <item name="preferenceCategoryStyle">@style/Preference.Quantum.Category</item>
- <item name="preferenceStyle">@style/Preference.Quantum</item>
- <item name="preferenceInformationStyle">@style/Preference.Quantum.Information</item>
- <item name="checkBoxPreferenceStyle">@style/Preference.Quantum.CheckBoxPreference</item>
- <item name="switchPreferenceStyle">@style/Preference.Quantum.SwitchPreference</item>
- <item name="yesNoPreferenceStyle">@style/Preference.Quantum.DialogPreference.YesNoPreference</item>
- <item name="dialogPreferenceStyle">@style/Preference.Quantum.DialogPreference</item>
- <item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
- <item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
- <item name="preferenceLayoutChild">@layout/preference_child_quantum</item>
+ <item name="preferenceCategoryStyle">@style/Preference.Material.Category</item>
+ <item name="preferenceStyle">@style/Preference.Material</item>
+ <item name="preferenceInformationStyle">@style/Preference.Material.Information</item>
+ <item name="checkBoxPreferenceStyle">@style/Preference.Material.CheckBoxPreference</item>
+ <item name="switchPreferenceStyle">@style/Preference.Material.SwitchPreference</item>
+ <item name="yesNoPreferenceStyle">@style/Preference.Material.DialogPreference.YesNoPreference</item>
+ <item name="dialogPreferenceStyle">@style/Preference.Material.DialogPreference</item>
+ <item name="editTextPreferenceStyle">@style/Preference.Material.DialogPreference.EditTextPreference</item>
+ <item name="ringtonePreferenceStyle">@style/Preference.Material.RingtonePreference</item>
+ <item name="preferenceLayoutChild">@layout/preference_child_material</item>
<item name="detailsElementBackground">?attr/colorBackground</item>
<!-- PreferenceFrameLayout attributes -->
- <item name="preferenceFrameLayoutStyle">@style/Widget.Quantum.PreferenceFrameLayout</item>
+ <item name="preferenceFrameLayoutStyle">@style/Widget.Material.PreferenceFrameLayout</item>
<!-- Search widget styles -->
<item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>
<!-- Action bar styles -->
- <item name="actionDropDownStyle">@style/Widget.Quantum.Light.Spinner.DropDown.ActionBar</item>
- <item name="actionButtonStyle">@style/Widget.Quantum.Light.ActionButton</item>
- <item name="actionOverflowButtonStyle">@style/Widget.Quantum.Light.ActionButton.Overflow</item>
- <item name="actionOverflowMenuStyle">@android:style/Widget.Quantum.Light.PopupMenu.Overflow</item>
+ <item name="actionDropDownStyle">@style/Widget.Material.Light.Spinner.DropDown.ActionBar</item>
+ <item name="actionButtonStyle">@style/Widget.Material.Light.ActionButton</item>
+ <item name="actionOverflowButtonStyle">@style/Widget.Material.Light.ActionButton.Overflow</item>
+ <item name="actionOverflowMenuStyle">@android:style/Widget.Material.Light.PopupMenu.Overflow</item>
<item name="actionModeBackground">@drawable/cab_background_top_holo_light</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
- <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum</item>
- <item name="actionBarTabStyle">@style/Widget.Quantum.Light.ActionBar.TabView</item>
- <item name="actionBarTabBarStyle">@style/Widget.Quantum.Light.ActionBar.TabBar</item>
- <item name="actionBarTabTextStyle">@style/Widget.Quantum.Light.ActionBar.TabText</item>
- <item name="actionModeStyle">@style/Widget.Quantum.Light.ActionMode</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.Quantum.Light.ActionButton.CloseMode</item>
- <item name="actionBarStyle">@style/Widget.Quantum.Light.ActionBar.Solid</item>
- <item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
- <item name="actionModePopupWindowStyle">@style/Widget.Quantum.Light.PopupWindow.ActionMode</item>
+ <item name="actionModeCloseDrawable">@drawable/ic_cab_done_material</item>
+ <item name="actionBarTabStyle">@style/Widget.Material.Light.ActionBar.TabView</item>
+ <item name="actionBarTabBarStyle">@style/Widget.Material.Light.ActionBar.TabBar</item>
+ <item name="actionBarTabTextStyle">@style/Widget.Material.Light.ActionBar.TabText</item>
+ <item name="actionModeStyle">@style/Widget.Material.Light.ActionMode</item>
+ <item name="actionModeCloseButtonStyle">@style/Widget.Material.Light.ActionButton.CloseMode</item>
+ <item name="actionBarStyle">@style/Widget.Material.Light.ActionBar.Solid</item>
+ <item name="actionBarSize">@dimen/action_bar_default_height_material</item>
+ <item name="actionModePopupWindowStyle">@style/Widget.Material.Light.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/ThemeOverlay.Quantum.ActionBar</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.Material.ActionBar</item>
<item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
- <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
- <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum</item>
- <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum</item>
- <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum</item>
- <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum</item>
- <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum</item>
- <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum</item>
+ <item name="actionModeCutDrawable">@drawable/ic_menu_cut_material</item>
+ <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_material</item>
+ <item name="actionModePasteDrawable">@drawable/ic_menu_paste_material</item>
+ <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_material</item>
+ <item name="actionModeShareDrawable">@drawable/ic_menu_share_material</item>
+ <item name="actionModeFindDrawable">@drawable/ic_menu_find_material</item>
+ <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_material</item>
+
+ <item name="toolbarStyle">@style/Widget.Material.Toolbar</item>
<item name="dividerVertical">?attr/listDivider</item>
<item name="dividerHorizontal">?attr/listDivider</item>
- <item name="buttonBarStyle">@style/Widget.Quantum.Light.ButtonBar</item>
- <item name="buttonBarButtonStyle">@style/Widget.Quantum.Light.Button.Borderless</item>
- <item name="segmentedButtonStyle">@style/Widget.Quantum.Light.SegmentedButton</item>
+ <item name="buttonBarStyle">@style/Widget.Material.Light.ButtonBar</item>
+ <item name="buttonBarButtonStyle">@style/Widget.Material.Light.Button.Borderless</item>
+ <item name="segmentedButtonStyle">@style/Widget.Material.Light.SegmentedButton</item>
<!-- SearchView attributes -->
<item name="searchDropdownBackground">?attr/colorBackground</item>
- <item name="searchViewTextField">@drawable/textfield_search_quantum</item>
- <item name="searchViewTextFieldRight">@drawable/textfield_search_quantum</item>
- <item name="searchViewCloseIcon">@android:drawable/ic_clear_quantum</item>
- <item name="searchViewSearchIcon">@android:drawable/ic_search_api_quantum</item>
- <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_quantum</item>
- <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_quantum</item>
- <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_quantum</item>
+ <item name="searchViewTextField">@drawable/textfield_search_material</item>
+ <item name="searchViewTextFieldRight">@drawable/textfield_search_material</item>
+ <item name="searchViewCloseIcon">@android:drawable/ic_clear_material</item>
+ <item name="searchViewSearchIcon">@android:drawable/ic_search_api_material</item>
+ <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_material</item>
+ <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_material</item>
+ <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_material</item>
- <item name="searchDialogTheme">@style/Theme.Quantum.Light.SearchBar</item>
+ <item name="searchDialogTheme">@style/Theme.Material.Light.SearchBar</item>
<!-- NumberPicker style-->
- <item name="numberPickerStyle">@style/Widget.Quantum.Light.NumberPicker</item>
+ <item name="numberPickerStyle">@style/Widget.Material.Light.NumberPicker</item>
<!-- CalendarView style-->
- <item name="calendarViewStyle">@style/Widget.Quantum.Light.CalendarView</item>
+ <item name="calendarViewStyle">@style/Widget.Material.Light.CalendarView</item>
<!-- TimePicker style -->
- <item name="timePickerStyle">@style/Widget.Quantum.Light.TimePicker</item>
+ <item name="timePickerStyle">@style/Widget.Material.Light.TimePicker</item>
<!-- TimePicker Header background color -->
<item name="timePickerHeaderBackgroundColor">?attr/colorBackground</item>
<!-- TimePicker Header time label text appearance -->
- <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.TimeLabel</item>
+ <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Material.TimePicker.TimeLabel</item>
<!-- TimePicker Header am pm label text appearance -->
- <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.AmPmLabel</item>
+ <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Material.TimePicker.AmPmLabel</item>
<!-- TimePicker dialog theme -->
- <item name="timePickerDialogTheme">@style/Theme.Quantum.Light.Dialog.TimePicker</item>
+ <item name="timePickerDialogTheme">@style/Theme.Material.Light.Dialog.TimePicker</item>
<!-- DatePicker style -->
- <item name="datePickerStyle">@style/Widget.Quantum.Light.DatePicker</item>
+ <item name="datePickerStyle">@style/Widget.Material.Light.DatePicker</item>
- <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum</item>
+ <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_material</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_light</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_light</item>
- <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum</item>
+ <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_material</item>
<item name="fastScrollOverlayPosition">atThumb</item>
<!-- Color palette -->
- <item name="colorPrimaryDark">@color/quantum_blue_grey_600</item>
- <item name="colorPrimary">@color/quantum_blue_grey_400</item>
- <item name="colorAccent">@color/quantum_light_blue_A200</item>
+ <item name="colorPrimaryDark">@color/material_blue_grey_600</item>
+ <item name="colorPrimary">@color/material_blue_grey_400</item>
+ <item name="colorAccent">@color/material_light_blue_A200</item>
<item name="colorControlNormal">?attr/textColorSecondary</item>
<item name="colorControlActivated">?attr/colorAccent</item>
- <item name="colorControlHighlight">@color/ripple_quantum_light</item>
- <item name="colorButtonNormal">@color/btn_default_quantum_light</item>
+ <item name="colorControlHighlight">@color/ripple_material_light</item>
+ <item name="colorButtonNormal">@color/btn_default_material_light</item>
</style>
- <!-- Variant of the quantum (light) theme that has a solid (opaque) action bar
+ <!-- Variant of the material (light) theme that has a solid (opaque) action bar
with an inverse color profile. The dark action bar sharply stands out against
the light content. -->
- <style name="Theme.Quantum.Light.DarkActionBar">
+ <style name="Theme.Material.Light.DarkActionBar">
<item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/ThemeOverlay.Quantum.Dark.ActionBar</item>
+ <item name="actionBarTheme">@style/ThemeOverlay.Material.Dark.ActionBar</item>
+
+ <item name="colorPrimaryDark">@color/material_blue_grey_900</item>
+ <item name="colorPrimary">@color/material_blue_grey_800</item>
</style>
<style name="ThemeOverlay" />
- <style name="ThemeOverlay.Quantum" />
+ <style name="ThemeOverlay.Material" />
<!-- Theme overlay that replaces colors with their light versions but preserves
the value of colorAccent, colorPrimary and its variants. -->
- <style name="ThemeOverlay.Quantum.Light">
- <item name="colorForeground">@color/bright_foreground_quantum_light</item>
- <item name="colorForegroundInverse">@color/bright_foreground_quantum_dark</item>
- <item name="colorBackground">@color/background_quantum_light</item>
- <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_light</item>
-
- <item name="textColorPrimary">@color/primary_text_quantum_light</item>
- <item name="textColorPrimaryInverse">@color/primary_text_quantum_dark</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_light</item>
- <item name="textColorSecondaryInverse">@color/secondary_text_quantum_dark</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_light</item>
- <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_dark</item>
- <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_light</item>
- <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorHint">@color/hint_foreground_quantum_light</item>
- <item name="textColorHintInverse">@color/hint_foreground_quantum_dark</item>
- <item name="textColorHighlight">@color/highlighted_text_quantum_light</item>
- <item name="textColorHighlightInverse">@color/highlighted_text_quantum_dark</item>
- <item name="textColorLink">@color/quantum_teal_500</item>
- <item name="textColorLinkInverse">@color/quantum_teal_500</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item>
- <item name="textColorAlertDialogListItem">@color/primary_text_quantum_light</item>
+ <style name="ThemeOverlay.Material.Light">
+ <item name="colorForeground">@color/bright_foreground_material_light</item>
+ <item name="colorForegroundInverse">@color/bright_foreground_material_dark</item>
+ <item name="colorBackground">@color/background_material_light</item>
+ <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_light</item>
+
+ <item name="textColorPrimary">@color/primary_text_material_light</item>
+ <item name="textColorPrimaryInverse">@color/primary_text_material_dark</item>
+ <item name="textColorSecondary">@color/secondary_text_material_light</item>
+ <item name="textColorSecondaryInverse">@color/secondary_text_material_dark</item>
+ <item name="textColorTertiary">@color/tertiary_text_material_light</item>
+ <item name="textColorTertiaryInverse">@color/tertiary_text_material_dark</item>
+ <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_material_light</item>
+ <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_material_dark</item>
+ <item name="textColorHint">@color/hint_foreground_material_light</item>
+ <item name="textColorHintInverse">@color/hint_foreground_material_dark</item>
+ <item name="textColorHighlight">@color/highlighted_text_material_light</item>
+ <item name="textColorHighlightInverse">@color/highlighted_text_material_dark</item>
+ <item name="textColorLink">@color/material_teal_500</item>
+ <item name="textColorLinkInverse">@color/material_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_material_light</item>
+ <item name="textColorAlertDialogListItem">@color/primary_text_material_light</item>
<item name="textCheckMark">@drawable/indicator_check_mark_light</item>
<item name="textCheckMarkInverse">@drawable/indicator_check_mark_dark</item>
- <item name="windowBackground">@color/background_quantum_light</item>
+ <item name="windowBackground">@color/background_material_light</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_light</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_light</item>
- <item name="colorControlHighlight">@color/ripple_quantum_light</item>
- <item name="colorButtonNormal">@color/btn_default_quantum_light</item>
+ <item name="colorControlHighlight">@color/ripple_material_light</item>
+ <item name="colorButtonNormal">@color/btn_default_material_light</item>
</style>
<!-- Theme overlay that replaces colors with their dark versions but preserves
the value of colorAccent, colorPrimary and its variants. -->
- <style name="ThemeOverlay.Quantum.Dark">
- <item name="colorForeground">@color/bright_foreground_quantum_dark</item>
- <item name="colorForegroundInverse">@color/bright_foreground_quantum_light</item>
- <item name="colorBackground">@color/background_quantum_dark</item>
- <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_dark</item>
-
- <item name="textColorPrimary">@color/primary_text_quantum_dark</item>
- <item name="textColorPrimaryInverse">@color/primary_text_quantum_light</item>
- <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_dark</item>
- <item name="textColorSecondaryInverse">@color/secondary_text_quantum_light</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_dark</item>
- <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_light</item>
- <item name="textColorHint">@color/hint_foreground_quantum_dark</item>
- <item name="textColorHintInverse">@color/hint_foreground_quantum_light</item>
- <item name="textColorHighlight">@color/highlighted_text_quantum_dark</item>
- <item name="textColorHighlightInverse">@color/highlighted_text_quantum_light</item>
- <item name="textColorLink">@color/quantum_teal_500</item>
- <item name="textColorLinkInverse">@color/quantum_teal_500</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_dark</item>
- <item name="textColorAlertDialogListItem">@color/primary_text_quantum_dark</item>
+ <style name="ThemeOverlay.Material.Dark">
+ <item name="colorForeground">@color/bright_foreground_material_dark</item>
+ <item name="colorForegroundInverse">@color/bright_foreground_material_light</item>
+ <item name="colorBackground">@color/background_material_dark</item>
+ <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_dark</item>
+
+ <item name="textColorPrimary">@color/primary_text_material_dark</item>
+ <item name="textColorPrimaryInverse">@color/primary_text_material_light</item>
+ <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_material_dark</item>
+ <item name="textColorSecondary">@color/secondary_text_material_dark</item>
+ <item name="textColorSecondaryInverse">@color/secondary_text_material_light</item>
+ <item name="textColorTertiary">@color/tertiary_text_material_dark</item>
+ <item name="textColorTertiaryInverse">@color/tertiary_text_material_light</item>
+ <item name="textColorHint">@color/hint_foreground_material_dark</item>
+ <item name="textColorHintInverse">@color/hint_foreground_material_light</item>
+ <item name="textColorHighlight">@color/highlighted_text_material_dark</item>
+ <item name="textColorHighlightInverse">@color/highlighted_text_material_light</item>
+ <item name="textColorLink">@color/material_teal_500</item>
+ <item name="textColorLinkInverse">@color/material_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_material_dark</item>
+ <item name="textColorAlertDialogListItem">@color/primary_text_material_dark</item>
<item name="textCheckMark">@drawable/indicator_check_mark_dark</item>
<item name="textCheckMarkInverse">@drawable/indicator_check_mark_light</item>
- <item name="windowBackground">@color/background_quantum_dark</item>
+ <item name="windowBackground">@color/background_material_dark</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_dark</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_dark</item>
- <item name="colorControlHighlight">@color/ripple_quantum_dark</item>
- <item name="colorButtonNormal">@color/btn_default_quantum_dark</item>
+ <item name="colorControlHighlight">@color/ripple_material_dark</item>
+ <item name="colorButtonNormal">@color/btn_default_material_dark</item>
</style>
<!-- Theme overlay that replaces the normal control color, which by default is the same as the
secondary text color, with the primary text color. -->
- <style name="ThemeOverlay.Quantum.ActionBar">
+ <style name="ThemeOverlay.Material.ActionBar">
<item name="colorControlNormal">?attr/textColorPrimary</item>
</style>
<!-- Theme overlay that replaces colors with their dark versions and replaces the normal
control color, which by default is the same as the secondary text color, with the primary
text color. -->
- <style name="ThemeOverlay.Quantum.Dark.ActionBar">
+ <style name="ThemeOverlay.Material.Dark.ActionBar">
<item name="colorControlNormal">?attr/textColorPrimary</item>
</style>
- <!-- Variant of the quantum (dark) theme with no action bar. -->
- <style name="Theme.Quantum.NoActionBar">
+ <!-- Variant of the material (dark) theme with no action bar. -->
+ <style name="Theme.Material.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
- <!-- Variant of the quantum (dark) theme that has no title bar and fills
+ <!-- Variant of the material (dark) theme that has no title bar and fills
the entire screen. This theme
sets {@link android.R.attr#windowFullscreen} to true. -->
- <style name="Theme.Quantum.NoActionBar.Fullscreen">
+ <style name="Theme.Material.NoActionBar.Fullscreen">
<item name="windowFullscreen">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Variant of the quantum (dark) theme that has no title bar and fills
+ <!-- Variant of the material (dark) theme that has no title bar and fills
the entire screen and extends into the display overscan region. This theme
sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
to true. -->
- <style name="Theme.Quantum.NoActionBar.Overscan">
+ <style name="Theme.Material.NoActionBar.Overscan">
<item name="windowFullscreen">true</item>
<item name="windowOverscan">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Variant of the quantum (dark) theme that has no title bar and translucent
+ <!-- Variant of the material (dark) theme that has no title bar and translucent
system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
{@link android.R.attr#windowTranslucentNavigation} to true. -->
- <style name="Theme.Quantum.NoActionBar.TranslucentDecor">
+ <style name="Theme.Material.NoActionBar.TranslucentDecor">
<item name="windowTranslucentStatus">true</item>
<item name="windowTranslucentNavigation">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Variant of the quantum (light) theme with no action bar. -->
- <style name="Theme.Quantum.Light.NoActionBar">
+ <!-- Variant of the material (light) theme with no action bar. -->
+ <style name="Theme.Material.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
- <!-- Variant of the quantum (light) theme that has no title bar and fills
+ <!-- Variant of the material (light) theme that has no title bar and fills
the entire screen. This theme
sets {@link android.R.attr#windowFullscreen} to true. -->
- <style name="Theme.Quantum.Light.NoActionBar.Fullscreen">
+ <style name="Theme.Material.Light.NoActionBar.Fullscreen">
<item name="windowFullscreen">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Variant of the quantum (light) theme that has no title bar and fills
+ <!-- Variant of the material (light) theme that has no title bar and fills
the entire screen and extends into the display overscan region. This theme
sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
to true. -->
- <style name="Theme.Quantum.Light.NoActionBar.Overscan">
+ <style name="Theme.Material.Light.NoActionBar.Overscan">
<item name="windowFullscreen">true</item>
<item name="windowOverscan">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Variant of the quantum (light) theme that has no title bar and translucent
+ <!-- Variant of the material (light) theme that has no title bar and translucent
system decor. This theme sets {@link android.R.attr#windowTranslucentStatus} and
{@link android.R.attr#windowTranslucentNavigation} to true. -->
- <style name="Theme.Quantum.Light.NoActionBar.TranslucentDecor">
+ <style name="Theme.Material.Light.NoActionBar.TranslucentDecor">
<item name="windowTranslucentStatus">true</item>
<item name="windowTranslucentNavigation">true</item>
<item name="windowContentOverlay">@null</item>
</style>
- <!-- Default quantum dark theme for panel windows. This removes all extraneous
+ <!-- Default material dark theme for panel windows. This removes all extraneous
window decorations, so you basically have an empty rectangle in which
to place your content. It makes the window floating, with a transparent
background, and turns off dimming behind the window. -->
- <style name="Theme.Quantum.Panel">
+ <style name="Theme.Material.Panel">
<item name="windowBackground">@color/transparent</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="windowFrame">@null</item>
@@ -906,11 +913,11 @@ please see themes_device_defaults.xml.
<item name="windowNoTitle">true</item>
</style>
- <!-- Default quantum light theme for panel windows. This removes all extraneous
+ <!-- Default material light theme for panel windows. This removes all extraneous
window decorations, so you basically have an empty rectangle in which
to place your content. It makes the window floating, with a transparent
background, and turns off dimming behind the window. -->
- <style name="Theme.Quantum.Light.Panel">
+ <style name="Theme.Material.Light.Panel">
<item name="windowBackground">@color/transparent</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="windowFrame">@null</item>
@@ -922,49 +929,49 @@ please see themes_device_defaults.xml.
<item name="windowNoTitle">true</item>
</style>
- <!-- Quantum theme for an activity that is to be used for voice interaction.
+ <!-- Material theme for an activity that is to be used for voice interaction.
This gives the activity a floating dialog style, to incorporate with the
system voice experience. -->
- <style name="Theme.Quantum.Voice" parent="@style/Theme.Quantum.Dialog">
+ <style name="Theme.Material.Voice" parent="@style/Theme.Material.Dialog">
<item name="windowAnimationStyle">@style/Animation.VoiceActivity</item>
<item name="backgroundDimEnabled">false</item>
</style>
- <!-- Quantum light theme for an activity that is to be used for voice interaction.
+ <!-- Material light theme for an activity that is to be used for voice interaction.
This gives the activity a floating dialog style, to incorporate with the
system voice experience. -->
- <style name="Theme.Quantum.Light.Voice" parent="@style/Theme.Quantum.Light.Dialog">
+ <style name="Theme.Material.Light.Voice" parent="@style/Theme.Material.Light.Dialog">
<item name="windowAnimationStyle">@style/Animation.VoiceActivity</item>
<item name="backgroundDimEnabled">false</item>
</style>
- <!-- Default theme for quantum style input methods, which is used by the
+ <!-- Default theme for material style input methods, which is used by the
{@link android.inputmethodservice.InputMethodService} class.
this inherits from Theme.Panel, but sets up IME appropriate animations
and a few custom attributes. -->
- <style name="Theme.Quantum.InputMethod" parent="Theme.Quantum.Light.Panel">
+ <style name="Theme.Material.InputMethod" parent="Theme.Material.Light.Panel">
<item name="windowAnimationStyle">@style/Animation.InputMethod</item>
<item name="imeFullscreenBackground">@drawable/screen_background_selector_light</item>
<item name="imeExtractEnterAnimation">@anim/input_method_extract_enter</item>
<item name="imeExtractExitAnimation">@anim/input_method_extract_exit</item>
</style>
- <!-- Default theme for quantum style voice interaction, which is used by the
+ <!-- Default theme for material style voice interaction, which is used by the
{@link android.service.voice.VoiceInteractionSession} class.
this inherits from Theme.Panel, but sets up appropriate animations
and a few custom attributes. -->
- <style name="Theme.Quantum.VoiceInteractionSession" parent="Theme.Quantum.Light.Panel">
+ <style name="Theme.Material.VoiceInteractionSession" parent="Theme.Material.Light.Panel">
<item name="windowAnimationStyle">@style/Animation.VoiceInteractionSession</item>
</style>
<!-- Theme for the search input bar. -->
- <style name="Theme.Quantum.SearchBar" parent="Theme.Quantum.Panel">
+ <style name="Theme.Material.SearchBar" parent="Theme.Material.Panel">
<item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
</style>
- <style name="Theme.Quantum.Light.SearchBar" parent="Theme.Quantum.Light.Panel">
+ <style name="Theme.Material.Light.SearchBar" parent="Theme.Material.Light.Panel">
<item name="actionModeBackground">@drawable/cab_background_top_holo_light</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
</style>
@@ -972,37 +979,37 @@ please see themes_device_defaults.xml.
<!-- Menu Themes -->
<eat-comment />
- <style name="Theme.Quantum.CompactMenu">
+ <style name="Theme.Material.CompactMenu">
<!-- Menu/item attributes -->
<item name="itemTextAppearance">?attr/textAppearanceMedium</item>
- <item name="listViewStyle">@style/Widget.Quantum.ListView</item>
+ <item name="listViewStyle">@style/Widget.Material.ListView</item>
<item name="windowAnimationStyle">@style/Animation.DropDownUp</item>
<item name="background">@null</item>
</style>
- <style name="Theme.Quantum.Light.CompactMenu">
+ <style name="Theme.Material.Light.CompactMenu">
<!-- Menu/item attributes -->
<item name="itemTextAppearance">?attr/textAppearanceMedium</item>
- <item name="listViewStyle">@style/Widget.Quantum.Light.ListView</item>
+ <item name="listViewStyle">@style/Widget.Material.Light.ListView</item>
<item name="windowAnimationStyle">@style/Animation.DropDownUp</item>
<item name="background">@null</item>
</style>
- <!-- Dialog themes for Quantum -->
+ <!-- Dialog themes for Material -->
<eat-comment />
- <!-- Quantum theme for dialog windows and activities, which is used by the
+ <!-- Material theme for dialog windows and activities, which is used by the
{@link android.app.Dialog} class. This changes the window to be
floating (not fill the entire screen), and puts a frame around its
contents. You can set this theme on an activity if you would like to
make an activity that looks like a Dialog. -->
- <style name="Theme.Quantum.Dialog">
+ <style name="Theme.Material.Dialog">
<item name="windowFrame">@null</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
- <item name="windowBackground">@drawable/dialog_background_quantum</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material</item>
+ <item name="windowBackground">@drawable/dialog_background_material</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
- <item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
+ <item name="windowAnimationStyle">@style/Animation.Material.Dialog</item>
<item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
@@ -1010,11 +1017,11 @@ please see themes_device_defaults.xml.
<item name="colorBackgroundCacheHint">@null</item>
- <item name="buttonBarStyle">@style/Widget.Quantum.ButtonBar.AlertDialog</item>
- <item name="borderlessButtonStyle">@style/Widget.Quantum.Button.Borderless</item>
+ <item name="buttonBarStyle">@style/Widget.Material.ButtonBar.AlertDialog</item>
+ <item name="borderlessButtonStyle">@style/Widget.Material.Button.Borderless</item>
- <item name="textAppearance">@style/TextAppearance.Quantum</item>
- <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+ <item name="textAppearance">@style/TextAppearance.Material</item>
+ <item name="textAppearanceInverse">@style/TextAppearance.Material.Inverse</item>
<item name="listPreferredItemPaddingLeft">16dip</item>
<item name="listPreferredItemPaddingRight">16dip</item>
@@ -1024,46 +1031,46 @@ please see themes_device_defaults.xml.
<item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog that has a nice minimum width for
+ <!-- Variant of Theme.Material.Dialog that has a nice minimum width for
a regular dialog. -->
- <style name="Theme.Quantum.Dialog.MinWidth">
+ <style name="Theme.Material.Dialog.MinWidth">
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog that does not include a title bar. -->
- <style name="Theme.Quantum.Dialog.NoActionBar">
+ <!-- Variant of Theme.Material.Dialog that does not include a title bar. -->
+ <style name="Theme.Material.Dialog.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog.NoActionBar that has a nice minimum width for
+ <!-- Variant of Theme.Material.Dialog.NoActionBar that has a nice minimum width for
a regular dialog. -->
- <style name="Theme.Quantum.Dialog.NoActionBar.MinWidth">
+ <style name="Theme.Material.Dialog.NoActionBar.MinWidth">
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog that has a fixed size. -->
- <style name="Theme.Quantum.Dialog.FixedSize">
+ <!-- Variant of Theme.Material.Dialog that has a fixed size. -->
+ <style name="Theme.Material.Dialog.FixedSize">
<item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
<item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
<item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
<item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog.NoActionBar that has a fixed size. -->
- <style name="Theme.Quantum.Dialog.NoActionBar.FixedSize">
+ <!-- Variant of Theme.Material.Dialog.NoActionBar that has a fixed size. -->
+ <style name="Theme.Material.Dialog.NoActionBar.FixedSize">
<item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
<item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
<item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
<item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Dialog that does not include a frame (or background).
+ <!-- Variant of Theme.Material.Dialog that does not include a frame (or background).
The view hierarchy of the dialog is responsible for drawing all of
its pixels. -->
- <style name="Theme.Quantum.Dialog.NoFrame">
+ <style name="Theme.Material.Dialog.NoFrame">
<item name="windowBackground">@color/transparent</item>
<item name="windowAnimationStyle">@null</item>
<item name="backgroundDimEnabled">false</item>
@@ -1072,56 +1079,56 @@ please see themes_device_defaults.xml.
<item name="windowCloseOnTouchOutside">false</item>
</style>
- <!-- Quantum theme for alert dialog windows, which is used by the
+ <!-- Material theme for alert dialog windows, which is used by the
{@link android.app.AlertDialog} class. This is basically a dialog
but sets the background to empty so it can do two-tone backgrounds.
For applications targeting Honeycomb or newer, this is the default
AlertDialog theme. -->
- <style name="Theme.Quantum.Dialog.Alert">
+ <style name="Theme.Material.Dialog.Alert">
<item name="windowBackground">@color/transparent</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material</item>
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Quantum theme for the TimePicker dialog windows, which is used by the
+ <!-- Material theme for the TimePicker dialog windows, which is used by the
{@link android.app.TimePickerDialog} class. -->
- <style name="Theme.Quantum.Dialog.TimePicker">
+ <style name="Theme.Material.Dialog.TimePicker">
<item name="windowBackground">@color/transparent</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material</item>
<item name="windowContentOverlay">@null</item>
</style>
<!-- Theme for a window that will be displayed either full-screen on
smaller screens (small, normal) or as a dialog on larger screens
(large, xlarge). -->
- <style name="Theme.Quantum.DialogWhenLarge" parent="@style/Theme.Quantum">
+ <style name="Theme.Material.DialogWhenLarge" parent="@style/Theme.Material">
</style>
<!-- Theme for a window without a title bar that will be displayed either
full-screen on smaller screens (small, normal) or as a dialog on larger screens
(large, xlarge). -->
- <style name="Theme.Quantum.DialogWhenLarge.NoActionBar" parent="@style/Theme.Quantum.NoActionBar">
+ <style name="Theme.Material.DialogWhenLarge.NoActionBar" parent="@style/Theme.Material.NoActionBar">
</style>
<!-- Theme for a presentation window on a secondary display. -->
- <style name="Theme.Quantum.Dialog.Presentation" parent="@style/Theme.Quantum.NoActionBar.Fullscreen">
+ <style name="Theme.Material.Dialog.Presentation" parent="@style/Theme.Material.NoActionBar.Fullscreen">
</style>
- <!-- Light quantum dialog themes -->
+ <!-- Light material dialog themes -->
- <!-- Quantum light theme for dialog windows and activities, which is used by the
+ <!-- Material light theme for dialog windows and activities, which is used by the
{@link android.app.Dialog} class. This changes the window to be
floating (not fill the entire screen), and puts a frame around its
contents. You can set this theme on an activity if you would like to
make an activity that looks like a Dialog. -->
- <style name="Theme.Quantum.Light.Dialog">
+ <style name="Theme.Material.Light.Dialog">
<item name="windowFrame">@null</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material.Light</item>
<item name="windowBackground">?attr/colorBackground</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
- <item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
+ <item name="windowAnimationStyle">@style/Animation.Material.Dialog</item>
<item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
@@ -1129,11 +1136,11 @@ please see themes_device_defaults.xml.
<item name="colorBackgroundCacheHint">@null</item>
- <item name="buttonBarStyle">@style/Widget.Quantum.Light.ButtonBar.AlertDialog</item>
- <item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless</item>
+ <item name="buttonBarStyle">@style/Widget.Material.Light.ButtonBar.AlertDialog</item>
+ <item name="borderlessButtonStyle">@style/Widget.Material.Light.Button.Borderless</item>
- <item name="textAppearance">@style/TextAppearance.Quantum</item>
- <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+ <item name="textAppearance">@style/TextAppearance.Material</item>
+ <item name="textAppearanceInverse">@style/TextAppearance.Material.Inverse</item>
<item name="listPreferredItemPaddingLeft">16dip</item>
<item name="listPreferredItemPaddingRight">16dip</item>
@@ -1143,36 +1150,36 @@ please see themes_device_defaults.xml.
<item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
</style>
- <!-- Variant of Theme.Quantum.Light.Dialog that has a nice minimum width for
+ <!-- Variant of Theme.Material.Light.Dialog that has a nice minimum width for
a regular dialog. -->
- <style name="Theme.Quantum.Light.Dialog.MinWidth">
+ <style name="Theme.Material.Light.Dialog.MinWidth">
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Light.Dialog that does not include a title bar. -->
- <style name="Theme.Quantum.Light.Dialog.NoActionBar">
+ <!-- Variant of Theme.Material.Light.Dialog that does not include a title bar. -->
+ <style name="Theme.Material.Light.Dialog.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
- <!-- Variant of Theme.Quantum.Light.Dialog.NoActionBar that has a nice minimum width for
+ <!-- Variant of Theme.Material.Light.Dialog.NoActionBar that has a nice minimum width for
a regular dialog. -->
- <style name="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth">
+ <style name="Theme.Material.Light.Dialog.NoActionBar.MinWidth">
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Light.Dialog that has a fixed size. -->
- <style name="Theme.Quantum.Light.Dialog.FixedSize">
+ <!-- Variant of Theme.Material.Light.Dialog that has a fixed size. -->
+ <style name="Theme.Material.Light.Dialog.FixedSize">
<item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
<item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
<item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
<item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
</style>
- <!-- Variant of Theme.Quantum.Light.Dialog.NoActionBar that has a fixed size. -->
- <style name="Theme.Quantum.Light.Dialog.NoActionBar.FixedSize">
+ <!-- Variant of Theme.Material.Light.Dialog.NoActionBar that has a fixed size. -->
+ <style name="Theme.Material.Light.Dialog.NoActionBar.FixedSize">
<item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
<item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
<item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
@@ -1182,50 +1189,50 @@ please see themes_device_defaults.xml.
<!-- Theme for a window that will be displayed either full-screen on
smaller screens (small, normal) or as a dialog on larger screens
(large, xlarge). -->
- <style name="Theme.Quantum.Light.DialogWhenLarge" parent="@style/Theme.Quantum.Light">
+ <style name="Theme.Material.Light.DialogWhenLarge" parent="@style/Theme.Material.Light">
</style>
<!-- Theme for a window without an action bar that will be displayed either full-screen
on smaller screens (small, normal) or as a dialog on larger screens
(large, xlarge). -->
- <style name="Theme.Quantum.Light.DialogWhenLarge.NoActionBar"
- parent="@style/Theme.Quantum.Light.NoActionBar">
+ <style name="Theme.Material.Light.DialogWhenLarge.NoActionBar"
+ parent="@style/Theme.Material.Light.NoActionBar">
</style>
- <!-- Quantum light theme for alert dialog windows, which is used by the
+ <!-- Material light theme for alert dialog windows, which is used by the
{@link android.app.AlertDialog} class. This is basically a dialog
but sets the background to empty so it can do two-tone backgrounds.
For applications targeting Honeycomb or newer, this is the default
AlertDialog theme. -->
- <style name="Theme.Quantum.Light.Dialog.Alert">
+ <style name="Theme.Material.Light.Dialog.Alert">
<item name="windowBackground">@color/transparent</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material.Light</item>
<item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
<item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
</style>
- <!-- Quantum Light theme for the TimePicker dialog windows, which is used by the
+ <!-- Material Light theme for the TimePicker dialog windows, which is used by the
{@link android.app.TimePickerDialog} class. -->
- <style name="Theme.Quantum.Light.Dialog.TimePicker">
+ <style name="Theme.Material.Light.Dialog.TimePicker">
<item name="windowBackground">@color/transparent</item>
- <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+ <item name="windowTitleStyle">@style/DialogWindowTitle.Material.Light</item>
</style>
<!-- Theme for a presentation window on a secondary display. -->
- <style name="Theme.Quantum.Light.Dialog.Presentation" parent="@style/Theme.Quantum.Light.NoActionBar.Fullscreen" >
+ <style name="Theme.Material.Light.Dialog.Presentation" parent="@style/Theme.Material.Light.NoActionBar.Fullscreen" >
</style>
- <!-- Default quantum (dark) for windows that want to have the user's selected
+ <!-- Default material (dark) for windows that want to have the user's selected
wallpaper appear behind them. -->
- <style name="Theme.Quantum.Wallpaper">
+ <style name="Theme.Material.Wallpaper">
<item name="windowBackground">@color/transparent</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="windowShowWallpaper">true</item>
</style>
- <!--Default quantum (dark) for windows that want to have the user's selected
+ <!--Default material (dark) for windows that want to have the user's selected
wallpaper appear behind them and without an action bar. -->
- <style name="Theme.Quantum.Wallpaper.NoTitleBar">
+ <style name="Theme.Material.Wallpaper.NoTitleBar">
<item name="windowNoTitle">true</item>
</style>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
index db125e64c678..116a31efa799 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
@@ -336,7 +336,7 @@ public class AccessPointParserHelper {
if (!InetAddress.isNumeric(dnsAddr)) {
throw new SAXException();
}
- mLinkProperties.addDns(InetAddress.getByName(dnsAddr));
+ mLinkProperties.addDnsServer(InetAddress.getByName(dnsAddr));
} catch (UnknownHostException e) {
throw new SAXException();
}
@@ -348,7 +348,7 @@ public class AccessPointParserHelper {
if (!InetAddress.isNumeric(dnsAddr)) {
throw new SAXException();
}
- mLinkProperties.addDns(InetAddress.getByName(dnsAddr));
+ mLinkProperties.addDnsServer(InetAddress.getByName(dnsAddr));
} catch (UnknownHostException e) {
throw new SAXException();
}
diff --git a/core/tests/coretests/src/android/net/LinkPropertiesTest.java b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
index 553afe0d6931..e649baa070e8 100644
--- a/core/tests/coretests/src/android/net/LinkPropertiesTest.java
+++ b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
@@ -88,8 +88,8 @@ public class LinkPropertiesTest extends TestCase {
source.addLinkAddress(LINKADDRV4);
source.addLinkAddress(LINKADDRV6);
// set 2 dnses
- source.addDns(DNS1);
- source.addDns(DNS2);
+ source.addDnsServer(DNS1);
+ source.addDnsServer(DNS2);
// set 2 gateways
source.addRoute(new RouteInfo(GATEWAY1));
source.addRoute(new RouteInfo(GATEWAY2));
@@ -101,8 +101,8 @@ public class LinkPropertiesTest extends TestCase {
target.setInterfaceName(NAME);
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
- target.addDns(DNS1);
- target.addDns(DNS2);
+ target.addDnsServer(DNS1);
+ target.addDnsServer(DNS2);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU);
@@ -114,8 +114,8 @@ public class LinkPropertiesTest extends TestCase {
target.setInterfaceName("qmi1");
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
- target.addDns(DNS1);
- target.addDns(DNS2);
+ target.addDnsServer(DNS1);
+ target.addDnsServer(DNS2);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU);
@@ -127,8 +127,8 @@ public class LinkPropertiesTest extends TestCase {
target.addLinkAddress(new LinkAddress(
NetworkUtils.numericToInetAddress("75.208.6.2"), 32));
target.addLinkAddress(LINKADDRV6);
- target.addDns(DNS1);
- target.addDns(DNS2);
+ target.addDnsServer(DNS1);
+ target.addDnsServer(DNS2);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU);
@@ -139,8 +139,8 @@ public class LinkPropertiesTest extends TestCase {
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
// change dnses
- target.addDns(NetworkUtils.numericToInetAddress("75.208.7.2"));
- target.addDns(DNS2);
+ target.addDnsServer(NetworkUtils.numericToInetAddress("75.208.7.2"));
+ target.addDnsServer(DNS2);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU);
@@ -150,8 +150,8 @@ public class LinkPropertiesTest extends TestCase {
target.setInterfaceName(NAME);
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
- target.addDns(DNS1);
- target.addDns(DNS2);
+ target.addDnsServer(DNS1);
+ target.addDnsServer(DNS2);
// change gateway
target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress("75.208.8.2")));
target.addRoute(new RouteInfo(GATEWAY2));
@@ -162,8 +162,8 @@ public class LinkPropertiesTest extends TestCase {
target.setInterfaceName(NAME);
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
- target.addDns(DNS1);
- target.addDns(DNS2);
+ target.addDnsServer(DNS1);
+ target.addDnsServer(DNS2);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
// change mtu
@@ -185,8 +185,8 @@ public class LinkPropertiesTest extends TestCase {
source.addLinkAddress(LINKADDRV4);
source.addLinkAddress(LINKADDRV6);
// set 2 dnses
- source.addDns(DNS1);
- source.addDns(DNS2);
+ source.addDnsServer(DNS1);
+ source.addDnsServer(DNS2);
// set 2 gateways
source.addRoute(new RouteInfo(GATEWAY1));
source.addRoute(new RouteInfo(GATEWAY2));
@@ -197,8 +197,8 @@ public class LinkPropertiesTest extends TestCase {
target.setInterfaceName(NAME);
target.addLinkAddress(LINKADDRV6);
target.addLinkAddress(LINKADDRV4);
- target.addDns(DNS2);
- target.addDns(DNS1);
+ target.addDnsServer(DNS2);
+ target.addDnsServer(DNS1);
target.addRoute(new RouteInfo(GATEWAY2));
target.addRoute(new RouteInfo(GATEWAY1));
target.setMtu(MTU);
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index c95ac8238d72..ef6c0859f666 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -706,10 +706,24 @@ public class BitmapDrawable extends Drawable {
final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.BitmapDrawable);
updateStateFromTypedArray(a);
+ verifyState(a);
a.recycle();
}
/**
+ * Ensures all required attributes are set.
+ *
+ * @throws XmlPullParserException if any required attributes are missing
+ */
+ private void verifyState(TypedArray a) throws XmlPullParserException {
+ final BitmapState state = mBitmapState;
+ if (state.mBitmap == null) {
+ throw new XmlPullParserException(a.getPositionDescription() +
+ ": <bitmap> requires a valid src attribute");
+ }
+ }
+
+ /**
* Updates the constant state from the values in the typed array.
*/
private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException {
@@ -912,6 +926,7 @@ public class BitmapDrawable extends Drawable {
*/
private BitmapDrawable(BitmapState state, Resources res, Theme theme) {
if (theme != null && state.canApplyTheme()) {
+ // If we need to apply a theme, implicitly mutate.
mBitmapState = new BitmapState(state);
applyTheme(theme);
} else {
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 3a32e80e08f6..18e8e5250f87 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -1023,9 +1023,9 @@ public abstract class Drawable {
drawable = new StateListDrawable();
} else if (name.equals("animated-selector")) {
drawable = new AnimatedStateListDrawable();
- } else if (name.equals("quantum-progress")) {
+ } else if (name.equals("material-progress")) {
// TODO: Replace this with something less ridiculous.
- drawable = new QuantumProgressDrawable();
+ drawable = new MaterialProgressDrawable();
} else if (name.equals("level-list")) {
drawable = new LevelListDrawable();
} else if (name.equals("layer-list")) {
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 241b89e2d6b8..005b8efeba32 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -1662,9 +1662,12 @@ public class GradientDrawable extends Drawable {
* @param theme Theme to apply to the drawable
*/
private GradientDrawable(GradientState state, Theme theme) {
- mGradientState = new GradientState(state);
if (theme != null && state.canApplyTheme()) {
+ // If we need to apply a theme, implicitly mutate.
+ mGradientState = new GradientState(state);
applyTheme(theme);
+ } else {
+ mGradientState = state;
}
initializeWithState(state);
diff --git a/graphics/java/android/graphics/drawable/QuantumProgressDrawable.java b/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java
index 675355c581af..9e56f67f4b23 100644
--- a/graphics/java/android/graphics/drawable/QuantumProgressDrawable.java
+++ b/graphics/java/android/graphics/drawable/MaterialProgressDrawable.java
@@ -45,11 +45,11 @@ import java.io.IOException;
import java.util.ArrayList;
/**
- * Fancy progress indicator for Quantum theme.
+ * Fancy progress indicator for Material theme.
*
* TODO: Replace this class with something less ridiculous.
*/
-class QuantumProgressDrawable extends Drawable implements Animatable {
+class MaterialProgressDrawable extends Drawable implements Animatable {
private static final TimeInterpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
private static final TimeInterpolator END_CURVE_INTERPOLATOR = new EndCurveInterpolator();
private static final TimeInterpolator START_CURVE_INTERPOLATOR = new StartCurveInterpolator();
@@ -66,18 +66,18 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
/** The indicator ring, used to manage animation state. */
private final Ring mRing;
- private QuantumProgressState mState;
+ private MaterialProgressState mState;
/** Canvas rotation in degrees. */
private float mRotation;
private boolean mMutated;
- public QuantumProgressDrawable() {
- this(new QuantumProgressState(null), null);
+ public MaterialProgressDrawable() {
+ this(new MaterialProgressState(null), null);
}
- private QuantumProgressDrawable(QuantumProgressState state, Theme theme) {
+ private MaterialProgressDrawable(MaterialProgressState state, Theme theme) {
mState = state;
if (theme != null && state.canApplyTheme()) {
applyTheme(theme);
@@ -91,7 +91,7 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
}
private void initializeFromState() {
- final QuantumProgressState state = mState;
+ final MaterialProgressState state = mState;
final Ring ring = mRing;
ring.setStrokeWidth(state.mStrokeWidth);
@@ -111,7 +111,7 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
@Override
public Drawable mutate() {
if (!mMutated && super.mutate() == this) {
- mState = new QuantumProgressState(mState);
+ mState = new MaterialProgressState(mState);
mMutated = true;
}
return this;
@@ -138,8 +138,8 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
@Override
public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
throws XmlPullParserException, IOException {
- final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.QuantumProgressDrawable);
- super.inflateWithAttributes(r, parser, a, R.styleable.QuantumProgressDrawable_visible);
+ final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.MaterialProgressDrawable);
+ super.inflateWithAttributes(r, parser, a, R.styleable.MaterialProgressDrawable_visible);
updateStateFromTypedArray(a);
a.recycle();
@@ -149,25 +149,25 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
@Override
public void applyTheme(Theme t) {
final TypedArray a = t.resolveAttributes(mState.mThemeAttrs,
- R.styleable.QuantumProgressDrawable);
+ R.styleable.MaterialProgressDrawable);
updateStateFromTypedArray(a);
a.recycle();
}
private void updateStateFromTypedArray(TypedArray a) {
- final QuantumProgressState state = mState;
+ final MaterialProgressState state = mState;
state.mThemeAttrs = a.extractThemeAttrs();
state.mWidth = a.getDimensionPixelSize(
- R.styleable.QuantumProgressDrawable_width, state.mWidth);
+ R.styleable.MaterialProgressDrawable_width, state.mWidth);
state.mHeight = a.getDimensionPixelSize(
- R.styleable.QuantumProgressDrawable_height, state.mHeight);
+ R.styleable.MaterialProgressDrawable_height, state.mHeight);
state.mInnerRadius = a.getDimension(
- R.styleable.QuantumProgressDrawable_innerRadius, state.mInnerRadius);
+ R.styleable.MaterialProgressDrawable_innerRadius, state.mInnerRadius);
state.mStrokeWidth = a.getDimension(
- R.styleable.QuantumProgressDrawable_thickness, state.mStrokeWidth);
+ R.styleable.MaterialProgressDrawable_thickness, state.mStrokeWidth);
- if (a.hasValue(R.styleable.QuantumProgressDrawable_color)) {
- state.mColor = a.getColorStateList(R.styleable.QuantumProgressDrawable_color);
+ if (a.hasValue(R.styleable.MaterialProgressDrawable_color)) {
+ state.mColor = a.getColorStateList(R.styleable.MaterialProgressDrawable_color);
}
}
@@ -324,7 +324,7 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
}
};
- private static class QuantumProgressState extends ConstantState {
+ private static class MaterialProgressState extends ConstantState {
private int[] mThemeAttrs = null;
private float mStrokeWidth = 5.0f;
private float mInnerRadius = -1.0f;
@@ -332,7 +332,7 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
private int mHeight = -1;
private ColorStateList mColor = ColorStateList.valueOf(Color.TRANSPARENT);
- public QuantumProgressState(QuantumProgressState orig) {
+ public MaterialProgressState(MaterialProgressState orig) {
if (orig != null) {
mThemeAttrs = orig.mThemeAttrs;
mStrokeWidth = orig.mStrokeWidth;
@@ -360,7 +360,7 @@ class QuantumProgressDrawable extends Drawable implements Animatable {
@Override
public Drawable newDrawable(Resources res, Theme theme) {
- return new QuantumProgressDrawable(this, theme);
+ return new MaterialProgressDrawable(this, theme);
}
@Override
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 77ed29a825d3..fea68ee1a4db 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -659,6 +659,7 @@ public class NinePatchDrawable extends Drawable {
*/
private NinePatchDrawable(NinePatchState state, Resources res, Theme theme) {
if (theme != null && state.canApplyTheme()) {
+ // If we need to apply a theme, implicitly mutate.
mNinePatchState = new NinePatchState(state);
applyTheme(theme);
} else {
diff --git a/graphics/java/android/graphics/drawable/Ripple.java b/graphics/java/android/graphics/drawable/Ripple.java
index 096e5546da86..0d70e7503792 100644
--- a/graphics/java/android/graphics/drawable/Ripple.java
+++ b/graphics/java/android/graphics/drawable/Ripple.java
@@ -34,7 +34,7 @@ import android.view.animation.LinearInterpolator;
import java.util.ArrayList;
/**
- * Draws a Quantum Paper ripple.
+ * Draws a Material ripple.
*/
class Ripple {
private static final TimeInterpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
@@ -68,6 +68,8 @@ class Ripple {
private float mStartingX;
private float mStartingY;
+ private float mClampedStartingX;
+ private float mClampedStartingY;
// Hardware rendering properties.
private CanvasProperty<Paint> mPropPaint;
@@ -112,6 +114,7 @@ class Ripple {
public Ripple(RippleDrawable owner, Rect bounds, float startingX, float startingY) {
mOwner = owner;
mBounds = bounds;
+
mStartingX = startingX;
mStartingY = startingY;
}
@@ -131,6 +134,23 @@ class Ripple {
mOuterX = 0;
mOuterY = 0;
mDensity = density;
+
+ clampStartingPosition();
+ }
+
+ private void clampStartingPosition() {
+ final float dX = mStartingX - mBounds.exactCenterX();
+ final float dY = mStartingY - mBounds.exactCenterY();
+ final float r = mOuterRadius;
+ if (dX * dX + dY * dY > r * r) {
+ // Point is outside the circle, clamp to the circumference.
+ final double angle = Math.atan2(dY, dX);
+ mClampedStartingX = (float) (Math.cos(angle) * r);
+ mClampedStartingY = (float) (Math.sin(angle) * r);
+ } else {
+ mClampedStartingX = mStartingX;
+ mClampedStartingY = mStartingY;
+ }
}
public void onHotspotBoundsChanged() {
@@ -138,6 +158,8 @@ class Ripple {
final float halfWidth = mBounds.width() / 2.0f;
final float halfHeight = mBounds.height() / 2.0f;
mOuterRadius = (float) Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight);
+
+ clampStartingPosition();
}
}
@@ -236,7 +258,7 @@ class Ripple {
// Cache the paint alpha so we can restore it later.
final int paintAlpha = p.getAlpha();
- final int outerAlpha = (int) (255 * mOuterOpacity + 0.5f);
+ final int outerAlpha = (int) (paintAlpha * mOuterOpacity + 0.5f);
if (outerAlpha > 0 && mOuterRadius > 0) {
p.setAlpha(outerAlpha);
p.setStyle(Style.FILL);
@@ -244,11 +266,13 @@ class Ripple {
hasContent = true;
}
- final int alpha = (int) (255 * mOpacity + 0.5f);
+ final int alpha = (int) (paintAlpha * mOpacity + 0.5f);
final float radius = MathUtils.lerp(0, mOuterRadius, mTweenRadius);
if (alpha > 0 && radius > 0) {
- final float x = MathUtils.lerp(mStartingX - mBounds.exactCenterX(), mOuterX, mTweenX);
- final float y = MathUtils.lerp(mStartingY - mBounds.exactCenterY(), mOuterY, mTweenY);
+ final float x = MathUtils.lerp(
+ mClampedStartingX - mBounds.exactCenterX(), mOuterX, mTweenX);
+ final float y = MathUtils.lerp(
+ mClampedStartingY - mBounds.exactCenterY(), mOuterY, mTweenY);
p.setAlpha(alpha);
p.setStyle(Style.FILL);
c.drawCircle(x, y, radius, p);
@@ -277,6 +301,8 @@ class Ripple {
public void move(float x, float y) {
mStartingX = x;
mStartingY = y;
+
+ clampStartingPosition();
}
/**
@@ -361,8 +387,10 @@ class Ripple {
int inflectionOpacity) {
mPendingAnimations.clear();
- final float startX = MathUtils.lerp(mStartingX - mBounds.exactCenterX(), mOuterX, mTweenX);
- final float startY = MathUtils.lerp(mStartingY - mBounds.exactCenterY(), mOuterY, mTweenY);
+ final float startX = MathUtils.lerp(
+ mClampedStartingX - mBounds.exactCenterX(), mOuterX, mTweenX);
+ final float startY = MathUtils.lerp(
+ mClampedStartingY - mBounds.exactCenterY(), mOuterY, mTweenY);
final Paint outerPaint = new Paint();
outerPaint.setAntiAlias(true);
outerPaint.setColor(mColor);
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 58f6eaa53773..0512ecc1d0a4 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -48,22 +48,41 @@ import java.io.IOException;
* A touch feedback drawable may contain multiple child layers, including a
* special mask layer that is not drawn to the screen. A single layer may be set
* as the mask by specifying its android:id value as {@link android.R.id#mask}.
+ * <pre>
+ * <code>&lt!-- A red ripple masked against an opaque rectangle. --/>
+ * &ltripple android:color="#ffff0000">
+ * &ltitem android:id="@android:id/mask"
+ * android:drawable="#ffffffff" />
+ * &ltripple /></code>
+ * </pre>
* <p>
* If a mask layer is set, the ripple effect will be masked against that layer
- * before it is blended onto the composite of the remaining child layers.
+ * before it is drawn over the composite of the remaining child layers.
* <p>
- * If no mask layer is set, the ripple effect is simply blended onto the
- * composite of the child layers using the specified
- * {@link android.R.styleable#RippleDrawable_tintMode}.
+ * If no mask layer is set, the ripple effect is masked against the composite
+ * of the child layers.
+ * <pre>
+ * <code>&lt!-- A blue ripple drawn atop a green rectangle. --/>
+ * &ltripple android:color="#ff00ff00">
+ * &ltitem android:drawable="#ff0000ff" />
+ * &ltripple />
+ *
+ * &lt!-- A red ripple drawn atop a drawable resource. --/>
+ * &ltripple android:color="#ff00ff00">
+ * &ltitem android:drawable="@drawable/my_drawable" />
+ * &ltripple /></code>
+ * </pre>
* <p>
* If no child layers or mask is specified and the ripple is set as a View
- * background, the ripple will be blended onto the first available parent
- * background within the View's hierarchy using the specified
- * {@link android.R.styleable#RippleDrawable_tintMode}. In this case, the
- * drawing region may extend outside of the Drawable bounds.
+ * background, the ripple will be drawn atop the first available parent
+ * background within the View's hierarchy. In this case, the drawing region
+ * may extend outside of the Drawable bounds.
+ * <pre>
+ * <code>&lt!-- An unbounded green ripple. --/>
+ * &ltripple android:color="#ff0000ff" /></code>
+ * </pre>
*
- * @attr ref android.R.styleable#DrawableStates_state_focused
- * @attr ref android.R.styleable#DrawableStates_state_pressed
+ * @attr ref android.R.styleable#RippleDrawable_color
*/
public class RippleDrawable extends LayerDrawable {
private static final String LOG_TAG = RippleDrawable.class.getSimpleName();
@@ -172,20 +191,24 @@ public class RippleDrawable extends LayerDrawable {
protected boolean onStateChange(int[] stateSet) {
super.onStateChange(stateSet);
+ // TODO: This would make more sense in a StateListDrawable.
boolean active = false;
+ boolean enabled = false;
final int N = stateSet.length;
for (int i = 0; i < N; i++) {
+ if (stateSet[i] == R.attr.state_enabled) {
+ enabled = true;
+ }
if (stateSet[i] == R.attr.state_focused
|| stateSet[i] == R.attr.state_pressed) {
active = true;
- break;
}
}
- setActive(active);
+ setActive(active && enabled);
// Update the paint color. Only applicable when animated in software.
- if (mRipplePaint != null && mState.mTint != null) {
- final ColorStateList stateList = mState.mTint;
+ if (mRipplePaint != null && mState.mColor != null) {
+ final ColorStateList stateList = mState.mColor;
final int newColor = stateList.getColorForState(stateSet, 0);
final int oldColor = mRipplePaint.getColor();
if (oldColor != newColor) {
@@ -244,10 +267,8 @@ public class RippleDrawable extends LayerDrawable {
return true;
}
- @Override
- public void setTint(ColorStateList tint, Mode tintMode) {
- mState.mTint = tint;
- mState.setTintMode(tintMode);
+ public void setColor(ColorStateList color) {
+ mState.mColor = color;
invalidateSelf();
}
@@ -308,22 +329,15 @@ public class RippleDrawable extends LayerDrawable {
// Extract the theme attributes, if any.
state.mTouchThemeAttrs = a.extractThemeAttrs();
- final ColorStateList tint = a.getColorStateList(R.styleable.RippleDrawable_tint);
- if (tint != null) {
- mState.mTint = tint;
- }
-
- final int tintMode = a.getInt(R.styleable.RippleDrawable_tintMode, -1);
- if (tintMode != -1) {
- mState.setTintMode(Drawable.parseTintMode(tintMode, Mode.SRC_ATOP));
+ final ColorStateList color = a.getColorStateList(R.styleable.RippleDrawable_color);
+ if (color != null) {
+ mState.mColor = color;
}
- mState.mPinned = a.getBoolean(R.styleable.RippleDrawable_pinned, mState.mPinned);
-
// If we're not waiting on a theme, verify required attributes.
- if (state.mTouchThemeAttrs == null && mState.mTint == null) {
+ if (state.mTouchThemeAttrs == null && mState.mColor == null) {
throw new XmlPullParserException(a.getPositionDescription() +
- ": <ripple> requires a valid tint attribute");
+ ": <ripple> requires a valid color attribute");
}
}
@@ -368,11 +382,6 @@ public class RippleDrawable extends LayerDrawable {
@Override
public void setHotspot(float x, float y) {
- if (mState.mPinned && !circleContains(mHotspotBounds, x, y)) {
- x = mHotspotBounds.exactCenterX();
- y = mHotspotBounds.exactCenterY();
- }
-
if (mHotspot == null) {
mHotspot = new Ripple(this, mHotspotBounds, x, y);
@@ -384,18 +393,6 @@ public class RippleDrawable extends LayerDrawable {
}
}
- private boolean circleContains(Rect bounds, float x, float y) {
- final float pX = bounds.exactCenterX() - x;
- final float pY = bounds.exactCenterY() - y;
- final double pointRadius = Math.sqrt(pX * pX + pY * pY);
-
- final float bX = bounds.width() / 2.0f;
- final float bY = bounds.height() / 2.0f;
- final double boundsRadius = Math.sqrt(bX * bX + bY * bY);
-
- return pointRadius < boundsRadius;
- }
-
/**
* Creates an active hotspot at the specified location.
*/
@@ -413,7 +410,7 @@ public class RippleDrawable extends LayerDrawable {
mHotspot = new Ripple(this, mHotspotBounds, x, y);
}
- final int color = mState.mTint.getColorForState(getState(), Color.TRANSPARENT);
+ final int color = mState.mColor.getColorForState(getState(), Color.TRANSPARENT);
mHotspot.setup(mState.mMaxRadius, color, mDensity);
mHotspot.enter();
@@ -471,16 +468,23 @@ public class RippleDrawable extends LayerDrawable {
@Override
public void draw(Canvas canvas) {
- final Rect bounds = isProjected() ? getDirtyBounds() : getBounds();
-
- // Draw the content into a layer first.
- final int contentLayer = drawContentLayer(canvas, bounds, SRC_OVER);
-
- // Next, draw the ripples into a layer.
- final int rippleLayer = drawRippleLayer(canvas, bounds, mState.mTintXfermode);
-
- // If we have ripples, draw the masking layer.
- if (rippleLayer >= 0) {
+ final boolean isProjected = isProjected();
+ final boolean hasMask = mMask != null;
+ final boolean drawNonMaskContent = mLayerState.mNum > (hasMask ? 1 : 0);
+ final boolean drawMask = hasMask && mMask.getOpacity() != PixelFormat.OPAQUE;
+ final Rect bounds = isProjected ? getDirtyBounds() : getBounds();
+
+ // If we have content, draw it into a layer first.
+ final int contentLayer = drawNonMaskContent ?
+ drawContentLayer(canvas, bounds, SRC_OVER) : -1;
+
+ // Next, try to draw the ripples (into a layer if necessary). If we need
+ // to mask against the underlying content, set the xfermode to SRC_ATOP.
+ final PorterDuffXfermode xfermode = (hasMask || !drawNonMaskContent) ? SRC_OVER : SRC_ATOP;
+ final int rippleLayer = drawRippleLayer(canvas, bounds, xfermode);
+
+ // If we have ripples and a non-opaque mask, draw the masking layer.
+ if (rippleLayer >= 0 && drawMask) {
drawMaskingLayer(canvas, bounds, DST_IN);
}
@@ -524,17 +528,27 @@ public class RippleDrawable extends LayerDrawable {
}
private int drawContentLayer(Canvas canvas, Rect bounds, PorterDuffXfermode mode) {
+ final ChildDrawable[] array = mLayerState.mChildren;
final int count = mLayerState.mNum;
- if (count == 0 || (mMask != null && count == 1)) {
- return -1;
+
+ // We don't need a layer if we don't expect to draw any ripples, we have
+ // an explicit mask, or if the non-mask content is all opaque.
+ boolean needsLayer = false;
+ if (mAnimatingRipplesCount > 0 && mMask == null) {
+ for (int i = 0; i < count; i++) {
+ if (array[i].mId != R.id.mask
+ && array[i].mDrawable.getOpacity() != PixelFormat.OPAQUE) {
+ needsLayer = true;
+ break;
+ }
+ }
}
final Paint maskingPaint = getMaskingPaint(mode);
- final int restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
- bounds.right, bounds.bottom, maskingPaint);
+ final int restoreToCount = needsLayer ? canvas.saveLayer(bounds.left, bounds.top,
+ bounds.right, bounds.bottom, maskingPaint) : -1;
// Draw everything except the mask.
- final ChildDrawable[] array = mLayerState.mChildren;
for (int i = 0; i < count; i++) {
if (array[i].mId != R.id.mask) {
array[i].mDrawable.draw(canvas);
@@ -553,20 +567,21 @@ public class RippleDrawable extends LayerDrawable {
// Separate the ripple color and alpha channel. The alpha will be
// applied when we merge the ripples down to the canvas.
final int rippleARGB;
- if (mState.mTint != null) {
- rippleARGB = mState.mTint.getColorForState(getState(), Color.TRANSPARENT);
+ if (mState.mColor != null) {
+ rippleARGB = mState.mColor.getColorForState(getState(), Color.TRANSPARENT);
} else {
rippleARGB = Color.TRANSPARENT;
}
- final int rippleAlpha = Color.alpha(rippleARGB);
- final int rippleColor = rippleARGB | (0xFF << 24);
if (mRipplePaint == null) {
mRipplePaint = new Paint();
mRipplePaint.setAntiAlias(true);
}
+
+ final int rippleAlpha = Color.alpha(rippleARGB);
final Paint ripplePaint = mRipplePaint;
- ripplePaint.setColor(rippleColor);
+ ripplePaint.setColor(rippleARGB);
+ ripplePaint.setAlpha(0xFF);
boolean drewRipples = false;
int restoreToCount = -1;
@@ -584,7 +599,6 @@ public class RippleDrawable extends LayerDrawable {
maskingPaint.setAlpha(rippleAlpha);
restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
bounds.right, bounds.bottom, maskingPaint);
- maskingPaint.setAlpha(255);
restoreTranslate = canvas.save();
// Translate the canvas to the current hotspot bounds.
@@ -609,18 +623,13 @@ public class RippleDrawable extends LayerDrawable {
}
private int drawMaskingLayer(Canvas canvas, Rect bounds, PorterDuffXfermode mode) {
- final Drawable mask = mMask;
- if (mask == null) {
- return -1;
- }
-
final int restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
bounds.right, bounds.bottom, getMaskingPaint(mode));
// Ensure that DST_IN blends using the entire layer.
canvas.drawColor(Color.TRANSPARENT);
- mask.draw(canvas);
+ mMask.draw(canvas);
return restoreToCount;
}
@@ -630,6 +639,7 @@ public class RippleDrawable extends LayerDrawable {
mMaskingPaint = new Paint();
}
mMaskingPaint.setXfermode(xfermode);
+ mMaskingPaint.setAlpha(0xFF);
return mMaskingPaint;
}
@@ -663,31 +673,19 @@ public class RippleDrawable extends LayerDrawable {
static class RippleState extends LayerState {
int[] mTouchThemeAttrs;
- ColorStateList mTint = null;
- PorterDuffXfermode mTintXfermode = SRC_ATOP;
+ ColorStateList mColor = null;
int mMaxRadius = RADIUS_AUTO;
- boolean mPinned = false;
public RippleState(RippleState orig, RippleDrawable owner, Resources res) {
super(orig, owner, res);
if (orig != null) {
mTouchThemeAttrs = orig.mTouchThemeAttrs;
- mTint = orig.mTint;
- mTintXfermode = orig.mTintXfermode;
+ mColor = orig.mColor;
mMaxRadius = orig.mMaxRadius;
- mPinned = orig.mPinned;
}
}
- public void setTintMode(Mode mode) {
- mTintXfermode = new PorterDuffXfermode(mode);
- }
-
- public PorterDuffXfermode getTintXfermode() {
- return mTintXfermode;
- }
-
@Override
public boolean canApplyTheme() {
return mTouchThemeAttrs != null || super.canApplyTheme();
diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java
index b63edce1603f..39795b522022 100644
--- a/graphics/java/android/graphics/pdf/PdfRenderer.java
+++ b/graphics/java/android/graphics/pdf/PdfRenderer.java
@@ -188,7 +188,6 @@ public final class PdfRenderer implements AutoCloseable {
private void doClose() {
if (mCurrentPage != null) {
mCurrentPage.close();
- mCurrentPage = null;
}
nativeClose(mNativeDocument);
try {
@@ -375,6 +374,7 @@ public final class PdfRenderer implements AutoCloseable {
nativeClosePage(mNativePage);
mNativePage = 0;
mCloseGuard.close();
+ mCurrentPage = null;
}
private void throwIfClosed() {
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 7d4da0181b66..a4b78a605496 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -3221,7 +3221,7 @@ status_t ResTable::addEmpty(const int32_t cookie) {
header->header = (const ResTable_header*) resHeader;
mHeaders.add(header);
- return NO_ERROR;
+ return (mError=NO_ERROR);
}
status_t ResTable::addInternal(const void* data, size_t size, const int32_t cookie,
diff --git a/libs/hwui/AmbientShadow.cpp b/libs/hwui/AmbientShadow.cpp
index c1af5f52efd6..937b7c622c62 100644
--- a/libs/hwui/AmbientShadow.cpp
+++ b/libs/hwui/AmbientShadow.cpp
@@ -44,18 +44,18 @@ namespace uirenderer {
* @param shadowVertexBuffer Return an floating point array of (x, y, a)
* triangle strips mode.
*/
-VertexBufferMode AmbientShadow::createAmbientShadow(bool isCasterOpaque,
+void AmbientShadow::createAmbientShadow(bool isCasterOpaque,
const Vector3* vertices, int vertexCount, const Vector3& centroid3d,
float heightFactor, float geomFactor, VertexBuffer& shadowVertexBuffer) {
const int rays = SHADOW_RAY_COUNT;
- VertexBufferMode mode = kVertexBufferMode_OnePolyRingShadow;
+ VertexBuffer::Mode mode = VertexBuffer::kOnePolyRingShadow;
// Validate the inputs.
if (vertexCount < 3 || heightFactor <= 0 || rays <= 0
|| geomFactor <= 0) {
#if DEBUG_SHADOW
ALOGW("Invalid input for createAmbientShadow(), early return!");
#endif
- return mode; // vertex buffer is empty, so any mode doesn't matter.
+ return;
}
Vector<Vector2> dir; // TODO: use C++11 unique_ptr
@@ -127,7 +127,7 @@ VertexBufferMode AmbientShadow::createAmbientShadow(bool isCasterOpaque,
// If caster isn't opaque, we need to to fill the umbra by storing the umbra's
// centroid in the innermost ring of vertices.
if (!isCasterOpaque) {
- mode = kVertexBufferMode_TwoPolyRingShadow;
+ mode = VertexBuffer::kTwoPolyRingShadow;
float centroidAlpha = 1.0 / (1 + centroid3d.z * heightFactor);
AlphaVertex centroidXYA;
AlphaVertex::set(&centroidXYA, centroid2d.x, centroid2d.y, centroidAlpha);
@@ -135,6 +135,7 @@ VertexBufferMode AmbientShadow::createAmbientShadow(bool isCasterOpaque,
shadowVertices[2 * rays + rayIndex] = centroidXYA;
}
}
+ shadowVertexBuffer.setMode(mode);
#if DEBUG_SHADOW
for (int i = 0; i < SHADOW_VERTEX_COUNT; i++) {
@@ -142,7 +143,6 @@ VertexBufferMode AmbientShadow::createAmbientShadow(bool isCasterOpaque,
shadowVertices[i].y, shadowVertices[i].alpha);
}
#endif
- return mode;
}
/**
diff --git a/libs/hwui/AmbientShadow.h b/libs/hwui/AmbientShadow.h
index 451bfbe4048f..68df246ea269 100644
--- a/libs/hwui/AmbientShadow.h
+++ b/libs/hwui/AmbientShadow.h
@@ -35,7 +35,7 @@ namespace uirenderer {
*/
class AmbientShadow {
public:
- static VertexBufferMode createAmbientShadow(bool isCasterOpaque, const Vector3* poly,
+ static void createAmbientShadow(bool isCasterOpaque, const Vector3* poly,
int polyLength, const Vector3& centroid3d, float heightFactor,
float geomFactor, VertexBuffer& shadowVertexBuffer);
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 442f327b0e1a..900a72e71373 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -51,6 +51,7 @@ ifeq ($(USE_OPENGL_RENDERER),true)
SpotShadow.cpp \
StatefulBaseRenderer.cpp \
Stencil.cpp \
+ TessellationCache.cpp \
Texture.cpp \
TextureCache.cpp \
TextDropShadowCache.cpp
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 77ef637a3f49..6fd9999d132d 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -273,6 +273,8 @@ void Caches::dumpMemoryUsage(String8 &log) {
gradientCache.getSize(), gradientCache.getMaxSize());
log.appendFormat(" PathCache %8d / %8d\n",
pathCache.getSize(), pathCache.getMaxSize());
+ log.appendFormat(" TessellationCache %8d / %8d\n",
+ tessellationCache.getSize(), tessellationCache.getMaxSize());
log.appendFormat(" TextDropShadowCache %8d / %8d\n", dropShadowCache.getSize(),
dropShadowCache.getMaxSize());
log.appendFormat(" PatchCache %8d / %8d\n",
@@ -295,6 +297,7 @@ void Caches::dumpMemoryUsage(String8 &log) {
total += renderBufferCache.getSize();
total += gradientCache.getSize();
total += pathCache.getSize();
+ total += tessellationCache.getSize();
total += dropShadowCache.getSize();
total += patchCache.getSize();
for (uint32_t i = 0; i < fontRenderer->getFontRendererCount(); i++) {
@@ -358,6 +361,7 @@ void Caches::flush(FlushMode mode) {
fontRenderer->flush();
textureCache.flush();
pathCache.clear();
+ tessellationCache.clear();
// fall through
case kFlushMode_Layers:
layerCache.clear();
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 5367663201bb..b4b5927b6511 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -43,6 +43,7 @@
#include "PatchCache.h"
#include "ProgramCache.h"
#include "PathCache.h"
+#include "TessellationCache.h"
#include "TextDropShadowCache.h"
#include "FboCache.h"
#include "ResourceCache.h"
@@ -326,6 +327,7 @@ public:
ProgramCache programCache;
PathCache pathCache;
PatchCache patchCache;
+ TessellationCache tessellationCache;
TextDropShadowCache dropShadowCache;
FboCache fboCache;
ResourceCache resourceCache;
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index ea3e7a875975..3281116c2638 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -1114,6 +1114,15 @@ public:
OP_LOG("Draw RoundRect "RECT_STRING", rx %f, ry %f", RECT_ARGS(mLocalBounds), mRx, mRy);
}
+ virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
+ const DeferredDisplayState& state) {
+ DrawStrokableOp::onDefer(renderer, deferInfo, state);
+ if (!mPaint->getPathEffect()) {
+ renderer.getCaches().tessellationCache.precacheRoundRect(state.mMatrix,
+ mLocalBounds.getWidth(), mLocalBounds.getHeight(), mRx, mRy, mPaint);
+ }
+ }
+
virtual const char* name() { return "DrawRoundRect"; }
private:
@@ -1533,9 +1542,23 @@ public:
}
}
+ virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
+ const DeferredDisplayState& state) {
+ renderer.getCaches().tessellationCache.precacheShadows(&state.mMatrix,
+ renderer.getLocalClipBounds(), isCasterOpaque(), &mOutline,
+ &mTransformXY, &mTransformZ, renderer.getLightCenter(), renderer.getLightRadius());
+ }
+
virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
- return renderer.drawShadow(mTransformXY, mTransformZ,
- mCasterAlpha, mCasterUnclipped, &mOutline);
+ TessellationCache::vertexBuffer_pair_t buffers;
+ Matrix4 drawTransform;
+ renderer.getMatrix(&drawTransform);
+ renderer.getCaches().tessellationCache.getShadowBuffers(&drawTransform,
+ renderer.getLocalClipBounds(), isCasterOpaque(), &mOutline,
+ &mTransformXY, &mTransformZ, renderer.getLightCenter(), renderer.getLightRadius(),
+ buffers);
+
+ return renderer.drawShadow(mCasterAlpha, buffers.first, buffers.second);
}
virtual void output(int level, uint32_t logFlags) const {
@@ -1545,6 +1568,8 @@ public:
virtual const char* name() { return "DrawShadow"; }
private:
+ bool isCasterOpaque() { return mCasterAlpha >= 1.0f && mCasterUnclipped; }
+
const mat4 mTransformXY;
const mat4 mTransformZ;
const float mCasterAlpha;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 71836dd5ab3b..31f399a1f72a 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -287,6 +287,7 @@ void OpenGLRenderer::finish() {
// of the current frame
if (getTargetFbo() == 0) {
mCaches.pathCache.trim();
+ mCaches.tessellationCache.trim();
}
if (!suppressErrorChecks()) {
@@ -2390,7 +2391,7 @@ status_t OpenGLRenderer::drawPatches(const SkBitmap* bitmap, AssetAtlas::Entry*
return DrawGlInfo::kStatusDrew;
}
-status_t OpenGLRenderer::drawVertexBuffer(VertexBufferMode mode,
+status_t OpenGLRenderer::drawVertexBuffer(float translateX, float translateY,
const VertexBuffer& vertexBuffer, const SkPaint* paint, bool useOffset) {
// not missing call to quickReject/dirtyLayer, always done at a higher level
if (!vertexBuffer.getVertexCount()) {
@@ -2398,6 +2399,9 @@ status_t OpenGLRenderer::drawVertexBuffer(VertexBufferMode mode,
return DrawGlInfo::kStatusDone;
}
+ const Rect& bounds = vertexBuffer.getBounds();
+ dirtyLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, *currentTransform());
+
int color = paint->getColor();
bool isAA = paint->isAntiAlias();
@@ -2409,7 +2413,7 @@ status_t OpenGLRenderer::drawVertexBuffer(VertexBufferMode mode,
setupDrawShader(getShader(paint));
setupDrawBlending(paint, isAA);
setupDrawProgram();
- setupDrawModelView(kModelViewMode_Translate, useOffset, 0, 0, 0, 0);
+ setupDrawModelView(kModelViewMode_Translate, useOffset, translateX, translateY, 0, 0);
setupDrawColorUniforms(getShader(paint));
setupDrawColorFilterUniforms(getColorFilter(paint));
setupDrawShaderUniforms(getShader(paint));
@@ -2429,13 +2433,14 @@ status_t OpenGLRenderer::drawVertexBuffer(VertexBufferMode mode,
glVertexAttribPointer(alphaSlot, 1, GL_FLOAT, GL_FALSE, gAlphaVertexStride, alphaCoords);
}
- if (mode == kVertexBufferMode_Standard) {
+ const VertexBuffer::Mode mode = vertexBuffer.getMode();
+ if (mode == VertexBuffer::kStandard) {
mCaches.unbindIndicesBuffer();
glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexBuffer.getVertexCount());
- } else if (mode == kVertexBufferMode_OnePolyRingShadow) {
+ } else if (mode == VertexBuffer::kOnePolyRingShadow) {
mCaches.bindShadowIndicesBuffer();
glDrawElements(GL_TRIANGLE_STRIP, ONE_POLY_RING_SHADOW_INDEX_COUNT, GL_UNSIGNED_SHORT, 0);
- } else if (mode == kVertexBufferMode_TwoPolyRingShadow) {
+ } else if (mode == VertexBuffer::kTwoPolyRingShadow) {
mCaches.bindShadowIndicesBuffer();
glDrawElements(GL_TRIANGLE_STRIP, TWO_POLY_RING_SHADOW_INDEX_COUNT, GL_UNSIGNED_SHORT, 0);
}
@@ -2460,14 +2465,7 @@ status_t OpenGLRenderer::drawConvexPath(const SkPath& path, const SkPaint* paint
VertexBuffer vertexBuffer;
// TODO: try clipping large paths to viewport
PathTessellator::tessellatePath(path, paint, *currentTransform(), vertexBuffer);
-
- if (hasLayer()) {
- SkRect bounds = path.getBounds();
- PathTessellator::expandBoundsForStroke(bounds, paint);
- dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
- }
-
- return drawVertexBuffer(kVertexBufferMode_Standard, vertexBuffer, paint);
+ return drawVertexBuffer(vertexBuffer, paint);
}
/**
@@ -2487,18 +2485,15 @@ status_t OpenGLRenderer::drawLines(const float* points, int count, const SkPaint
count &= ~0x3; // round down to nearest four
VertexBuffer buffer;
- SkRect bounds;
- PathTessellator::tessellateLines(points, count, paint, *currentTransform(), bounds, buffer);
+ PathTessellator::tessellateLines(points, count, paint, *currentTransform(), buffer);
+ const Rect& bounds = buffer.getBounds();
- // can't pass paint, since style would be checked for outset. outset done by tessellation.
- if (quickRejectSetupScissor(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
+ if (quickRejectSetupScissor(bounds.left, bounds.top, bounds.right, bounds.bottom)) {
return DrawGlInfo::kStatusDone;
}
- dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
-
bool useOffset = !paint->isAntiAlias();
- return drawVertexBuffer(kVertexBufferMode_Standard, buffer, paint, useOffset);
+ return drawVertexBuffer(buffer, paint, useOffset);
}
status_t OpenGLRenderer::drawPoints(const float* points, int count, const SkPaint* paint) {
@@ -2507,18 +2502,15 @@ status_t OpenGLRenderer::drawPoints(const float* points, int count, const SkPain
count &= ~0x1; // round down to nearest two
VertexBuffer buffer;
- SkRect bounds;
- PathTessellator::tessellatePoints(points, count, paint, *currentTransform(), bounds, buffer);
+ PathTessellator::tessellatePoints(points, count, paint, *currentTransform(), buffer);
- // can't pass paint, since style would be checked for outset. outset done by tessellation.
- if (quickRejectSetupScissor(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
+ const Rect& bounds = buffer.getBounds();
+ if (quickRejectSetupScissor(bounds.left, bounds.top, bounds.right, bounds.bottom)) {
return DrawGlInfo::kStatusDone;
}
- dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
-
bool useOffset = !paint->isAntiAlias();
- return drawVertexBuffer(kVertexBufferMode_Standard, buffer, paint, useOffset);
+ return drawVertexBuffer(buffer, paint, useOffset);
}
status_t OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
@@ -2564,16 +2556,9 @@ status_t OpenGLRenderer::drawRoundRect(float left, float top, float right, float
return drawShape(left, top, texture, p);
}
- SkPath path;
- SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
- if (p->getStyle() == SkPaint::kStrokeAndFill_Style) {
- float outset = p->getStrokeWidth() / 2;
- rect.outset(outset, outset);
- rx += outset;
- ry += outset;
- }
- path.addRoundRect(rect, rx, ry);
- return drawConvexPath(path, p);
+ const VertexBuffer* vertexBuffer = mCaches.tessellationCache.getRoundRect(*currentTransform(),
+ right - left, bottom - top, rx, ry, p);
+ return drawVertexBuffer(left, top, *vertexBuffer, p);
}
status_t OpenGLRenderer::drawCircle(float x, float y, float radius, const SkPaint* p) {
@@ -3192,8 +3177,8 @@ static void mapPointFakeZ(Vector3& point, const mat4& transformXY, const mat4& t
transformXY.mapPoint(point.x, point.y);
}
-status_t OpenGLRenderer::drawShadow(const mat4& casterTransformXY, const mat4& casterTransformZ,
- float casterAlpha, bool casterUnclipped, const SkPath* casterPerimeter) {
+status_t OpenGLRenderer::drawShadow(float casterAlpha,
+ const VertexBuffer* ambientShadowVertexBuffer, const VertexBuffer* spotShadowVertexBuffer) {
if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
// TODO: use quickRejectWithScissor. For now, always force enable scissor.
@@ -3202,77 +3187,14 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransformXY, const mat4& c
SkPaint paint;
paint.setAntiAlias(true); // want to use AlphaVertex
- // tessellate caster outline into a 2d polygon
- Vector<Vertex> casterVertices2d;
- const float casterRefinementThresholdSquared = 20.0f; // TODO: experiment with this value
- PathTessellator::approximatePathOutlineVertices(*casterPerimeter,
- casterRefinementThresholdSquared, casterVertices2d);
- if (!ShadowTessellator::isClockwisePath(*casterPerimeter)) {
- ShadowTessellator::reverseVertexArray(casterVertices2d.editArray(),
- casterVertices2d.size());
- }
-
- if (casterVertices2d.size() == 0) {
- // empty caster polygon computed from path
- return DrawGlInfo::kStatusDone;
- }
-
- // map 2d caster poly into 3d
- const int casterVertexCount = casterVertices2d.size();
- Vector3 casterPolygon[casterVertexCount];
- float minZ = FLT_MAX;
- float maxZ = -FLT_MAX;
- for (int i = 0; i < casterVertexCount; i++) {
- const Vertex& point2d = casterVertices2d[i];
- casterPolygon[i] = Vector3(point2d.x, point2d.y, 0);
- mapPointFakeZ(casterPolygon[i], casterTransformXY, casterTransformZ);
- minZ = fmin(minZ, casterPolygon[i].z);
- maxZ = fmax(maxZ, casterPolygon[i].z);
- }
-
- // map the centroid of the caster into 3d
- Vector2 centroid = ShadowTessellator::centroid2d(
- reinterpret_cast<const Vector2*>(casterVertices2d.array()),
- casterVertexCount);
- Vector3 centroid3d(centroid.x, centroid.y, 0);
- mapPointFakeZ(centroid3d, casterTransformXY, casterTransformZ);
-
- // if the caster intersects the z=0 plane, lift it in Z so it doesn't
- if (minZ < SHADOW_MIN_CASTER_Z) {
- float casterLift = SHADOW_MIN_CASTER_Z - minZ;
- for (int i = 0; i < casterVertexCount; i++) {
- casterPolygon[i].z += casterLift;
- }
- centroid3d.z += casterLift;
- }
-
- // Check whether we want to draw the shadow at all by checking the caster's
- // bounds against clip.
- // We only have ortho projection, so we can just ignore the Z in caster for
- // simple rejection calculation.
- Rect localClip = mSnapshot->getLocalClip();
- Rect casterBounds(casterPerimeter->getBounds());
- casterTransformXY.mapRect(casterBounds);
-
- bool isCasterOpaque = (casterAlpha == 1.0f) && casterUnclipped;
- // draw caster's shadows
- if (mCaches.propertyAmbientShadowStrength > 0) {
+ if (ambientShadowVertexBuffer && mCaches.propertyAmbientShadowStrength > 0) {
paint.setARGB(casterAlpha * mCaches.propertyAmbientShadowStrength, 0, 0, 0);
- VertexBuffer ambientShadowVertexBuffer;
- VertexBufferMode vertexBufferMode = ShadowTessellator::tessellateAmbientShadow(
- isCasterOpaque, casterPolygon, casterVertexCount, centroid3d,
- casterBounds, localClip, maxZ, ambientShadowVertexBuffer);
- drawVertexBuffer(vertexBufferMode, ambientShadowVertexBuffer, &paint);
+ drawVertexBuffer(*ambientShadowVertexBuffer, &paint);
}
- if (mCaches.propertySpotShadowStrength > 0) {
+ if (spotShadowVertexBuffer && mCaches.propertySpotShadowStrength > 0) {
paint.setARGB(casterAlpha * mCaches.propertySpotShadowStrength, 0, 0, 0);
- VertexBuffer spotShadowVertexBuffer;
- VertexBufferMode vertexBufferMode = ShadowTessellator::tessellateSpotShadow(
- isCasterOpaque, casterPolygon, casterVertexCount,
- *currentTransform(), mLightCenter, mLightRadius, casterBounds, localClip,
- spotShadowVertexBuffer);
- drawVertexBuffer(vertexBufferMode, spotShadowVertexBuffer, &paint);
+ drawVertexBuffer(*spotShadowVertexBuffer, &paint);
}
return DrawGlInfo::kStatusDrew;
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index fc279478cd64..b9b369fa226b 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -111,12 +111,6 @@ enum ModelViewMode {
kModelViewMode_TranslateAndScale = 1,
};
-enum VertexBufferMode {
- kVertexBufferMode_Standard = 0,
- kVertexBufferMode_OnePolyRingShadow = 1,
- kVertexBufferMode_TwoPolyRingShadow = 2
-};
-
///////////////////////////////////////////////////////////////////////////////
// Renderer
///////////////////////////////////////////////////////////////////////////////
@@ -213,8 +207,8 @@ public:
DrawOpMode drawOpMode = kDrawOpMode_Immediate);
virtual status_t drawRects(const float* rects, int count, const SkPaint* paint);
- status_t drawShadow(const mat4& casterTransformXY, const mat4& casterTransformZ,
- float casterAlpha, bool casterUnclipped, const SkPath* casterPerimeter);
+ status_t drawShadow(float casterAlpha,
+ const VertexBuffer* ambientShadowVertexBuffer, const VertexBuffer* spotShadowVertexBuffer);
virtual void resetPaintFilter();
virtual void setupPaintFilter(int clearBits, int setBits);
@@ -348,6 +342,9 @@ public:
}
#endif
+ const Vector3& getLightCenter() const { return mLightCenter; }
+ float getLightRadius() const { return mLightRadius; }
+
protected:
/**
* Perform the setup specific to a frame. This method does not
@@ -661,10 +658,18 @@ private:
* @param paint The paint to render with
* @param useOffset Offset the vertexBuffer (used in drawing non-AA lines)
*/
- status_t drawVertexBuffer(VertexBufferMode mode, const VertexBuffer& vertexBuffer,
+ status_t drawVertexBuffer(float translateX, float translateY, const VertexBuffer& vertexBuffer,
const SkPaint* paint, bool useOffset = false);
/**
+ * Convenience for translating method
+ */
+ status_t drawVertexBuffer(const VertexBuffer& vertexBuffer,
+ const SkPaint* paint, bool useOffset = false) {
+ return drawVertexBuffer(0.0f, 0.0f, vertexBuffer, paint, useOffset);
+ }
+
+ /**
* Renders the convex hull defined by the specified path as a strip of polygons.
*
* @param path The hull of the path to draw
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index 5a49f38c6996..ab6b742f8f4f 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -74,10 +74,6 @@ hash_t PathDescription::hash() const {
return JenkinsHashWhiten(hash);
}
-int PathDescription::compare(const PathDescription& rhs) const {
- return memcmp(this, &rhs, sizeof(PathDescription));
-}
-
///////////////////////////////////////////////////////////////////////////////
// Utilities
///////////////////////////////////////////////////////////////////////////////
@@ -163,14 +159,7 @@ PathCache::PathCache():
} else {
INIT_LOGD(" Using default %s cache size of %.2fMB", name, DEFAULT_PATH_CACHE_SIZE);
}
- init();
-}
-PathCache::~PathCache() {
- mCache.clear();
-}
-
-void PathCache::init() {
mCache.setOnEntryRemovedListener(this);
GLint maxTextureSize;
@@ -180,6 +169,10 @@ void PathCache::init() {
mDebugEnabled = readDebugLevel() & kDebugCaches;
}
+PathCache::~PathCache() {
+ mCache.clear();
+}
+
///////////////////////////////////////////////////////////////////////////////
// Size management
///////////////////////////////////////////////////////////////////////////////
@@ -341,7 +334,7 @@ PathCache::PathProcessor::PathProcessor(Caches& caches):
}
void PathCache::PathProcessor::onProcess(const sp<Task<SkBitmap*> >& task) {
- sp<PathTask> t = static_cast<PathTask* >(task.get());
+ PathTask* t = static_cast<PathTask*>(task.get());
ATRACE_NAME("pathPrecache");
float left, top, offset;
diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h
index 847853a58a42..6177ff1980a6 100644
--- a/libs/hwui/PathCache.h
+++ b/libs/hwui/PathCache.h
@@ -26,6 +26,7 @@
#include "Debug.h"
#include "Properties.h"
#include "Texture.h"
+#include "utils/Macros.h"
#include "utils/Pair.h"
class SkBitmap;
@@ -107,6 +108,7 @@ enum ShapeType {
};
struct PathDescription {
+ DESCRIPTION_TYPE(PathDescription);
ShapeType type;
SkPaint::Join join;
SkPaint::Cap cap;
@@ -148,29 +150,6 @@ struct PathDescription {
PathDescription(ShapeType shapeType, const SkPaint* paint);
hash_t hash() const;
-
- int compare(const PathDescription& rhs) const;
-
- bool operator==(const PathDescription& other) const {
- return compare(other) == 0;
- }
-
- bool operator!=(const PathDescription& other) const {
- return compare(other) != 0;
- }
-
- friend inline int strictly_order_type(
- const PathDescription& lhs, const PathDescription& rhs) {
- return lhs.compare(rhs) < 0;
- }
-
- friend inline int compare_type(const PathDescription& lhs, const PathDescription& rhs) {
- return lhs.compare(rhs);
- }
-
- friend inline hash_t hash_type(const PathDescription& entry) {
- return entry.hash();
- }
};
/**
diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp
index 4ef215899aaa..c9921ba37ed2 100644
--- a/libs/hwui/PathTessellator.cpp
+++ b/libs/hwui/PathTessellator.cpp
@@ -57,15 +57,17 @@ namespace uirenderer {
#define ROUND_CAP_THRESH 0.25f
#define PI 3.1415926535897932f
-/**
- * Note: this function doesn't account for the AA case with sub-pixel line thickness (not just 0 <
- * width < 1.0, canvas scale factors in as well) so this can't be used for points/lines
- */
-void PathTessellator::expandBoundsForStroke(SkRect& bounds, const SkPaint* paint) {
- if (paint->getStyle() != SkPaint::kFill_Style) {
- float outset = paint->getStrokeWidth() * 0.5f;
- if (outset == 0) outset = 0.5f; // account for hairline
- bounds.outset(outset, outset);
+void PathTessellator::extractTessellationScales(const Matrix4& transform,
+ float* scaleX, float* scaleY) {
+ *scaleX = 1.0f;
+ *scaleY = 1.0f;
+ if (CC_UNLIKELY(!transform.isPureTranslate())) {
+ float m00 = transform.data[Matrix4::kScaleX];
+ float m01 = transform.data[Matrix4::kSkewY];
+ float m10 = transform.data[Matrix4::kSkewX];
+ float m11 = transform.data[Matrix4::kScaleY];
+ *scaleX = sqrt(m00 * m00 + m01 * m01);
+ *scaleY = sqrt(m10 * m10 + m11 * m11);
}
}
@@ -94,18 +96,15 @@ public:
halfStrokeWidth(paint->getStrokeWidth() * 0.5f), maxAlpha(1.0f) {
// compute inverse scales
if (CC_UNLIKELY(!transform.isPureTranslate())) {
- float m00 = transform.data[Matrix4::kScaleX];
- float m01 = transform.data[Matrix4::kSkewY];
- float m10 = transform.data[Matrix4::kSkewX];
- float m11 = transform.data[Matrix4::kScaleY];
- float scaleX = sqrt(m00 * m00 + m01 * m01);
- float scaleY = sqrt(m10 * m10 + m11 * m11);
+ float scaleX, scaleY;
+ PathTessellator::extractTessellationScales(transform, &scaleX, &scaleY);
inverseScaleX = (scaleX != 0) ? (1.0f / scaleX) : 1.0f;
inverseScaleY = (scaleY != 0) ? (1.0f / scaleY) : 1.0f;
}
if (isAA && halfStrokeWidth != 0 && inverseScaleX == inverseScaleY &&
2 * halfStrokeWidth < inverseScaleX) {
+ // AA, with non-hairline stroke, width < 1 pixel. Scale alpha and treat as hairline.
maxAlpha *= (2 * halfStrokeWidth) / inverseScaleX;
halfStrokeWidth = 0.0f;
}
@@ -159,10 +158,10 @@ public:
* Outset the bounds of point data (for line endpoints or points) to account for AA stroke
* geometry.
*/
- void expandBoundsForStrokeAA(SkRect& bounds) const {
+ void expandBoundsForStroke(Rect* bounds) const {
float outset = halfStrokeWidth;
if (outset == 0) outset = 0.5f;
- bounds.outset(outset * inverseScaleX + Vertex::GeometryFudgeFactor(),
+ bounds->outset(outset * inverseScaleX + Vertex::GeometryFudgeFactor(),
outset * inverseScaleY + Vertex::GeometryFudgeFactor());
}
};
@@ -778,21 +777,25 @@ void PathTessellator::tessellatePath(const SkPath &path, const SkPaint* paint,
getFillVerticesFromPerimeterAA(paintInfo, tempVertices, vertexBuffer);
}
}
+
+ Rect bounds(path.getBounds());
+ paintInfo.expandBoundsForStroke(&bounds);
+ vertexBuffer.setBounds(bounds);
}
-static void expandRectToCoverVertex(SkRect& rect, float x, float y) {
- rect.fLeft = fminf(rect.fLeft, x);
- rect.fTop = fminf(rect.fTop, y);
- rect.fRight = fmaxf(rect.fRight, x);
- rect.fBottom = fmaxf(rect.fBottom, y);
+static void expandRectToCoverVertex(Rect& rect, float x, float y) {
+ rect.left = fminf(rect.left, x);
+ rect.top = fminf(rect.top, y);
+ rect.right = fmaxf(rect.right, x);
+ rect.bottom = fmaxf(rect.bottom, y);
}
-static void expandRectToCoverVertex(SkRect& rect, const Vertex& vertex) {
+static void expandRectToCoverVertex(Rect& rect, const Vertex& vertex) {
expandRectToCoverVertex(rect, vertex.x, vertex.y);
}
template <class TYPE>
static void instanceVertices(VertexBuffer& srcBuffer, VertexBuffer& dstBuffer,
- const float* points, int count, SkRect& bounds) {
+ const float* points, int count, Rect& bounds) {
bounds.set(points[0], points[1], points[0], points[1]);
int numPoints = count / 2;
@@ -807,7 +810,7 @@ static void instanceVertices(VertexBuffer& srcBuffer, VertexBuffer& dstBuffer,
}
void PathTessellator::tessellatePoints(const float* points, int count, const SkPaint* paint,
- const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
+ const mat4& transform, VertexBuffer& vertexBuffer) {
const PaintInfo paintInfo(paint, transform);
// determine point shape
@@ -830,6 +833,7 @@ void PathTessellator::tessellatePoints(const float* points, int count, const SkP
if (!outlineVertices.size()) return;
+ Rect bounds;
// tessellate, then duplicate outline across points
int numPoints = count / 2;
VertexBuffer tempBuffer;
@@ -843,12 +847,12 @@ void PathTessellator::tessellatePoints(const float* points, int count, const SkP
}
// expand bounds from vertex coords to pixel data
- paintInfo.expandBoundsForStrokeAA(bounds);
-
+ paintInfo.expandBoundsForStroke(&bounds);
+ vertexBuffer.setBounds(bounds);
}
void PathTessellator::tessellateLines(const float* points, int count, const SkPaint* paint,
- const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
+ const mat4& transform, VertexBuffer& vertexBuffer) {
ATRACE_CALL();
const PaintInfo paintInfo(paint, transform);
@@ -868,6 +872,7 @@ void PathTessellator::tessellateLines(const float* points, int count, const SkPa
tempVertices.push();
tempVertices.push();
Vertex* tempVerticesData = tempVertices.editArray();
+ Rect bounds;
bounds.set(points[0], points[1], points[0], points[1]);
for (int i = 0; i < count; i += 4) {
Vertex::set(&(tempVerticesData[0]), points[i + 0], points[i + 1]);
@@ -892,7 +897,8 @@ void PathTessellator::tessellateLines(const float* points, int count, const SkPa
}
// expand bounds from vertex coords to pixel data
- paintInfo.expandBoundsForStrokeAA(bounds);
+ paintInfo.expandBoundsForStroke(&bounds);
+ vertexBuffer.setBounds(bounds);
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/PathTessellator.h b/libs/hwui/PathTessellator.h
index a215b7a85d12..f033470ce1c1 100644
--- a/libs/hwui/PathTessellator.h
+++ b/libs/hwui/PathTessellator.h
@@ -29,7 +29,15 @@ namespace uirenderer {
class PathTessellator {
public:
- static void expandBoundsForStroke(SkRect& bounds, const SkPaint* paint);
+ /**
+ * Populates scaleX and scaleY with the 'tessellation scale' of the transform - the effective X
+ * and Y scales that tessellation will take into account when generating the 1.0 pixel thick
+ * ramp.
+ *
+ * Two instances of the same shape (size, paint, etc.) will only generate the same vertices if
+ * their tessellation scales are equal.
+ */
+ static void extractTessellationScales(const Matrix4& transform, float* scaleX, float* scaleY);
/**
* Populates a VertexBuffer with a tessellated approximation of the input convex path, as a single
@@ -54,11 +62,10 @@ public:
* @param paint The paint the points will be drawn with indicating AA, stroke width & cap
* @param transform The transform the points will be drawn with, used to drive stretch-aware path
* vertex approximation, and correct AA ramp offsetting
- * @param bounds An output rectangle, which returns the total area covered by the output buffer
* @param vertexBuffer The output buffer
*/
static void tessellatePoints(const float* points, int count, const SkPaint* paint,
- const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+ const mat4& transform, VertexBuffer& vertexBuffer);
/**
* Populates a VertexBuffer with a tessellated approximation of lines as a single triangle
@@ -69,11 +76,10 @@ public:
* @param paint The paint the lines will be drawn with indicating AA, stroke width & cap
* @param transform The transform the points will be drawn with, used to drive stretch-aware path
* vertex approximation, and correct AA ramp offsetting
- * @param bounds An output rectangle, which returns the total area covered by the output buffer
* @param vertexBuffer The output buffer
*/
static void tessellateLines(const float* points, int count, const SkPaint* paint,
- const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+ const mat4& transform, VertexBuffer& vertexBuffer);
/**
* Approximates a convex, CW outline into a Vector of 2d vertices.
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 12241b8ed7b7..feaee8ed5009 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -176,6 +176,7 @@ enum DebugLevel {
#define PROPERTY_RENDER_BUFFER_CACHE_SIZE "ro.hwui.r_buffer_cache_size"
#define PROPERTY_GRADIENT_CACHE_SIZE "ro.hwui.gradient_cache_size"
#define PROPERTY_PATH_CACHE_SIZE "ro.hwui.path_cache_size"
+#define PROPERTY_VERTEX_CACHE_SIZE "ro.hwui.vertex_cache_size"
#define PROPERTY_PATCH_CACHE_SIZE "ro.hwui.patch_cache_size"
#define PROPERTY_DROP_SHADOW_CACHE_SIZE "ro.hwui.drop_shadow_cache_size"
#define PROPERTY_FBO_CACHE_SIZE "ro.hwui.fbo_cache_size"
@@ -222,6 +223,7 @@ enum DebugLevel {
#define DEFAULT_LAYER_CACHE_SIZE 16.0f
#define DEFAULT_RENDER_BUFFER_CACHE_SIZE 2.0f
#define DEFAULT_PATH_CACHE_SIZE 10.0f
+#define DEFAULT_VERTEX_CACHE_SIZE 1.0f
#define DEFAULT_PATCH_CACHE_SIZE 128 // in kB
#define DEFAULT_GRADIENT_CACHE_SIZE 0.5f
#define DEFAULT_DROP_SHADOW_CACHE_SIZE 2.0f
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index 2ddbbd71709f..846ebdcbd6d5 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -186,6 +186,13 @@ public:
bottom += delta;
}
+ void outset(float xdelta, float ydelta) {
+ left -= xdelta;
+ top -= ydelta;
+ right += xdelta;
+ bottom += ydelta;
+ }
+
/**
* Similar to snapToPixelBoundaries, but estimates bounds conservatively to handle GL rounding
* errors.
diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp
index 2f714a1b6ad8..30c6f5dd1984 100644
--- a/libs/hwui/ShadowTessellator.cpp
+++ b/libs/hwui/ShadowTessellator.cpp
@@ -34,7 +34,7 @@ static inline T max(T a, T b) {
return a > b ? a : b;
}
-VertexBufferMode ShadowTessellator::tessellateAmbientShadow(bool isCasterOpaque,
+void ShadowTessellator::tessellateAmbientShadow(bool isCasterOpaque,
const Vector3* casterPolygon, int casterVertexCount,
const Vector3& centroid3d, const Rect& casterBounds,
const Rect& localClip, float maxZ, VertexBuffer& shadowVertexBuffer) {
@@ -57,16 +57,15 @@ VertexBufferMode ShadowTessellator::tessellateAmbientShadow(bool isCasterOpaque,
#if DEBUG_SHADOW
ALOGD("Ambient shadow is out of clip rect!");
#endif
- return kVertexBufferMode_OnePolyRingShadow;
+ return;
}
- return AmbientShadow::createAmbientShadow(isCasterOpaque, casterPolygon,
+ AmbientShadow::createAmbientShadow(isCasterOpaque, casterPolygon,
casterVertexCount, centroid3d, heightFactor, geomFactor,
shadowVertexBuffer);
-
}
-VertexBufferMode ShadowTessellator::tessellateSpotShadow(bool isCasterOpaque,
+void ShadowTessellator::tessellateSpotShadow(bool isCasterOpaque,
const Vector3* casterPolygon, int casterVertexCount,
const mat4& receiverTransform, const Vector3& lightCenter, int lightRadius,
const Rect& casterBounds, const Rect& localClip, VertexBuffer& shadowVertexBuffer) {
@@ -107,19 +106,17 @@ VertexBufferMode ShadowTessellator::tessellateSpotShadow(bool isCasterOpaque,
#if DEBUG_SHADOW
ALOGD("Spot shadow is out of clip rect!");
#endif
- return kVertexBufferMode_OnePolyRingShadow;
+ return;
}
- VertexBufferMode mode = SpotShadow::createSpotShadow(isCasterOpaque,
+ SpotShadow::createSpotShadow(isCasterOpaque,
casterPolygon, casterVertexCount, adjustedLightCenter, lightRadius,
lightVertexCount, shadowVertexBuffer);
-
#if DEBUG_SHADOW
if(shadowVertexBuffer.getVertexCount() <= 0) {
ALOGD("Spot shadow generation failed %d", shadowVertexBuffer.getVertexCount());
}
#endif
- return mode;
}
void ShadowTessellator::generateShadowIndices(uint16_t* shadowIndices) {
diff --git a/libs/hwui/ShadowTessellator.h b/libs/hwui/ShadowTessellator.h
index a1606ad1e674..cb65df5dc12a 100644
--- a/libs/hwui/ShadowTessellator.h
+++ b/libs/hwui/ShadowTessellator.h
@@ -66,12 +66,12 @@ namespace uirenderer {
class ShadowTessellator {
public:
- static VertexBufferMode tessellateAmbientShadow(bool isCasterOpaque,
+ static void tessellateAmbientShadow(bool isCasterOpaque,
const Vector3* casterPolygon, int casterVertexCount,
const Vector3& centroid3d, const Rect& casterBounds,
const Rect& localClip, float maxZ, VertexBuffer& shadowVertexBuffer);
- static VertexBufferMode tessellateSpotShadow(bool isCasterOpaque,
+ static void tessellateSpotShadow(bool isCasterOpaque,
const Vector3* casterPolygon, int casterVertexCount,
const mat4& receiverTransform, const Vector3& lightCenter, int lightRadius,
const Rect& casterBounds, const Rect& localClip, VertexBuffer& shadowVertexBuffer);
diff --git a/libs/hwui/SpotShadow.cpp b/libs/hwui/SpotShadow.cpp
index 3ebe7b4f34e7..06f6204e85fb 100644
--- a/libs/hwui/SpotShadow.cpp
+++ b/libs/hwui/SpotShadow.cpp
@@ -500,14 +500,14 @@ void SpotShadow::computeLightPolygon(int points, const Vector3& lightCenter,
* empty strip if error.
*
*/
-VertexBufferMode SpotShadow::createSpotShadow(bool isCasterOpaque, const Vector3* poly,
+void SpotShadow::createSpotShadow(bool isCasterOpaque, const Vector3* poly,
int polyLength, const Vector3& lightCenter, float lightSize,
int lightVertexCount, VertexBuffer& retStrips) {
Vector3 light[lightVertexCount * 3];
computeLightPolygon(lightVertexCount, lightCenter, lightSize, light);
computeSpotShadow(isCasterOpaque, light, lightVertexCount, lightCenter, poly,
polyLength, retStrips);
- return kVertexBufferMode_TwoPolyRingShadow;
+ retStrips.setMode(VertexBuffer::kTwoPolyRingShadow);
}
/**
diff --git a/libs/hwui/SpotShadow.h b/libs/hwui/SpotShadow.h
index fb3e6d5885ea..d65ea8967fe1 100644
--- a/libs/hwui/SpotShadow.h
+++ b/libs/hwui/SpotShadow.h
@@ -26,7 +26,7 @@ namespace uirenderer {
class SpotShadow {
public:
- static VertexBufferMode createSpotShadow(bool isCasterOpaque, const Vector3* poly,
+ static void createSpotShadow(bool isCasterOpaque, const Vector3* poly,
int polyLength, const Vector3& lightCenter, float lightSize,
int lightVertexCount, VertexBuffer& retStrips);
diff --git a/libs/hwui/StatefulBaseRenderer.cpp b/libs/hwui/StatefulBaseRenderer.cpp
index 90039e92aacb..f2e28e1d83d5 100644
--- a/libs/hwui/StatefulBaseRenderer.cpp
+++ b/libs/hwui/StatefulBaseRenderer.cpp
@@ -101,6 +101,10 @@ void StatefulBaseRenderer::restoreToCount(int saveCount) {
// Matrix
///////////////////////////////////////////////////////////////////////////////
+void StatefulBaseRenderer::getMatrix(Matrix4* matrix) const {
+ matrix->load(*(mSnapshot->transform));
+}
+
void StatefulBaseRenderer::getMatrix(SkMatrix* matrix) const {
mSnapshot->transform->copyTo(*matrix);
}
diff --git a/libs/hwui/StatefulBaseRenderer.h b/libs/hwui/StatefulBaseRenderer.h
index 057006b4ad90..dbb1d8547278 100644
--- a/libs/hwui/StatefulBaseRenderer.h
+++ b/libs/hwui/StatefulBaseRenderer.h
@@ -69,6 +69,7 @@ public:
// int alpha, SkXfermode::Mode mode, int flags);
// Matrix
+ void getMatrix(Matrix4* outMatrix) const;
virtual void getMatrix(SkMatrix* outMatrix) const;
virtual void translate(float dx, float dy, float dz = 0.0f);
virtual void rotate(float degrees);
diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp
new file mode 100644
index 000000000000..79fe4d313741
--- /dev/null
+++ b/libs/hwui/TessellationCache.cpp
@@ -0,0 +1,481 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+#define ATRACE_TAG ATRACE_TAG_VIEW
+
+#include <utils/JenkinsHash.h>
+#include <utils/Trace.h>
+
+#include "Caches.h"
+#include "OpenGLRenderer.h"
+#include "PathTessellator.h"
+#include "ShadowTessellator.h"
+#include "TessellationCache.h"
+
+#include "thread/Signal.h"
+#include "thread/Task.h"
+#include "thread/TaskProcessor.h"
+
+namespace android {
+namespace uirenderer {
+
+///////////////////////////////////////////////////////////////////////////////
+// Cache entries
+///////////////////////////////////////////////////////////////////////////////
+
+TessellationCache::Description::Description()
+ : type(kNone)
+ , cap(SkPaint::kDefault_Cap)
+ , style(SkPaint::kFill_Style)
+ , strokeWidth(1.0f) {
+ memset(&shape, 0, sizeof(Shape));
+}
+
+TessellationCache::Description::Description(Type type)
+ : type(type)
+ , cap(SkPaint::kDefault_Cap)
+ , style(SkPaint::kFill_Style)
+ , strokeWidth(1.0f) {
+ memset(&shape, 0, sizeof(Shape));
+}
+
+TessellationCache::Description::Description(Type type, const SkPaint* paint)
+ : type(type)
+ , cap(paint->getStrokeCap())
+ , style(paint->getStyle())
+ , strokeWidth(paint->getStrokeWidth()) {
+ memset(&shape, 0, sizeof(Shape));
+}
+
+hash_t TessellationCache::Description::hash() const {
+ uint32_t hash = JenkinsHashMix(0, type);
+ hash = JenkinsHashMix(hash, cap);
+ hash = JenkinsHashMix(hash, style);
+ hash = JenkinsHashMix(hash, android::hash_type(strokeWidth));
+ hash = JenkinsHashMixBytes(hash, (uint8_t*) &shape, sizeof(Shape));
+ return JenkinsHashWhiten(hash);
+}
+
+TessellationCache::ShadowDescription::ShadowDescription()
+ : nodeKey(NULL) {
+ memset(&matrixData, 0, 16 * sizeof(float));
+}
+
+TessellationCache::ShadowDescription::ShadowDescription(const void* nodeKey, const Matrix4* drawTransform)
+ : nodeKey(nodeKey) {
+ memcpy(&matrixData, drawTransform->data, 16 * sizeof(float));
+}
+
+hash_t TessellationCache::ShadowDescription::hash() const {
+ uint32_t hash = JenkinsHashMixBytes(0, (uint8_t*) &nodeKey, sizeof(const void*));
+ hash = JenkinsHashMixBytes(hash, (uint8_t*) &matrixData, 16 * sizeof(float));
+ return JenkinsHashWhiten(hash);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// General purpose tessellation task processing
+///////////////////////////////////////////////////////////////////////////////
+
+class TessellationCache::TessellationTask : public Task<VertexBuffer*> {
+public:
+ TessellationTask(Tessellator tessellator, const Description& description,
+ const SkPaint* paint)
+ : tessellator(tessellator)
+ , description(description)
+ , paint(*paint) {
+ }
+
+ ~TessellationTask() {}
+
+ Tessellator tessellator;
+ Description description;
+
+ //copied, since input paint may not be immutable
+ const SkPaint paint;
+};
+
+class TessellationCache::TessellationProcessor : public TaskProcessor<VertexBuffer*> {
+public:
+ TessellationProcessor(Caches& caches)
+ : TaskProcessor<VertexBuffer*>(&caches.tasks) {}
+ ~TessellationProcessor() {}
+
+ virtual void onProcess(const sp<Task<VertexBuffer*> >& task) {
+ TessellationTask* t = static_cast<TessellationTask*>(task.get());
+ ATRACE_NAME("shape tessellation");
+ VertexBuffer* buffer = t->tessellator(t->description, t->paint);
+ t->setResult(buffer);
+ }
+};
+
+struct TessellationCache::Buffer {
+public:
+ Buffer(const sp<Task<VertexBuffer*> >& task)
+ : mTask(task)
+ , mBuffer(NULL) {
+ }
+
+ ~Buffer() {
+ mTask.clear();
+ delete mBuffer;
+ }
+
+ unsigned int getSize() {
+ blockOnPrecache();
+ return mBuffer->getSize();
+ }
+
+ const VertexBuffer* getVertexBuffer() {
+ blockOnPrecache();
+ return mBuffer;
+ }
+
+private:
+ void blockOnPrecache() {
+ if (mTask != NULL) {
+ mBuffer = mTask->getResult();
+ LOG_ALWAYS_FATAL_IF(mBuffer == NULL, "Failed to precache");
+ mTask.clear();
+ }
+ }
+ sp<Task<VertexBuffer*> > mTask;
+ VertexBuffer* mBuffer;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Shadow tessellation task processing
+///////////////////////////////////////////////////////////////////////////////
+
+class ShadowTask : public Task<TessellationCache::vertexBuffer_pair_t*> {
+public:
+ ShadowTask(const Matrix4* drawTransform, const Rect& localClip, bool opaque,
+ const SkPath* casterPerimeter, const Matrix4* transformXY, const Matrix4* transformZ,
+ const Vector3& lightCenter, float lightRadius)
+ : drawTransform(*drawTransform)
+ , localClip(localClip)
+ , opaque(opaque)
+ , casterPerimeter(*casterPerimeter)
+ , transformXY(*transformXY)
+ , transformZ(*transformZ)
+ , lightCenter(lightCenter)
+ , lightRadius(lightRadius) {
+ }
+
+ ~ShadowTask() {
+ TessellationCache::vertexBuffer_pair_t* bufferPair = getResult();
+ delete bufferPair->getFirst();
+ delete bufferPair->getSecond();
+ delete bufferPair;
+ }
+
+ /* Note - we deep copy all task parameters, because *even though* pointers into Allocator
+ * controlled objects (like the SkPath and Matrix4s) should be safe for the entire frame,
+ * certain Allocators are destroyed before trim() is called to flush incomplete tasks.
+ *
+ * These deep copies could be avoided, long term, by cancelling or flushing outstanding tasks
+ * before tearning down single-frame LinearAllocators.
+ */
+ const Matrix4 drawTransform;
+ const Rect localClip;
+ bool opaque;
+ const SkPath casterPerimeter;
+ const Matrix4 transformXY;
+ const Matrix4 transformZ;
+ const Vector3 lightCenter;
+ const float lightRadius;
+};
+
+static void mapPointFakeZ(Vector3& point, const mat4* transformXY, const mat4* transformZ) {
+ // map z coordinate with true 3d matrix
+ point.z = transformZ->mapZ(point);
+
+ // map x,y coordinates with draw/Skia matrix
+ transformXY->mapPoint(point.x, point.y);
+}
+
+static void tessellateShadows(
+ const Matrix4* drawTransform, const Rect* localClip,
+ bool isCasterOpaque, const SkPath* casterPerimeter,
+ const Matrix4* casterTransformXY, const Matrix4* casterTransformZ,
+ const Vector3& lightCenter, float lightRadius,
+ VertexBuffer& ambientBuffer, VertexBuffer& spotBuffer) {
+
+ // tessellate caster outline into a 2d polygon
+ Vector<Vertex> casterVertices2d;
+ const float casterRefinementThresholdSquared = 20.0f; // TODO: experiment with this value
+ PathTessellator::approximatePathOutlineVertices(*casterPerimeter,
+ casterRefinementThresholdSquared, casterVertices2d);
+ if (!ShadowTessellator::isClockwisePath(*casterPerimeter)) {
+ ShadowTessellator::reverseVertexArray(casterVertices2d.editArray(),
+ casterVertices2d.size());
+ }
+
+ if (casterVertices2d.size() == 0) return;
+
+ // map 2d caster poly into 3d
+ const int casterVertexCount = casterVertices2d.size();
+ Vector3 casterPolygon[casterVertexCount];
+ float minZ = FLT_MAX;
+ float maxZ = -FLT_MAX;
+ for (int i = 0; i < casterVertexCount; i++) {
+ const Vertex& point2d = casterVertices2d[i];
+ casterPolygon[i] = Vector3(point2d.x, point2d.y, 0);
+ mapPointFakeZ(casterPolygon[i], casterTransformXY, casterTransformZ);
+ minZ = fmin(minZ, casterPolygon[i].z);
+ maxZ = fmax(maxZ, casterPolygon[i].z);
+ }
+
+ // map the centroid of the caster into 3d
+ Vector2 centroid = ShadowTessellator::centroid2d(
+ reinterpret_cast<const Vector2*>(casterVertices2d.array()),
+ casterVertexCount);
+ Vector3 centroid3d(centroid.x, centroid.y, 0);
+ mapPointFakeZ(centroid3d, casterTransformXY, casterTransformZ);
+
+ // if the caster intersects the z=0 plane, lift it in Z so it doesn't
+ if (minZ < SHADOW_MIN_CASTER_Z) {
+ float casterLift = SHADOW_MIN_CASTER_Z - minZ;
+ for (int i = 0; i < casterVertexCount; i++) {
+ casterPolygon[i].z += casterLift;
+ }
+ centroid3d.z += casterLift;
+ }
+
+ // Check whether we want to draw the shadow at all by checking the caster's bounds against clip.
+ // We only have ortho projection, so we can just ignore the Z in caster for
+ // simple rejection calculation.
+ Rect casterBounds(casterPerimeter->getBounds());
+ casterTransformXY->mapRect(casterBounds);
+
+ // actual tessellation of both shadows
+ ShadowTessellator::tessellateAmbientShadow(
+ isCasterOpaque, casterPolygon, casterVertexCount, centroid3d,
+ casterBounds, *localClip, maxZ, ambientBuffer);
+
+ ShadowTessellator::tessellateSpotShadow(
+ isCasterOpaque, casterPolygon, casterVertexCount,
+ *drawTransform, lightCenter, lightRadius, casterBounds, *localClip,
+ spotBuffer);
+
+ // TODO: set ambientBuffer & spotBuffer's bounds for correct layer damage
+}
+
+class ShadowProcessor : public TaskProcessor<TessellationCache::vertexBuffer_pair_t*> {
+public:
+ ShadowProcessor(Caches& caches)
+ : TaskProcessor<TessellationCache::vertexBuffer_pair_t*>(&caches.tasks) {}
+ ~ShadowProcessor() {}
+
+ virtual void onProcess(const sp<Task<TessellationCache::vertexBuffer_pair_t*> >& task) {
+ ShadowTask* t = static_cast<ShadowTask*>(task.get());
+ ATRACE_NAME("shadow tessellation");
+
+ VertexBuffer* ambientBuffer = new VertexBuffer;
+ VertexBuffer* spotBuffer = new VertexBuffer;
+ tessellateShadows(&t->drawTransform, &t->localClip, t->opaque, &t->casterPerimeter,
+ &t->transformXY, &t->transformZ, t->lightCenter, t->lightRadius,
+ *ambientBuffer, *spotBuffer);
+
+ t->setResult(new TessellationCache::vertexBuffer_pair_t(ambientBuffer, spotBuffer));
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Cache constructor/destructor
+///////////////////////////////////////////////////////////////////////////////
+
+TessellationCache::TessellationCache()
+ : mSize(0)
+ , mMaxSize(MB(DEFAULT_VERTEX_CACHE_SIZE))
+ , mCache(LruCache<Description, Buffer*>::kUnlimitedCapacity)
+ , mShadowCache(LruCache<ShadowDescription, Task<vertexBuffer_pair_t*>*>::kUnlimitedCapacity) {
+ char property[PROPERTY_VALUE_MAX];
+ if (property_get(PROPERTY_VERTEX_CACHE_SIZE, property, NULL) > 0) {
+ INIT_LOGD(" Setting %s cache size to %sMB", name, property);
+ setMaxSize(MB(atof(property)));
+ } else {
+ INIT_LOGD(" Using default %s cache size of %.2fMB", name, DEFAULT_VERTEX_CACHE_SIZE);
+ }
+
+ mCache.setOnEntryRemovedListener(&mBufferRemovedListener);
+ mShadowCache.setOnEntryRemovedListener(&mBufferPairRemovedListener);
+ mDebugEnabled = readDebugLevel() & kDebugCaches;
+}
+
+TessellationCache::~TessellationCache() {
+ mCache.clear();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Size management
+///////////////////////////////////////////////////////////////////////////////
+
+uint32_t TessellationCache::getSize() {
+ LruCache<Description, Buffer*>::Iterator iter(mCache);
+ uint32_t size = 0;
+ while (iter.next()) {
+ size += iter.value()->getSize();
+ }
+ return size;
+}
+
+uint32_t TessellationCache::getMaxSize() {
+ return mMaxSize;
+}
+
+void TessellationCache::setMaxSize(uint32_t maxSize) {
+ mMaxSize = maxSize;
+ while (mSize > mMaxSize) {
+ mCache.removeOldest();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Caching
+///////////////////////////////////////////////////////////////////////////////
+
+
+void TessellationCache::trim() {
+ uint32_t size = getSize();
+ while (size > mMaxSize) {
+ size -= mCache.peekOldestValue()->getSize();
+ mCache.removeOldest();
+ }
+ mShadowCache.clear();
+}
+
+void TessellationCache::clear() {
+ mCache.clear();
+ mShadowCache.clear();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Callbacks
+///////////////////////////////////////////////////////////////////////////////
+
+void TessellationCache::BufferRemovedListener::operator()(Description& description,
+ Buffer*& buffer) {
+ delete buffer;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Shadows
+///////////////////////////////////////////////////////////////////////////////
+
+void TessellationCache::precacheShadows(const Matrix4* drawTransform, const Rect& localClip,
+ bool opaque, const SkPath* casterPerimeter,
+ const Matrix4* transformXY, const Matrix4* transformZ,
+ const Vector3& lightCenter, float lightRadius) {
+ ShadowDescription key(casterPerimeter, drawTransform);
+
+ sp<ShadowTask> task = new ShadowTask(drawTransform, localClip, opaque,
+ casterPerimeter, transformXY, transformZ, lightCenter, lightRadius);
+ if (mShadowProcessor == NULL) {
+ mShadowProcessor = new ShadowProcessor(Caches::getInstance());
+ }
+ mShadowProcessor->add(task);
+
+ task->incStrong(NULL); // not using sp<>s, so manually ref while in the cache
+ mShadowCache.put(key, task.get());
+}
+
+void TessellationCache::getShadowBuffers(const Matrix4* drawTransform, const Rect& localClip,
+ bool opaque, const SkPath* casterPerimeter,
+ const Matrix4* transformXY, const Matrix4* transformZ,
+ const Vector3& lightCenter, float lightRadius, vertexBuffer_pair_t& outBuffers) {
+ ShadowDescription key(casterPerimeter, drawTransform);
+ ShadowTask* task = static_cast<ShadowTask*>(mShadowCache.get(key));
+ if (!task) {
+ precacheShadows(drawTransform, localClip, opaque, casterPerimeter,
+ transformXY, transformZ, lightCenter, lightRadius);
+ task = static_cast<ShadowTask*>(mShadowCache.get(key));
+ }
+ LOG_ALWAYS_FATAL_IF(task == NULL, "shadow not precached");
+ outBuffers = *(task->getResult());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Tessellation precaching
+///////////////////////////////////////////////////////////////////////////////
+
+static VertexBuffer* tessellatePath(const SkPath& path, const SkPaint* paint,
+ float scaleX, float scaleY) {
+ VertexBuffer* buffer = new VertexBuffer();
+ Matrix4 matrix;
+ matrix.loadScale(scaleX, scaleY, 1);
+ PathTessellator::tessellatePath(path, paint, matrix, *buffer);
+ return buffer;
+}
+
+TessellationCache::Buffer* TessellationCache::getOrCreateBuffer(
+ const Description& entry, Tessellator tessellator, const SkPaint* paint) {
+ Buffer* buffer = mCache.get(entry);
+ if (!buffer) {
+ // not cached, enqueue a task to fill the buffer
+ sp<TessellationTask> task = new TessellationTask(tessellator, entry, paint);
+ buffer = new Buffer(task);
+
+ if (mProcessor == NULL) {
+ mProcessor = new TessellationProcessor(Caches::getInstance());
+ }
+ mProcessor->add(task);
+ mCache.put(entry, buffer);
+ }
+ return buffer;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Rounded rects
+///////////////////////////////////////////////////////////////////////////////
+
+static VertexBuffer* tessellateRoundRect(const TessellationCache::Description& description,
+ const SkPaint& paint) {
+ SkRect rect = SkRect::MakeWH(description.shape.roundRect.mWidth,
+ description.shape.roundRect.mHeight);
+ float rx = description.shape.roundRect.mRx;
+ float ry = description.shape.roundRect.mRy;
+ if (paint.getStyle() == SkPaint::kStrokeAndFill_Style) {
+ float outset = paint.getStrokeWidth() / 2;
+ rect.outset(outset, outset);
+ rx += outset;
+ ry += outset;
+ }
+ SkPath path;
+ path.addRoundRect(rect, rx, ry);
+ return tessellatePath(path, &paint,
+ description.shape.roundRect.mScaleX, description.shape.roundRect.mScaleY);
+}
+
+TessellationCache::Buffer* TessellationCache::getRoundRectBuffer(const Matrix4& transform,
+ float width, float height, float rx, float ry, const SkPaint* paint) {
+ Description entry(Description::kRoundRect, paint);
+ entry.shape.roundRect.mWidth = width;
+ entry.shape.roundRect.mHeight = height;
+ entry.shape.roundRect.mRx = rx;
+ entry.shape.roundRect.mRy = ry;
+ PathTessellator::extractTessellationScales(transform,
+ &entry.shape.roundRect.mScaleX, &entry.shape.roundRect.mScaleY);
+
+ return getOrCreateBuffer(entry, &tessellateRoundRect, paint);
+}
+const VertexBuffer* TessellationCache::getRoundRect(const Matrix4& transform,
+ float width, float height, float rx, float ry, const SkPaint* paint) {
+ return getRoundRectBuffer(transform, width, height, rx, ry, paint)->getVertexBuffer();
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/TessellationCache.h b/libs/hwui/TessellationCache.h
new file mode 100644
index 000000000000..8f37230d7eaf
--- /dev/null
+++ b/libs/hwui/TessellationCache.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_HWUI_TESSELLATION_CACHE_H
+#define ANDROID_HWUI_TESSELLATION_CACHE_H
+
+#include <utils/LruCache.h>
+#include <utils/Mutex.h>
+#include <utils/Vector.h>
+
+#include "Debug.h"
+#include "utils/Macros.h"
+#include "utils/Pair.h"
+#include "VertexBuffer.h"
+
+class SkBitmap;
+class SkCanvas;
+class SkPaint;
+class SkPath;
+struct SkRect;
+
+namespace android {
+namespace uirenderer {
+
+class Caches;
+
+///////////////////////////////////////////////////////////////////////////////
+// Classes
+///////////////////////////////////////////////////////////////////////////////
+
+class TessellationCache {
+public:
+ typedef Pair<VertexBuffer*, VertexBuffer*> vertexBuffer_pair_t;
+
+ struct Description {
+ DESCRIPTION_TYPE(Description);
+ enum Type {
+ kNone,
+ kRoundRect,
+ kAmbientShadow,
+ kSpotShadow
+ };
+
+ Type type;
+ SkPaint::Cap cap;
+ SkPaint::Style style;
+ float strokeWidth;
+ union Shape {
+ struct RoundRect {
+ float mScaleX;
+ float mScaleY;
+ float mWidth;
+ float mHeight;
+ float mRx;
+ float mRy;
+ } roundRect;
+ } shape;
+
+ Description();
+ Description(Type type);
+ Description(Type type, const SkPaint* paint);
+ hash_t hash() const;
+ };
+
+ struct ShadowDescription {
+ DESCRIPTION_TYPE(ShadowDescription);
+ const void* nodeKey;
+ float matrixData[16];
+
+ ShadowDescription();
+ ShadowDescription(const void* nodeKey, const Matrix4* drawTransform);
+ hash_t hash() const;
+ };
+
+ TessellationCache();
+ ~TessellationCache();
+
+ /**
+ * Clears the cache. This causes all TessellationBuffers to be deleted.
+ */
+ void clear();
+
+ /**
+ * Sets the maximum size of the cache in bytes.
+ */
+ void setMaxSize(uint32_t maxSize);
+ /**
+ * Returns the maximum size of the cache in bytes.
+ */
+ uint32_t getMaxSize();
+ /**
+ * Returns the current size of the cache in bytes.
+ */
+ uint32_t getSize();
+
+ /**
+ * Trims the contents of the cache, removing items until it's under its
+ * specified limit.
+ *
+ * Trimming is used for caches that support pre-caching from a worker
+ * thread. During pre-caching the maximum limit of the cache can be
+ * exceeded for the duration of the frame. It is therefore required to
+ * trim the cache at the end of the frame to keep the total amount of
+ * memory used under control.
+ *
+ * Also removes transient Shadow VertexBuffers, which aren't cached between frames.
+ */
+ void trim();
+
+ // TODO: precache/get for Oval, Lines, Points, etc.
+
+ void precacheRoundRect(const Matrix4& transform,
+ float width, float height, float rx, float ry, const SkPaint* paint) {
+ getRoundRectBuffer(transform, width, height, rx, ry, paint);
+ }
+ const VertexBuffer* getRoundRect(const Matrix4& transform,
+ float width, float height, float rx, float ry, const SkPaint* paint);
+
+ void precacheShadows(const Matrix4* drawTransform, const Rect& localClip,
+ bool opaque, const SkPath* casterPerimeter,
+ const Matrix4* transformXY, const Matrix4* transformZ,
+ const Vector3& lightCenter, float lightRadius);
+
+ void getShadowBuffers(const Matrix4* drawTransform, const Rect& localClip,
+ bool opaque, const SkPath* casterPerimeter,
+ const Matrix4* transformXY, const Matrix4* transformZ,
+ const Vector3& lightCenter, float lightRadius,
+ vertexBuffer_pair_t& outBuffers);
+
+private:
+ class Buffer;
+ class TessellationTask;
+ class TessellationProcessor;
+
+
+ typedef VertexBuffer* (*Tessellator)(const Description&, const SkPaint&);
+
+ Buffer* getRoundRectBuffer(const Matrix4& transform,
+ float width, float height, float rx, float ry, const SkPaint* paint);
+
+ Buffer* getOrCreateBuffer(const Description& entry,
+ Tessellator tessellator, const SkPaint* paint);
+
+ uint32_t mSize;
+ uint32_t mMaxSize;
+
+ bool mDebugEnabled;
+
+ mutable Mutex mLock;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // General tessellation caching
+ ///////////////////////////////////////////////////////////////////////////////
+ sp<TaskProcessor<VertexBuffer*> > mProcessor;
+ LruCache<Description, Buffer*> mCache;
+ class BufferRemovedListener : public OnEntryRemoved<Description, Buffer*> {
+ void operator()(Description& description, Buffer*& buffer);
+ };
+ BufferRemovedListener mBufferRemovedListener;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Shadow tessellation caching
+ ///////////////////////////////////////////////////////////////////////////////
+ sp<TaskProcessor<vertexBuffer_pair_t*> > mShadowProcessor;
+
+ // holds a pointer, and implicit strong ref to each shadow task of the frame
+ LruCache<ShadowDescription, Task<vertexBuffer_pair_t*>*> mShadowCache;
+ class BufferPairRemovedListener : public OnEntryRemoved<ShadowDescription, Task<vertexBuffer_pair_t*>*> {
+ void operator()(ShadowDescription& description, Task<vertexBuffer_pair_t*>*& bufferPairTask) {
+ bufferPairTask->decStrong(NULL);
+ }
+ };
+ BufferPairRemovedListener mBufferPairRemovedListener;
+
+}; // class TessellationCache
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_PATH_CACHE_H
diff --git a/libs/hwui/VertexBuffer.h b/libs/hwui/VertexBuffer.h
index 8b6872e93c67..55d566bfd938 100644
--- a/libs/hwui/VertexBuffer.h
+++ b/libs/hwui/VertexBuffer.h
@@ -23,10 +23,18 @@ namespace uirenderer {
class VertexBuffer {
public:
- VertexBuffer():
- mBuffer(0),
- mVertexCount(0),
- mCleanupMethod(NULL)
+ enum Mode {
+ kStandard = 0,
+ kOnePolyRingShadow = 1,
+ kTwoPolyRingShadow = 2
+ };
+
+ VertexBuffer()
+ : mBuffer(0)
+ , mVertexCount(0)
+ , mByteCount(0)
+ , mMode(kStandard)
+ , mCleanupMethod(NULL)
{}
~VertexBuffer() {
@@ -37,7 +45,7 @@ public:
This should be the only method used by the Tessellator. Subsequent calls to
alloc will allocate space within the first allocation (useful if you want to
eventually allocate multiple regions within a single VertexBuffer, such as
- with PathTessellator::tesselateLines())
+ with PathTessellator::tessellateLines())
*/
template <class TYPE>
TYPE* alloc(int vertexCount) {
@@ -52,6 +60,7 @@ public:
return reallocBuffer;
}
mVertexCount = vertexCount;
+ mByteCount = mVertexCount * sizeof(TYPE);
mReallocBuffer = mBuffer = (void*)new TYPE[vertexCount];
mCleanupMethod = &(cleanup<TYPE>);
@@ -71,7 +80,13 @@ public:
}
const void* getBuffer() const { return mBuffer; }
+ const Rect& getBounds() const { return mBounds; }
unsigned int getVertexCount() const { return mVertexCount; }
+ unsigned int getSize() const { return mByteCount; }
+ Mode getMode() const { return mMode; }
+
+ void setBounds(Rect bounds) { mBounds = bounds; }
+ void setMode(Mode mode) { mMode = mode; }
template <class TYPE>
void createDegenerateSeparators(int allocSize) {
@@ -88,8 +103,11 @@ private:
delete[] (TYPE*)buffer;
}
+ Rect mBounds;
void* mBuffer;
unsigned int mVertexCount;
+ unsigned int mByteCount;
+ Mode mMode;
void* mReallocBuffer; // used for multi-allocation
diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp
index 189895c705a6..3d2b0d948c13 100644
--- a/libs/hwui/thread/TaskManager.cpp
+++ b/libs/hwui/thread/TaskManager.cpp
@@ -16,9 +16,10 @@
#include <sys/sysinfo.h>
+#include "TaskManager.h"
#include "Task.h"
#include "TaskProcessor.h"
-#include "TaskManager.h"
+#include "utils/MathUtils.h"
namespace android {
namespace uirenderer {
@@ -31,7 +32,8 @@ TaskManager::TaskManager() {
// Get the number of available CPUs. This value does not change over time.
int cpuCount = sysconf(_SC_NPROCESSORS_CONF);
- for (int i = 0; i < cpuCount / 2; i++) {
+ int workerCount = MathUtils::max(1, cpuCount / 2);
+ for (int i = 0; i < workerCount; i++) {
String8 name;
name.appendFormat("hwuiTask%d", i + 1);
mThreads.add(new WorkerThread(name));
diff --git a/libs/hwui/utils/Macros.h b/libs/hwui/utils/Macros.h
index 14a3ec01b9ac..5b7c87ceef8f 100644
--- a/libs/hwui/utils/Macros.h
+++ b/libs/hwui/utils/Macros.h
@@ -21,5 +21,12 @@
Type(const Type&); \
void operator=(const Type&)
+#define DESCRIPTION_TYPE(Type) \
+ int compare(const Type& rhs) const { return memcmp(this, &rhs, sizeof(Type));} \
+ bool operator==(const Type& other) const { return compare(other) == 0; } \
+ bool operator!=(const Type& other) const { return compare(other) != 0; } \
+ friend inline int strictly_order_type(const Type& lhs, const Type& rhs) { return lhs.compare(rhs) < 0; } \
+ friend inline int compare_type(const Type& lhs, const Type& rhs) { return lhs.compare(rhs); } \
+ friend inline hash_t hash_type(const Type& entry) { return entry.hash(); }
#endif /* MACROS_H */
diff --git a/libs/hwui/utils/MathUtils.h b/libs/hwui/utils/MathUtils.h
index 997acde2e606..65f16636794c 100644
--- a/libs/hwui/utils/MathUtils.h
+++ b/libs/hwui/utils/MathUtils.h
@@ -38,6 +38,10 @@ public:
return isZero(valueA - valueB);
}
+ inline static int max(int a, int b) {
+ return a > b ? a : b;
+ }
+
inline static int min(int a, int b) {
return a < b ? a : b;
}
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index a4d491d86b68..1da02156d804 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -28,6 +28,8 @@ import android.graphics.drawable.Drawable;
import android.hardware.display.DisplayManager;
import android.hardware.display.WifiDisplay;
import android.hardware.display.WifiDisplayStatus;
+import android.media.session.MediaSession;
+import android.media.session.RemoteVolumeProvider;
import android.os.Handler;
import android.os.IBinder;
import android.os.Process;
@@ -58,6 +60,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
public class MediaRouter {
private static final String TAG = "MediaRouter";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ private static final boolean USE_SESSIONS = true;
static class Static implements DisplayManager.DisplayListener {
final Context mAppContext;
@@ -1141,7 +1144,7 @@ public class MediaRouter {
public RouteCategory createRouteCategory(CharSequence name, boolean isGroupable) {
return new RouteCategory(name, ROUTE_TYPE_USER, isGroupable);
}
-
+
/**
* Create a new route category. Each route must belong to a category.
*
@@ -1980,6 +1983,7 @@ public class MediaRouter {
*/
public static class UserRouteInfo extends RouteInfo {
RemoteControlClient mRcc;
+ SessionVolumeProvider mSvp;
UserRouteInfo(RouteCategory category) {
super(category);
@@ -1996,7 +2000,7 @@ public class MediaRouter {
mName = name;
routeUpdated();
}
-
+
/**
* Set the user-visible name of this route.
* <p>
@@ -2100,7 +2104,11 @@ public class MediaRouter {
public void setPlaybackType(int type) {
if (mPlaybackType != type) {
mPlaybackType = type;
- setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE, type);
+ if (USE_SESSIONS) {
+ configureSessionVolume();
+ } else {
+ setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE, type);
+ }
}
}
@@ -2113,8 +2121,12 @@ public class MediaRouter {
public void setVolumeHandling(int volumeHandling) {
if (mVolumeHandling != volumeHandling) {
mVolumeHandling = volumeHandling;
- setPlaybackInfoOnRcc(
- RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING, volumeHandling);
+ if (USE_SESSIONS) {
+ configureSessionVolume();
+ } else {
+ setPlaybackInfoOnRcc(
+ RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING, volumeHandling);
+ }
}
}
@@ -2127,7 +2139,13 @@ public class MediaRouter {
volume = Math.max(0, Math.min(volume, getVolumeMax()));
if (mVolume != volume) {
mVolume = volume;
- setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_VOLUME, volume);
+ if (USE_SESSIONS) {
+ if (mSvp != null) {
+ mSvp.notifyVolumeChanged();
+ }
+ } else {
+ setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_VOLUME, volume);
+ }
dispatchRouteVolumeChanged(this);
if (mGroup != null) {
mGroup.memberVolumeChanged(this);
@@ -2166,7 +2184,11 @@ public class MediaRouter {
public void setVolumeMax(int volumeMax) {
if (mVolumeMax != volumeMax) {
mVolumeMax = volumeMax;
- setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_VOLUME_MAX, volumeMax);
+ if (USE_SESSIONS) {
+ configureSessionVolume();
+ } else {
+ setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_VOLUME_MAX, volumeMax);
+ }
}
}
@@ -2177,29 +2199,76 @@ public class MediaRouter {
public void setPlaybackStream(int stream) {
if (mPlaybackStream != stream) {
mPlaybackStream = stream;
- setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_USES_STREAM, stream);
+ if (USE_SESSIONS) {
+ configureSessionVolume();
+ } else {
+ setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_USES_STREAM, stream);
+ }
}
}
private void updatePlaybackInfoOnRcc() {
- if ((mRcc != null) && (mRcc.getRcseId() != RemoteControlClient.RCSE_ID_UNREGISTERED)) {
- mRcc.setPlaybackInformation(
- RemoteControlClient.PLAYBACKINFO_VOLUME_MAX, mVolumeMax);
- mRcc.setPlaybackInformation(
- RemoteControlClient.PLAYBACKINFO_VOLUME, mVolume);
- mRcc.setPlaybackInformation(
- RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING, mVolumeHandling);
- mRcc.setPlaybackInformation(
- RemoteControlClient.PLAYBACKINFO_USES_STREAM, mPlaybackStream);
- mRcc.setPlaybackInformation(
- RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE, mPlaybackType);
- // let AudioService know whom to call when remote volume needs to be updated
- try {
- sStatic.mAudioService.registerRemoteVolumeObserverForRcc(
- mRcc.getRcseId() /* rccId */, mRemoteVolObserver /* rvo */);
- } catch (RemoteException e) {
- Log.e(TAG, "Error registering remote volume observer", e);
+ if (USE_SESSIONS) {
+ configureSessionVolume();
+ } else {
+ if ((mRcc != null)
+ && (mRcc.getRcseId() != RemoteControlClient.RCSE_ID_UNREGISTERED)) {
+ mRcc.setPlaybackInformation(
+ RemoteControlClient.PLAYBACKINFO_VOLUME_MAX, mVolumeMax);
+ mRcc.setPlaybackInformation(
+ RemoteControlClient.PLAYBACKINFO_VOLUME, mVolume);
+ mRcc.setPlaybackInformation(
+ RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING, mVolumeHandling);
+ mRcc.setPlaybackInformation(
+ RemoteControlClient.PLAYBACKINFO_USES_STREAM, mPlaybackStream);
+ mRcc.setPlaybackInformation(
+ RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE, mPlaybackType);
+ // let AudioService know whom to call when remote volume
+ // needs to be updated
+ try {
+ sStatic.mAudioService.registerRemoteVolumeObserverForRcc(
+ mRcc.getRcseId() /* rccId */, mRemoteVolObserver /* rvo */);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error registering remote volume observer", e);
+ }
+ }
+ }
+ }
+
+ private void configureSessionVolume() {
+ if (mRcc == null) {
+ if (DEBUG) {
+ Log.d(TAG, "No Rcc to configure volume for route " + mName);
+ }
+ return;
+ }
+ MediaSession session = mRcc.getMediaSession();
+ if (session == null) {
+ if (DEBUG) {
+ Log.d(TAG, "Rcc has no session to configure volume");
+ }
+ return;
+ }
+ if (mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE) {
+ int volumeControl = RemoteVolumeProvider.VOLUME_CONTROL_FIXED;
+ switch (mVolumeHandling) {
+ case RemoteControlClient.PLAYBACK_VOLUME_VARIABLE:
+ volumeControl = RemoteVolumeProvider.VOLUME_CONTROL_ABSOLUTE;
+ break;
+ case RemoteControlClient.PLAYBACK_VOLUME_FIXED:
+ default:
+ break;
}
+ // Only register a new listener if necessary
+ if (mSvp == null || mSvp.getVolumeControl() != volumeControl
+ || mSvp.getMaxVolume() != mVolumeMax) {
+ mSvp = new SessionVolumeProvider(volumeControl, mVolumeMax);
+ session.setPlaybackToRemote(mSvp);
+ }
+ } else {
+ // We only know how to handle local and remote, fall back to local if not remote.
+ session.setPlaybackToLocal(mPlaybackStream);
+ mSvp = null;
}
}
@@ -2208,6 +2277,42 @@ public class MediaRouter {
mRcc.setPlaybackInformation(what, value);
}
}
+
+ class SessionVolumeProvider extends RemoteVolumeProvider {
+
+ public SessionVolumeProvider(int volumeControl, int maxVolume) {
+ super(volumeControl, maxVolume);
+ }
+
+ @Override
+ public int onGetCurrentVolume() {
+ return mVcb == null ? 0 : mVcb.route.mVolume;
+ }
+
+ @Override
+ public void onSetVolumeTo(final int volume) {
+ sStatic.mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (mVcb != null) {
+ mVcb.vcb.onVolumeSetRequest(mVcb.route, volume);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onAdjustVolumeBy(final int delta) {
+ sStatic.mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (mVcb != null) {
+ mVcb.vcb.onVolumeUpdateRequest(mVcb.route, delta);
+ }
+ }
+ });
+ }
+ }
}
/**
@@ -2504,17 +2609,17 @@ public class MediaRouter {
public CharSequence getName() {
return getName(sStatic.mResources);
}
-
+
/**
* Return the properly localized/configuration dependent name of this RouteCategory.
- *
+ *
* @param context Context to resolve name resources
* @return the name of this route category
*/
public CharSequence getName(Context context) {
return getName(context.getResources());
}
-
+
CharSequence getName(Resources res) {
if (mNameResId != 0) {
return res.getText(mNameResId);
diff --git a/core/java/android/hardware/hdmi/IHdmiCecListener.aidl b/media/java/android/media/session/IActiveSessionsListener.aidl
index d281ce6f4702..e5e24bc9f805 100644
--- a/core/java/android/hardware/hdmi/IHdmiCecListener.aidl
+++ b/media/java/android/media/session/IActiveSessionsListener.aidl
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
+/* Copyright (C) 2014 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.
@@ -14,16 +13,14 @@
* limitations under the License.
*/
-package android.hardware.hdmi;
+package android.media.session;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.media.session.MediaSessionToken;
/**
- * Interface definition for HdmiCecService to do interprocess communcation.
- *
+ * Listens for changes to the list of active sessions.
* @hide
*/
-oneway interface IHdmiCecListener {
- void onMessageReceived(in HdmiCecMessage message);
- void onCableStatusChanged(in boolean connected);
-}
+oneway interface IActiveSessionsListener {
+ void onActiveSessionsChanged(in List<MediaSessionToken> sessions);
+} \ No newline at end of file
diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl
index 9ce06924c261..7c039079796a 100644
--- a/media/java/android/media/session/ISessionController.aidl
+++ b/media/java/android/media/session/ISessionController.aidl
@@ -19,6 +19,7 @@ import android.content.Intent;
import android.media.MediaMetadata;
import android.media.Rating;
import android.media.session.ISessionControllerCallback;
+import android.media.session.MediaSessionInfo;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.os.ResultReceiver;
@@ -35,6 +36,7 @@ interface ISessionController {
void unregisterCallbackListener(in ISessionControllerCallback cb);
boolean isTransportControlEnabled();
void showRoutePicker();
+ MediaSessionInfo getSessionInfo();
// These commands are for the TransportController
void play();
diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl
index 6d9888f09c14..bd1fa851fcc2 100644
--- a/media/java/android/media/session/ISessionManager.aidl
+++ b/media/java/android/media/session/ISessionManager.aidl
@@ -16,6 +16,7 @@
package android.media.session;
import android.content.ComponentName;
+import android.media.session.IActiveSessionsListener;
import android.media.session.ISession;
import android.media.session.ISessionCallback;
import android.os.Bundle;
@@ -30,4 +31,7 @@ interface ISessionManager {
List<IBinder> getSessions(in ComponentName compName, int userId);
void dispatchMediaKeyEvent(in KeyEvent keyEvent, boolean needWakeLock);
void dispatchAdjustVolumeBy(int suggestedStream, int delta, int flags);
+ void addSessionsListener(in IActiveSessionsListener listener, in ComponentName compName,
+ int userId);
+ void removeSessionsListener(in IActiveSessionsListener listener);
} \ No newline at end of file
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index caff1ad3e274..57a0a540c781 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -246,6 +246,21 @@ public final class MediaController {
}
}
+ /**
+ * Get the info for the session this controller is connected to.
+ *
+ * @return The session info for the connected session.
+ * @hide
+ */
+ public MediaSessionInfo getSessionInfo() {
+ try {
+ return mSessionBinder.getSessionInfo();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in getSessionInfo.", e);
+ }
+ return null;
+ }
+
/*
* @hide
*/
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index 7972639a97bf..4ba1351749a6 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -277,6 +277,7 @@ public final class MediaSession {
throw new IllegalArgumentException("volumeProvider may not be null!");
}
mVolumeProvider = volumeProvider;
+ volumeProvider.setSession(this);
try {
mBinder.configureVolumeHandling(VOLUME_TYPE_REMOTE, volumeProvider.getVolumeControl(),
@@ -522,6 +523,24 @@ public final class MediaSession {
}
}
+ /**
+ * Notify the system that the remove volume changed.
+ *
+ * @param provider The provider that is handling volume changes.
+ * @hide
+ */
+ void notifyRemoteVolumeChanged(RemoteVolumeProvider provider) {
+ if (provider == null || provider != mVolumeProvider) {
+ Log.w(TAG, "Received update from stale volume provider");
+ return;
+ }
+ try {
+ mBinder.setCurrentVolume(provider.onGetCurrentVolume());
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in notifyVolumeChanged", e);
+ }
+ }
+
private void dispatchPlay() {
postToTransportCallbacks(TransportMessageHandler.MSG_PLAY);
}
@@ -963,27 +982,26 @@ public final class MediaSession {
@Override
public void onRouteStateChange(int state) throws RemoteException {
// TODO
-
}
- /*
- * (non-Javadoc)
- * @see android.media.session.ISessionCallback#onAdjustVolumeBy(int)
- */
@Override
public void onAdjustVolumeBy(int delta) throws RemoteException {
- // TODO(epastern): Auto-generated method stub
-
+ MediaSession session = mMediaSession.get();
+ if (session != null) {
+ if (session.mVolumeProvider != null) {
+ session.mVolumeProvider.onAdjustVolumeBy(delta);
+ }
+ }
}
- /*
- * (non-Javadoc)
- * @see android.media.session.ISessionCallback#onSetVolumeTo(int)
- */
@Override
public void onSetVolumeTo(int value) throws RemoteException {
- // TODO(epastern): Auto-generated method stub
-
+ MediaSession session = mMediaSession.get();
+ if (session != null) {
+ if (session.mVolumeProvider != null) {
+ session.mVolumeProvider.onSetVolumeTo(value);
+ }
+ }
}
}
diff --git a/media/java/android/media/session/MediaSessionInfo.aidl b/media/java/android/media/session/MediaSessionInfo.aidl
new file mode 100644
index 000000000000..63dca9a102b0
--- /dev/null
+++ b/media/java/android/media/session/MediaSessionInfo.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.media.session;
+
+parcelable MediaSessionInfo;
diff --git a/media/java/android/media/session/MediaSessionInfo.java b/media/java/android/media/session/MediaSessionInfo.java
index f7012119369c..4dc1c09b6aee 100644
--- a/media/java/android/media/session/MediaSessionInfo.java
+++ b/media/java/android/media/session/MediaSessionInfo.java
@@ -26,18 +26,21 @@ import android.os.Parcelable;
public final class MediaSessionInfo implements Parcelable {
private final String mId;
private final String mPackageName;
+ private final int mPid;
/**
* @hide
*/
- public MediaSessionInfo(String id, String packageName) {
+ public MediaSessionInfo(String id, String packageName, int pid) {
mId = id;
mPackageName = packageName;
+ mPid = pid;
}
private MediaSessionInfo(Parcel in) {
mId = in.readString();
mPackageName = in.readString();
+ mPid = in.readInt();
}
/**
@@ -58,9 +61,13 @@ public final class MediaSessionInfo implements Parcelable {
return mId;
}
+ public int getPid() {
+ return mPid;
+ }
+
@Override
public String toString() {
- return "SessionInfo {id=" + mId + ", pkg=" + mPackageName + "}";
+ return "SessionInfo {id=" + mId + ", pkg=" + mPackageName + ", pid=" + mPid + "}";
}
@Override
@@ -72,6 +79,7 @@ public final class MediaSessionInfo implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mId);
dest.writeString(mPackageName);
+ dest.writeInt(mPid);
}
public static final Parcelable.Creator<MediaSessionInfo> CREATOR
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index 9e8b0d36b5b2..291bfc8f9de3 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -142,6 +142,50 @@ public final class MediaSessionManager {
}
/**
+ * Add a listener to be notified when the list of active sessions
+ * changes.This requires the
+ * android.Manifest.permission.MEDIA_CONTENT_CONTROL permission be held by
+ * the calling app. You may also retrieve this list if your app is an
+ * enabled notification listener using the
+ * {@link NotificationListenerService} APIs, in which case you must pass the
+ * {@link ComponentName} of your enabled listener.
+ *
+ * @param sessionListener The listener to add.
+ * @param notificationListener The enabled notification listener component.
+ * May be null.
+ * @param userId The userId to listen for changes on.
+ * @hide
+ */
+ public void addActiveSessionsListener(SessionListener sessionListener,
+ ComponentName notificationListener, int userId) {
+ if (sessionListener == null) {
+ throw new IllegalArgumentException("listener may not be null");
+ }
+ try {
+ mService.addSessionsListener(sessionListener.mStub, notificationListener, userId);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in addActiveSessionsListener.", e);
+ }
+ }
+
+ /**
+ * Stop receiving active sessions updates on the specified listener.
+ *
+ * @param listener The listener to remove.
+ * @hide
+ */
+ public void removeActiveSessionsListener(SessionListener listener) {
+ if (listener == null) {
+ throw new IllegalArgumentException("listener may not be null");
+ }
+ try {
+ mService.removeSessionsListener(listener.mStub);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in removeActiveSessionsListener.", e);
+ }
+ }
+
+ /**
* Send a media key event. The receiver will be selected automatically.
*
* @param keyEvent The KeyEvent to send.
@@ -184,4 +228,35 @@ public final class MediaSessionManager {
Log.e(TAG, "Failed to send adjust volume.", e);
}
}
+
+ /**
+ * Listens for changes to the list of active sessions. This can be added
+ * using {@link #addActiveSessionsListener}.
+ *
+ * @hide
+ */
+ public static abstract class SessionListener {
+ /**
+ * Called when the list of active sessions has changed. This can be due
+ * to a session being added or removed or the order of sessions
+ * changing.
+ *
+ * @param controllers The updated list of controllers for the user that
+ * changed.
+ */
+ public abstract void onActiveSessionsChanged(List<MediaController> controllers);
+
+ private final IActiveSessionsListener.Stub mStub = new IActiveSessionsListener.Stub() {
+ @Override
+ public void onActiveSessionsChanged(List<MediaSessionToken> tokens)
+ throws RemoteException {
+ ArrayList<MediaController> controllers = new ArrayList<MediaController>();
+ int size = tokens.size();
+ for (int i = 0; i < size; i++) {
+ controllers.add(MediaController.fromToken(tokens.get(i)));
+ }
+ SessionListener.this.onActiveSessionsChanged(controllers);
+ }
+ };
+ }
}
diff --git a/media/java/android/media/session/MediaSessionToken.java b/media/java/android/media/session/MediaSessionToken.java
index 86f566203c6d..e5991894728b 100644
--- a/media/java/android/media/session/MediaSessionToken.java
+++ b/media/java/android/media/session/MediaSessionToken.java
@@ -31,7 +31,7 @@ public final class MediaSessionToken implements Parcelable {
/**
* @hide
*/
- MediaSessionToken(ISessionController binder) {
+ public MediaSessionToken(ISessionController binder) {
mBinder = binder;
}
diff --git a/media/java/android/media/session/RemoteVolumeProvider.java b/media/java/android/media/session/RemoteVolumeProvider.java
index 47f672f37da8..606b1d796ec9 100644
--- a/media/java/android/media/session/RemoteVolumeProvider.java
+++ b/media/java/android/media/session/RemoteVolumeProvider.java
@@ -15,6 +15,9 @@
*/
package android.media.session;
+import android.os.RemoteException;
+import android.util.Log;
+
/**
* Handles requests to adjust or set the volume on a session. This is also used
* to push volume updates back to the session after a request has been handled.
@@ -22,6 +25,7 @@ package android.media.session;
* {@link MediaSession#setPlaybackToRemote}.
*/
public abstract class RemoteVolumeProvider {
+ private static final String TAG = "RemoteVolumeProvider";
/**
* The volume is fixed and can not be modified. Requests to change volume
@@ -46,6 +50,8 @@ public abstract class RemoteVolumeProvider {
private final int mControlType;
private final int mMaxVolume;
+ private MediaSession mSession;
+
/**
* Create a new volume provider for handling volume events. You must specify
* the type of volume control and the maximum volume that can be used.
@@ -88,7 +94,7 @@ public abstract class RemoteVolumeProvider {
* Notify the system that the remote playback's volume has been changed.
*/
public final void notifyVolumeChanged() {
- // TODO
+ mSession.notifyRemoteVolumeChanged(this);
}
/**
@@ -107,4 +113,11 @@ public abstract class RemoteVolumeProvider {
*/
public void onAdjustVolumeBy(int delta) {
}
+
+ /**
+ * @hide
+ */
+ void setSession(MediaSession session) {
+ mSession = session;
+ }
} \ No newline at end of file
diff --git a/media/java/android/media/tv/ITvInputSessionWrapper.java b/media/java/android/media/tv/ITvInputSessionWrapper.java
index 975e3917037b..d20ee0e00491 100644
--- a/media/java/android/media/tv/ITvInputSessionWrapper.java
+++ b/media/java/android/media/tv/ITvInputSessionWrapper.java
@@ -18,8 +18,6 @@ package android.media.tv;
import android.content.Context;
import android.graphics.Rect;
-import android.media.tv.TvInputManager.Session;
-import android.media.tv.TvInputService.TvInputSessionImpl;
import android.net.Uri;
import android.os.IBinder;
import android.os.Looper;
@@ -52,11 +50,11 @@ public class ITvInputSessionWrapper extends ITvInputSession.Stub implements Hand
private final HandlerCaller mCaller;
- private TvInputSessionImpl mTvInputSessionImpl;
+ private TvInputService.Session mTvInputSessionImpl;
private InputChannel mChannel;
private TvInputEventReceiver mReceiver;
- public ITvInputSessionWrapper(Context context, TvInputSessionImpl sessionImpl,
+ public ITvInputSessionWrapper(Context context, TvInputService.Session sessionImpl,
InputChannel channel) {
mCaller = new HandlerCaller(context, null, this, true /* asyncHandler */);
mTvInputSessionImpl = sessionImpl;
@@ -169,8 +167,8 @@ public class ITvInputSessionWrapper extends ITvInputSession.Stub implements Hand
}
int handled = mTvInputSessionImpl.dispatchInputEvent(event, this);
- if (handled != Session.DISPATCH_IN_PROGRESS) {
- finishInputEvent(event, handled == Session.DISPATCH_HANDLED);
+ if (handled != TvInputManager.Session.DISPATCH_IN_PROGRESS) {
+ finishInputEvent(event, handled == TvInputManager.Session.DISPATCH_HANDLED);
}
}
}
diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java
index 6e0586ee79f7..52045d374b73 100644
--- a/media/java/android/media/tv/TvContract.java
+++ b/media/java/android/media/tv/TvContract.java
@@ -86,6 +86,27 @@ public final class TvContract {
}
/**
+ * Builds a URI that points to a channel logo. See {@link Channels.Logo}.
+ *
+ * @param channelId The ID of the channel whose logo is pointed to.
+ */
+ public static final Uri buildChannelLogoUri(long channelId) {
+ return buildChannelLogoUri(buildChannelUri(channelId));
+ }
+
+ /**
+ * Builds a URI that points to a channel logo. See {@link Channels.Logo}.
+ *
+ * @param channelUri The URI of the channel whose logo is pointed to.
+ */
+ public static final Uri buildChannelLogoUri(Uri channelUri) {
+ if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) {
+ throw new IllegalArgumentException("Not a channel: " + channelUri);
+ }
+ return Uri.withAppendedPath(channelUri, Channels.Logo.CONTENT_DIRECTORY);
+ }
+
+ /**
* Builds a URI that points to all browsable channels from a given TV input.
*
* @param name {@link ComponentName} of the {@link android.media.tv.TvInputService} that
@@ -285,7 +306,7 @@ public final class TvContract {
public static final int TYPE_ATSC_C = 0x00030200;
/** The channel type for ATSC-M/H (mobile/handheld). */
- public static final int TYPE_ATSC_M_H = 0x00030200;
+ public static final int TYPE_ATSC_M_H = 0x00030300;
/** The channel type for ISDB-T (terrestrial). */
public static final int TYPE_ISDB_T = 0x00040000;
@@ -523,6 +544,48 @@ public final class TvContract {
public static final String COLUMN_VERSION_NUMBER = "version_number";
private Channels() {}
+
+ /**
+ * A sub-directory of a single TV channel that represents its primary logo.
+ * <p>
+ * To access this directory, append {@link Channels.Logo#CONTENT_DIRECTORY} to the raw
+ * channel URI. The resulting URI represents an image file, and should be interacted
+ * using ContentResolver.openAssetFileDescriptor.
+ * </p>
+ * <p>
+ * Note that this sub-directory also supports opening the logo as an asset file in write
+ * mode. Callers can create or replace the primary logo associated with this channel by
+ * opening the asset file and writing the full-size photo contents into it. When the file
+ * is closed, the image will be parsed, sized down if necessary, and stored.
+ * </p>
+ * <p>
+ * Usage example:
+ * <pre>
+ * public void writeChannelLogo(long channelId, byte[] logo) {
+ * Uri channelLogoUri = TvContract.buildChannelLogoUri(channelId);
+ * try {
+ * AssetFileDescriptor fd =
+ * getContentResolver().openAssetFileDescriptor(channelLogoUri, "rw");
+ * OutputStream os = fd.createOutputStream();
+ * os.write(logo);
+ * os.close();
+ * fd.close();
+ * } catch (IOException e) {
+ * // Handle error cases.
+ * }
+ * }
+ * </pre>
+ * </p>
+ */
+ public static final class Logo {
+
+ /**
+ * The directory twig for this sub-table.
+ */
+ public static final String CONTENT_DIRECTORY = "logo";
+
+ private Logo() {}
+ }
}
/** Column definitions for the TV programs table. */
@@ -631,6 +694,26 @@ public final class TvContract {
public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
/**
+ * The URI for the poster art of this TV program.
+ * <p>
+ * Can be empty.
+ * </p><p>
+ * Type: TEXT
+ * </p>
+ */
+ public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+
+ /**
+ * The URI for the thumbnail of this TV program.
+ * <p>
+ * Can be empty.
+ * </p><p>
+ * Type: TEXT
+ * </p>
+ */
+ public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+
+ /**
* Internal data used by individual TV input services.
* <p>
* This is internal to the provider that inserted it, and should not be decoded by other
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index ed599edc99e3..868c5bf09081 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -46,6 +46,27 @@ public final class TvInputInfo implements Parcelable {
private static final String TAG = "TvInputInfo";
/**
+ * TV input type: the TV input service is not handling input from hardware. For example,
+ * services showing streaming from the internet falls into this type.
+ */
+ public static final int TYPE_VIRTUAL = 0;
+
+ // Should be in sync with hardware/libhardware/include/hardware/tv_input.h
+
+ /**
+ * TV input type: the TV input service is HDMI. (e.g. HDMI 1)
+ */
+ public static final int TYPE_HDMI = 1;
+ /**
+ * TV input type: the TV input service is a tuner. (e.g. terrestrial tuner)
+ */
+ public static final int TYPE_TUNER = 2;
+ /**
+ * TV input type: the TV input service is stateless pass-through. (e.g. RGB, composite, etc.)
+ */
+ public static final int TYPE_PASSTHROUGH = 3;
+
+ /**
* The name of the TV input service to provide to the setup activity and settings activity.
*/
public static final String EXTRA_SERVICE_NAME = "serviceName";
@@ -58,6 +79,7 @@ public final class TvInputInfo implements Parcelable {
// Attributes from XML meta data.
private String mSetupActivity;
private String mSettingsActivity;
+ private int mType;
/**
* Create a new instance of the TvInputInfo class,
@@ -105,6 +127,11 @@ public final class TvInputInfo implements Parcelable {
Log.d(TAG, "Settings activity loaded. [" + input.mSettingsActivity + "] for "
+ si.name);
}
+ input.mType = sa.getInt(
+ com.android.internal.R.styleable.TvInputService_tvInputType, TYPE_VIRTUAL);
+ if (DEBUG) {
+ Log.d(TAG, "Type loaded. [" + input.mType + "] for " + si.name);
+ }
sa.recycle();
return input;
@@ -138,21 +165,15 @@ public final class TvInputInfo implements Parcelable {
}
/**
- * Returns the .apk package that implements this TV input service.
- */
- public String getPackageName() {
- return mService.serviceInfo.packageName;
- }
-
- /**
- * Returns the class name of the service component that implements this TV input service.
+ * Returns the information of the service that implements this TV input.
*/
- public String getServiceName() {
- return mService.serviceInfo.name;
+ public ServiceInfo getServiceInfo() {
+ return mService.serviceInfo;
}
/**
* Returns the component of the service that implements this TV input.
+ * @hide
*/
public ComponentName getComponent() {
return new ComponentName(mService.serviceInfo.packageName, mService.serviceInfo.name);
@@ -164,8 +185,8 @@ public final class TvInputInfo implements Parcelable {
public Intent getIntentForSetupActivity() {
if (!TextUtils.isEmpty(mSetupActivity)) {
Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClassName(getPackageName(), mSetupActivity);
- intent.putExtra(EXTRA_SERVICE_NAME, getServiceName());
+ intent.setClassName(mService.serviceInfo.packageName, mSetupActivity);
+ intent.putExtra(EXTRA_SERVICE_NAME, mService.serviceInfo.name);
return intent;
}
return null;
@@ -177,14 +198,21 @@ public final class TvInputInfo implements Parcelable {
public Intent getIntentForSettingsActivity() {
if (!TextUtils.isEmpty(mSettingsActivity)) {
Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClassName(getPackageName(), mSettingsActivity);
- intent.putExtra(EXTRA_SERVICE_NAME, getServiceName());
+ intent.setClassName(mService.serviceInfo.packageName, mSettingsActivity);
+ intent.putExtra(EXTRA_SERVICE_NAME, mService.serviceInfo.name);
return intent;
}
return null;
}
/**
+ * Returns the type of this TV input service.
+ */
+ public int getType() {
+ return mType;
+ }
+
+ /**
* Loads the user-displayed label for this TV input service.
*
* @param pm Supplies a PackageManager used to load the TV input's resources.
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 698a861fc721..edfdd60defc6 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -67,6 +67,7 @@ public final class TvInputManager {
/**
* Interface used to receive the created session.
+ * @hide
*/
public abstract static class SessionCallback {
/**
@@ -390,6 +391,7 @@ public final class TvInputManager {
* @param listener a listener used to monitor status of the given TV input.
* @param handler a {@link Handler} that the status change will be delivered to.
* @throws IllegalArgumentException if any of the arguments is {@code null}.
+ * @hide
*/
public void registerListener(String inputId, TvInputListener listener, Handler handler) {
if (inputId == null) {
@@ -422,6 +424,7 @@ public final class TvInputManager {
* @param inputId the id of the TV input.
* @param listener the existing listener to remove for the given TV input.
* @throws IllegalArgumentException if any of the arguments is {@code null}.
+ * @hide
*/
public void unregisterListener(String inputId, final TvInputListener listener) {
if (inputId == null) {
@@ -465,6 +468,7 @@ public final class TvInputManager {
* @param callback a callback used to receive the created session.
* @param handler a {@link Handler} that the session creation will be delivered to.
* @throws IllegalArgumentException if any of the arguments is {@code null}.
+ * @hide
*/
public void createSession(String inputId, final SessionCallback callback,
Handler handler) {
@@ -489,7 +493,10 @@ public final class TvInputManager {
}
}
- /** The Session provides the per-session functionality of TV inputs. */
+ /**
+ * The Session provides the per-session functionality of TV inputs.
+ * @hide
+ */
public static final class Session {
static final int DISPATCH_IN_PROGRESS = -1;
static final int DISPATCH_NOT_HANDLED = 0;
@@ -562,13 +569,13 @@ public final class TvInputManager {
}
/**
- * Sets the relative volume of this session to handle a change of audio focus.
+ * Sets the relative stream volume of this session to handle a change of audio focus.
*
* @param volume A volume value between 0.0f to 1.0f.
* @throws IllegalArgumentException if the volume value is out of range.
* @throws IllegalStateException if the session has been already released.
*/
- public void setVolume(float volume) {
+ public void setStreamVolume(float volume) {
if (mToken == null) {
throw new IllegalStateException("the session has been already released");
}
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index 8ba0e2078a78..409a33c7a25b 100644
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -22,8 +22,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.graphics.Rect;
-import android.media.tv.ITvInputService;
-import android.media.tv.TvInputManager.Session;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -47,7 +45,17 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.SomeArgs;
/**
- * A base class for implementing television input service.
+ * The TvInputService class represents a TV input or source such as HDMI or built-in tuner which
+ * provides pass-through video or broadcast TV programs.
+ * <p>
+ * Applications will not normally use this service themselves, instead relying on the standard
+ * interaction provided by {@link TvView}. Those implementing TV input services should normally do
+ * so by deriving from this class and providing their own session implementation based on
+ * {@link TvInputService.Session}. All TV input services must require that clients hold the
+ * {@link android.Manifest.permission#BIND_TV_INPUT} in order to interact with the service; if this
+ * permission is not specified in the manifest, the system will refuse to bind to that TV input
+ * service.
+ * </p>
*/
public abstract class TvInputService extends Service {
// STOPSHIP: Turn debugging off.
@@ -74,7 +82,9 @@ public abstract class TvInputService extends Service {
private final Handler mHandler = new ServiceHandler();
private final RemoteCallbackList<ITvInputServiceCallback> mCallbacks =
new RemoteCallbackList<ITvInputServiceCallback>();
- private boolean mAvailable;
+ // STOPSHIP: Redesign the API around the availability change. For now, the service will be
+ // always available.
+ private final boolean mAvailable = true;
@Override
public void onCreate() {
@@ -124,19 +134,6 @@ public abstract class TvInputService extends Service {
}
/**
- * Convenience method to notify an availability change of this TV input service.
- *
- * @param available {@code true} if the input service is available to show TV programs.
- */
- public final void setAvailable(boolean available) {
- if (available != mAvailable) {
- mAvailable = available;
- mHandler.obtainMessage(ServiceHandler.DO_BROADCAST_AVAILABILITY_CHANGE, available)
- .sendToTarget();
- }
- }
-
- /**
* Get the number of callbacks that are registered.
*
* @hide
@@ -147,17 +144,17 @@ public abstract class TvInputService extends Service {
}
/**
- * Returns a concrete implementation of {@link TvInputSessionImpl}.
+ * Returns a concrete implementation of {@link Session}.
* <p>
* May return {@code null} if this TV input service fails to create a session for some reason.
* </p>
*/
- public abstract TvInputSessionImpl onCreateSession();
+ public abstract Session onCreateSession();
/**
- * Base class for derived classes to implement to provide {@link TvInputManager.Session}.
+ * Base class for derived classes to implement to provide a TV input session.
*/
- public abstract class TvInputSessionImpl implements KeyEvent.Callback {
+ public abstract class Session implements KeyEvent.Callback {
private final KeyEvent.DispatcherState mDispatcherState = new KeyEvent.DispatcherState();
private final WindowManager mWindowManager;
private WindowManager.LayoutParams mWindowParams;
@@ -168,7 +165,7 @@ public abstract class TvInputService extends Service {
private Rect mOverlayFrame;
private ITvInputSessionCallback mSessionCallback;
- public TvInputSessionImpl() {
+ public Session() {
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
}
@@ -303,12 +300,12 @@ public abstract class TvInputService extends Service {
public abstract boolean onSetSurface(Surface surface);
/**
- * Sets the relative volume of the current TV input session to handle the change of audio
- * focus by setting.
+ * Sets the relative stream volume of the current TV input session to handle the change of
+ * audio focus by setting.
*
* @param volume Volume scale from 0.0 to 1.0.
*/
- public abstract void onSetVolume(float volume);
+ public abstract void onSetStreamVolume(float volume);
/**
* Tunes to a given channel.
@@ -469,10 +466,10 @@ public abstract class TvInputService extends Service {
}
/**
- * Calls {@link #onSetVolume}.
+ * Calls {@link #onSetStreamVolume}.
*/
void setVolume(float volume) {
- onSetVolume(volume);
+ onSetStreamVolume(volume);
}
/**
@@ -565,33 +562,33 @@ public abstract class TvInputService extends Service {
if (DEBUG) Log.d(TAG, "dispatchInputEvent(" + event + ")");
if (event instanceof KeyEvent) {
if (((KeyEvent) event).dispatch(this, mDispatcherState, this)) {
- return Session.DISPATCH_HANDLED;
+ return TvInputManager.Session.DISPATCH_HANDLED;
}
} else if (event instanceof MotionEvent) {
MotionEvent motionEvent = (MotionEvent) event;
final int source = motionEvent.getSource();
if (motionEvent.isTouchEvent()) {
if (onTouchEvent(motionEvent)) {
- return Session.DISPATCH_HANDLED;
+ return TvInputManager.Session.DISPATCH_HANDLED;
}
} else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) {
if (onTrackballEvent(motionEvent)) {
- return Session.DISPATCH_HANDLED;
+ return TvInputManager.Session.DISPATCH_HANDLED;
}
} else {
if (onGenericMotionEvent(motionEvent)) {
- return Session.DISPATCH_HANDLED;
+ return TvInputManager.Session.DISPATCH_HANDLED;
}
}
}
if (mOverlayView == null || !mOverlayView.isAttachedToWindow()) {
- return Session.DISPATCH_NOT_HANDLED;
+ return TvInputManager.Session.DISPATCH_NOT_HANDLED;
}
if (!mOverlayView.hasWindowFocus()) {
mOverlayView.getViewRootImpl().windowFocusChanged(true, true);
}
mOverlayView.getViewRootImpl().dispatchInputEvent(event, receiver);
- return Session.DISPATCH_IN_PROGRESS;
+ return TvInputManager.Session.DISPATCH_IN_PROGRESS;
}
private void setSessionCallback(ITvInputSessionCallback callback) {
@@ -611,7 +608,7 @@ public abstract class TvInputService extends Service {
InputChannel channel = (InputChannel) args.arg1;
ITvInputSessionCallback cb = (ITvInputSessionCallback) args.arg2;
try {
- TvInputSessionImpl sessionImpl = onCreateSession();
+ Session sessionImpl = onCreateSession();
if (sessionImpl == null) {
// Failed to create a session.
cb.onSessionCreated(null);
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index d8b362d41328..2831d9e45d6b 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -21,6 +21,7 @@ import android.graphics.Rect;
import android.media.tv.TvInputManager.Session;
import android.media.tv.TvInputManager.Session.FinishedInputEventCallback;
import android.media.tv.TvInputManager.SessionCallback;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
@@ -32,24 +33,41 @@ import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.view.ViewGroup;
import android.view.ViewRootImpl;
/**
* View playing TV
*/
-public class TvView extends SurfaceView {
+public class TvView extends ViewGroup {
+ private static final String TAG = "TvView";
// STOPSHIP: Turn debugging off.
private static final boolean DEBUG = true;
- private static final String TAG = "TvView";
+
+ /**
+ * Passed with {@link TvInputListener#onError(String, int)}. Indicates that the requested TV
+ * input is busy and unable to handle the request.
+ */
+ public static final int ERROR_BUSY = 0;
+
+ /**
+ * Passed with {@link TvInputListener#onError(String, int)}. Indicates that the underlying TV
+ * input has been disconnected.
+ */
+ public static final int ERROR_TV_INPUT_DISCONNECTED = 1;
private final Handler mHandler = new Handler();
private TvInputManager.Session mSession;
+ private final SurfaceView mSurfaceView;
private Surface mSurface;
private boolean mOverlayViewCreated;
private Rect mOverlayViewFrame;
private final TvInputManager mTvInputManager;
- private SessionCallback mSessionCallback;
+ private MySessionCallback mSessionCallback;
+ private TvInputListener mListener;
private OnUnhandledInputEventListener mOnUnhandledInputEventListener;
+ private boolean mHasStreamVolume;
+ private float mStreamVolume;
private final SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() {
@Override
@@ -108,49 +126,85 @@ public class TvView extends SurfaceView {
public TvView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- getHolder().addCallback(mSurfaceHolderCallback);
+ mSurfaceView = new SurfaceView(context, attrs, defStyleAttr) {
+ @Override
+ protected void updateWindow(boolean force, boolean redrawNeeded) {
+ super.updateWindow(force, redrawNeeded);
+ relayoutSessionOverlayView();
+ }};
+ mSurfaceView.getHolder().addCallback(mSurfaceHolderCallback);
+ addView(mSurfaceView);
mTvInputManager = (TvInputManager) getContext().getSystemService(Context.TV_INPUT_SERVICE);
}
/**
- * Binds a TV input to this view. {@link SessionCallback#onSessionCreated} will be
- * called to send the result of this binding with {@link TvInputManager.Session}.
- * If a TV input is already bound, the input will be unbound from this view and its session
- * will be released.
+ * Sets a listener for events in this TvView.
+ *
+ * @param listener The listener to be called with events. A value of {@code null} removes any
+ * existing listener.
+ */
+ public void setTvInputListener(TvInputListener listener) {
+ mListener = listener;
+ }
+
+ /**
+ * Sets the relative stream volume of this session to handle a change of audio focus.
+ *
+ * @param volume A volume value between 0.0f to 1.0f.
+ */
+ public void setStreamVolume(float volume) {
+ if (DEBUG) Log.d(TAG, "setStreamVolume(" + volume + ")");
+ mHasStreamVolume = true;
+ mStreamVolume = volume;
+ if (mSession == null) {
+ // Volume will be set once the connection has been made.
+ return;
+ }
+ mSession.setStreamVolume(volume);
+ }
+
+ /**
+ * Tunes to a given channel.
*
- * @param inputId the id of TV input which will be bound to this view.
- * @param callback called when TV input is bound. The callback sends
- * {@link TvInputManager.Session}
- * @throws IllegalArgumentException if any of the arguments is {@code null}.
+ * @param inputId the id of TV input which will play the given channel.
+ * @param channelUri The URI of a channel.
*/
- public void bindTvInput(String inputId, SessionCallback callback) {
+ public void tune(String inputId, Uri channelUri) {
+ if (DEBUG) Log.d(TAG, "tune(" + channelUri + ")");
if (TextUtils.isEmpty(inputId)) {
throw new IllegalArgumentException("inputId cannot be null or an empty string");
}
- if (callback == null) {
- throw new IllegalArgumentException("callback cannot be null");
- }
- if (mSession != null) {
- release();
+ if (mSessionCallback != null && mSessionCallback.mInputId.equals(inputId)) {
+ if (mSession != null) {
+ mSession.tune(channelUri);
+ } else {
+ // Session is not created yet. Replace the channel which will be set once the
+ // session is made.
+ mSessionCallback.mChannelUri = channelUri;
+ }
+ } else {
+ if (mSession != null) {
+ release();
+ }
+ // When createSession() is called multiple times before the callback is called,
+ // only the callback of the last createSession() call will be actually called back.
+ // The previous callbacks will be ignored. For the logic, mSessionCallback
+ // is newly assigned for every createSession request and compared with
+ // MySessionCreateCallback.this.
+ mSessionCallback = new MySessionCallback(inputId, channelUri);
+ mTvInputManager.createSession(inputId, mSessionCallback, mHandler);
}
- // When bindTvInput is called multiple times before the callback is called,
- // only the callback of the last bindTvInput call will be actually called back.
- // The previous callbacks will be ignored. For the logic, mSessionCallback
- // is newly assigned for every bindTvInput call and compared with
- // MySessionCreateCallback.this.
- mSessionCallback = new MySessionCallback(callback);
- mTvInputManager.createSession(inputId, mSessionCallback, mHandler);
}
/**
- * Unbinds a TV input currently bound. Its corresponding {@link TvInputManager.Session}
- * is released.
+ * Resets this TvView.
+ * <p>
+ * This method is primarily used to un-tune the current TvView.
*/
- public void unbindTvInput() {
+ public void reset() {
if (mSession != null) {
release();
}
- mSessionCallback = null;
}
/**
@@ -265,11 +319,26 @@ public class TvView extends SurfaceView {
super.onDetachedFromWindow();
}
- /** @hide */
@Override
- protected void updateWindow(boolean force, boolean redrawNeeded) {
- super.updateWindow(force, redrawNeeded);
- relayoutSessionOverlayView();
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ mSurfaceView.layout(0, 0, right - left, bottom - top);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ mSurfaceView.measure(widthMeasureSpec, heightMeasureSpec);
+ int width = mSurfaceView.getMeasuredWidth();
+ int height = mSurfaceView.getMeasuredHeight();
+ int childState = mSurfaceView.getMeasuredState();
+ setMeasuredDimension(resolveSizeAndState(width, widthMeasureSpec, childState),
+ resolveSizeAndState(height, heightMeasureSpec,
+ childState << MEASURED_HEIGHT_STATE_SHIFT));
+ }
+
+ @Override
+ public void setVisibility(int visibility) {
+ super.setVisibility(visibility);
+ mSurfaceView.setVisibility(visibility);
}
private void release() {
@@ -277,6 +346,7 @@ public class TvView extends SurfaceView {
removeSessionOverlayView();
mSession.release();
mSession = null;
+ mSessionCallback = null;
}
private void setSessionSurface(Surface surface) {
@@ -326,6 +396,71 @@ public class TvView extends SurfaceView {
}
/**
+ * Interface used to receive various status updates on the {@link TvView}.
+ */
+ public abstract static class TvInputListener {
+
+ /**
+ * This is invoked when an error occurred while handling requested operation.
+ *
+ * @param inputId The ID of the TV input bound to this view.
+ * @param errorCode The error code. For the details of error code, please see
+ * {@link TvView}.
+ */
+ public void onError(String inputId, int errorCode) {
+ }
+
+ /**
+ * This is invoked when the view is tuned to a specific channel and starts decoding video
+ * stream from there. It is also called later when the video format is changed.
+ *
+ * @param inputId The ID of the TV input bound to this view.
+ * @param width The width of the video.
+ * @param height The height of the video.
+ * @param interlaced {@code true} if the video is interlaced, {@code false} if the video is
+ * progressive.
+ * @hide
+ */
+ public void onVideoStreamChanged(String inputId, int width, int height,
+ boolean interlaced) {
+ }
+
+ /**
+ * This is invoked when the view is tuned to a specific channel and starts decoding audio
+ * stream from there. It is also called later when the audio format is changed.
+ *
+ * @param inputId The ID of the TV input bound to this view.
+ * @param channelCount The number of channels in the audio stream.
+ * @hide
+ */
+ public void onAudioStreamChanged(String inputId, int channelCount) {
+ }
+
+ /**
+ * This is invoked when the view is tuned to a specific channel and starts decoding data
+ * stream that includes subtitle information from the channel. It is also called later when
+ * the information disappears or appears.
+ *
+ * @param inputId The ID of the TV input bound to this view.
+ * @param hasClosedCaption {@code true} if the stream contains closed caption, {@code false}
+ * otherwise.
+ * @hide
+ */
+ public void onClosedCaptionStreamChanged(String inputId, boolean hasClosedCaption) {
+ }
+
+ /**
+ * This is invoked when a custom event from the bound TV input is sent to this view.
+ *
+ * @param eventType The type of the event.
+ * @param eventArgs Optional arguments of the event.
+ * @hide
+ */
+ public void onEvent(String inputId, String eventType, Bundle eventArgs) {
+ }
+ }
+
+ /**
* Interface definition for a callback to be invoked when the unhandled input event is received.
*/
public interface OnUnhandledInputEventListener {
@@ -343,10 +478,12 @@ public class TvView extends SurfaceView {
}
private class MySessionCallback extends SessionCallback {
- final SessionCallback mExternalCallback;
+ final String mInputId;
+ Uri mChannelUri;
- MySessionCallback(SessionCallback externalCallback) {
- mExternalCallback = externalCallback;
+ MySessionCallback(String inputId, Uri channelUri) {
+ mInputId = inputId;
+ mChannelUri = channelUri;
}
@Override
@@ -367,17 +504,23 @@ public class TvView extends SurfaceView {
setSessionSurface(mSurface);
}
createSessionOverlayView();
- }
- if (mExternalCallback != null) {
- mExternalCallback.onSessionCreated(session);
+ mSession.tune(mChannelUri);
+ if (mHasStreamVolume) {
+ mSession.setStreamVolume(mStreamVolume);
+ }
+ } else {
+ if (mListener != null) {
+ mListener.onError(mInputId, ERROR_BUSY);
+ }
}
}
@Override
public void onSessionReleased(Session session) {
mSession = null;
- if (mExternalCallback != null) {
- mExternalCallback.onSessionReleased(session);
+ mSessionCallback = null;
+ if (mListener != null) {
+ mListener.onError(mInputId, ERROR_TV_INPUT_DISCONNECTED);
}
}
@@ -387,8 +530,8 @@ public class TvView extends SurfaceView {
if (DEBUG) {
Log.d(TAG, "onVideoSizeChanged(" + width + ", " + height + ")");
}
- if (mExternalCallback != null) {
- mExternalCallback.onVideoStreamChanged(session, width, height, interlaced);
+ if (mListener != null) {
+ mListener.onVideoStreamChanged(mInputId, width, height, interlaced);
}
}
@@ -397,8 +540,8 @@ public class TvView extends SurfaceView {
if (DEBUG) {
Log.d(TAG, "onAudioStreamChanged(" + channelCount + ")");
}
- if (mExternalCallback != null) {
- mExternalCallback.onAudioStreamChanged(session, channelCount);
+ if (mListener != null) {
+ mListener.onAudioStreamChanged(mInputId, channelCount);
}
}
@@ -407,16 +550,16 @@ public class TvView extends SurfaceView {
if (DEBUG) {
Log.d(TAG, "onClosedCaptionStreamChanged(" + hasClosedCaption + ")");
}
- if (mExternalCallback != null) {
- mExternalCallback.onClosedCaptionStreamChanged(session, hasClosedCaption);
+ if (mListener != null) {
+ mListener.onClosedCaptionStreamChanged(mInputId, hasClosedCaption);
}
}
@Override
public void onSessionEvent(TvInputManager.Session session, String eventType,
Bundle eventArgs) {
- if (mExternalCallback != null) {
- mExternalCallback.onSessionEvent(session, eventType, eventArgs);
+ if (mListener != null) {
+ mListener.onEvent(mInputId, eventType, eventArgs);
}
}
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RangeTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RangeTest.java
new file mode 100644
index 000000000000..d90a4bc2f814
--- /dev/null
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RangeTest.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2014 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.mediaframeworktest.unit;
+
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Range;
+import android.util.Rational;
+
+/**
+ * <pre>
+ * adb shell am instrument \
+ * -e class 'com.android.mediaframeworktest.unit.RangeTest' \
+ * -w com.android.mediaframeworktest/.MediaFrameworkUnitTestRunner
+ * </pre>
+ */
+public class RangeTest extends junit.framework.TestCase {
+
+ @SmallTest
+ public void testConstructor() {
+ // Trivial, same range
+ Range<Integer> intRange = new Range<Integer>(1, 1);
+
+ assertLower(intRange, 1);
+ assertUpper(intRange, 1);
+
+ // Different values in range
+ Range<Integer> intRange2 = new Range<Integer>(100, 200);
+ assertLower(intRange2, 100);
+ assertUpper(intRange2, 200);
+
+ Range<Float> floatRange = new Range<Float>(Float.NEGATIVE_INFINITY,
+ Float.POSITIVE_INFINITY);
+ assertLower(floatRange, Float.NEGATIVE_INFINITY);
+ assertUpper(floatRange, Float.POSITIVE_INFINITY);
+ }
+
+ @SmallTest
+ public void testIllegalValues() {
+ // Test NPEs
+ try {
+ new Range<Integer>(null, null);
+ fail("Expected exception to be thrown for (null, null)");
+ } catch (NullPointerException e) {
+ // OK: both args are null
+ }
+
+ try {
+ new Range<Integer>(null, 0);
+ fail("Expected exception to be thrown for (null, 0)");
+ } catch (NullPointerException e) {
+ // OK: left arg is null
+ }
+
+ try {
+ new Range<Integer>(0, null);
+ fail("Expected exception to be thrown for (0, null)");
+ } catch (NullPointerException e) {
+ // OK: right arg is null
+ }
+
+ // Test IAEs
+
+ try {
+ new Range<Integer>(50, -50);
+ fail("Expected exception to be thrown for (50, -50)");
+ } catch (IllegalArgumentException e) {
+ // OK: 50 > -50 so it fails
+ }
+
+ try {
+ new Range<Float>(0.0f, Float.NEGATIVE_INFINITY);
+ fail("Expected exception to be thrown for (0.0f, -Infinity)");
+ } catch (IllegalArgumentException e) {
+ // OK: 0.0f is > NEGATIVE_INFINITY, so it fails
+ }
+ }
+
+ @SmallTest
+ public void testEquals() {
+ Range<Float> oneHalf = Range.create(1.0f, 2.0f);
+ Range<Float> oneHalf2 = new Range<Float>(1.0f, 2.0f);
+ assertEquals(oneHalf, oneHalf2);
+ assertHashCodeEquals(oneHalf, oneHalf2);
+
+ Range<Float> twoThirds = new Range<Float>(2.0f, 3.0f);
+ Range<Float> twoThirds2 = Range.create(2.0f, 3.0f);
+ assertEquals(twoThirds, twoThirds2);
+ assertHashCodeEquals(twoThirds, twoThirds2);
+
+ Range<Rational> negativeOneTenthPositiveOneTenth =
+ new Range<Rational>(new Rational(-1, 10), new Rational(1, 10));
+ Range<Rational> negativeOneTenthPositiveOneTenth2 =
+ Range.create(new Rational(-1, 10), new Rational(1, 10));
+ assertEquals(negativeOneTenthPositiveOneTenth, negativeOneTenthPositiveOneTenth2);
+ assertHashCodeEquals(negativeOneTenthPositiveOneTenth, negativeOneTenthPositiveOneTenth2);
+ }
+
+ @SmallTest
+ public void testInRange() {
+ Range<Integer> hundredOneTwo = Range.create(100, 200);
+
+ assertInRange(hundredOneTwo, 100);
+ assertInRange(hundredOneTwo, 200);
+ assertInRange(hundredOneTwo, 150);
+ assertOutOfRange(hundredOneTwo, 99);
+ assertOutOfRange(hundredOneTwo, 201);
+ assertOutOfRange(hundredOneTwo, 100000);
+
+ Range<Float> infinities = Range.create(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY);
+
+ assertInRange(infinities, Float.NEGATIVE_INFINITY);
+ assertInRange(infinities, Float.POSITIVE_INFINITY);
+ assertInRange(infinities, 0.0f);
+ assertOutOfRange(infinities, Float.NaN);
+
+ Range<Rational> negativeOneTenthPositiveOneTenth =
+ new Range<Rational>(new Rational(-1, 10), new Rational(1, 10));
+ assertInRange(negativeOneTenthPositiveOneTenth, new Rational(-1, 10));
+ assertInRange(negativeOneTenthPositiveOneTenth, new Rational(1, 10));
+ assertInRange(negativeOneTenthPositiveOneTenth, Rational.ZERO);
+ assertOutOfRange(negativeOneTenthPositiveOneTenth, new Rational(-100, 1));
+ assertOutOfRange(negativeOneTenthPositiveOneTenth, new Rational(100, 1));
+ }
+
+ private static <T extends Comparable<? super T>> void assertInRange(Range<T> object, T needle) {
+ assertAction("in-range", object, needle, true, object.inRange(needle));
+ }
+
+ private static <T extends Comparable<? super T>> void assertOutOfRange(Range<T> object,
+ T needle) {
+ assertAction("out-of-range", object, needle, false, object.inRange(needle));
+ }
+
+ private static <T extends Comparable<? super T>> void assertUpper(Range<T> object, T expected) {
+ assertAction("upper", object, expected, object.getUpper());
+ }
+
+ private static <T extends Comparable<? super T>> void assertLower(Range<T> object, T expected) {
+ assertAction("lower", object, expected, object.getLower());
+ }
+
+ private static <T, T2> void assertAction(String action, T object, T2 expected,
+ T2 actual) {
+ assertEquals("Expected " + object + " " + action + " to be ",
+ expected, actual);
+ }
+
+ private static <T, T2> void assertAction(String action, T object, T2 needle, boolean expected,
+ boolean actual) {
+ String expectedMessage = expected ? action : ("not " + action);
+ assertEquals("Expected " + needle + " to be " + expectedMessage + " of " + object,
+ expected, actual);
+ }
+
+ private static <T extends Comparable<? super T>> void assertHashCodeEquals(
+ Range<T> left, Range<T> right) {
+ assertEquals("Left hash code for " + left +
+ " expected to be equal to right hash code for " + right,
+ left.hashCode(), right.hashCode());
+ }
+}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RationalTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RationalTest.java
index 18c0d3ee63b8..1bb7db9034f3 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RationalTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RationalTest.java
@@ -19,6 +19,17 @@ package com.android.mediaframeworktest.unit;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Rational;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+
+import static android.util.Rational.*;
+
/**
* <pre>
* adb shell am instrument \
@@ -27,6 +38,22 @@ import android.util.Rational;
* </pre>
*/
public class RationalTest extends junit.framework.TestCase {
+
+ /** (1,1) */
+ private static final Rational UNIT = new Rational(1, 1);
+
+ /**
+ * Test @hide greatest common divisior functionality that cannot be tested in CTS.
+ */
+ @SmallTest
+ public void testGcd() {
+ assertEquals(1, Rational.gcd(1, 2));
+ assertEquals(1, Rational.gcd(2, 3));
+ assertEquals(78, Rational.gcd(5*78, 7*78));
+ assertEquals(1, Rational.gcd(-1, 2));
+ assertEquals(1, Rational.gcd(-2, 3));
+ }
+
@SmallTest
public void testConstructor() {
@@ -52,12 +79,12 @@ public class RationalTest extends junit.framework.TestCase {
// Infinity.
r = new Rational(1, 0);
- assertEquals(0, r.getNumerator());
+ assertEquals(1, r.getNumerator());
assertEquals(0, r.getDenominator());
// Negative infinity.
r = new Rational(-1, 0);
- assertEquals(0, r.getNumerator());
+ assertEquals(-1, r.getNumerator());
assertEquals(0, r.getDenominator());
// NaN.
@@ -67,24 +94,6 @@ public class RationalTest extends junit.framework.TestCase {
}
@SmallTest
- public void testGcd() {
- Rational r = new Rational(1, 2);
- assertEquals(1, r.gcd());
-
- Rational twoThirds = new Rational(2, 3);
- assertEquals(1, twoThirds.gcd());
-
- Rational moreComplicated2 = new Rational(5*78, 7*78);
- assertEquals(78, moreComplicated2.gcd());
-
- Rational oneHalf = new Rational(-1, 2);
- assertEquals(1, oneHalf.gcd());
-
- twoThirds = new Rational(-2, 3);
- assertEquals(1, twoThirds.gcd());
- }
-
- @SmallTest
public void testEquals() {
Rational r = new Rational(1, 2);
assertEquals(1, r.getNumerator());
@@ -118,7 +127,13 @@ public class RationalTest extends junit.framework.TestCase {
assertEquals(moreComplicated, moreComplicated2);
assertEquals(moreComplicated2, moreComplicated);
- Rational nan = new Rational(0, 0);
+ // Zero is always equal to itself
+ Rational zero2 = new Rational(0, 100);
+ assertEquals(ZERO, zero2);
+ assertEquals(zero2, ZERO);
+
+ // NaN is always equal to itself
+ Rational nan = NaN;
Rational nan2 = new Rational(0, 0);
assertTrue(nan.equals(nan));
assertTrue(nan.equals(nan2));
@@ -127,9 +142,9 @@ public class RationalTest extends junit.framework.TestCase {
assertFalse(r.equals(nan));
// Infinities of the same sign are equal.
- Rational posInf = new Rational(1, 0);
+ Rational posInf = POSITIVE_INFINITY;
Rational posInf2 = new Rational(2, 0);
- Rational negInf = new Rational(-1, 0);
+ Rational negInf = NEGATIVE_INFINITY;
Rational negInf2 = new Rational(-2, 0);
assertEquals(posInf, posInf);
assertEquals(negInf, negInf);
@@ -148,4 +163,349 @@ public class RationalTest extends junit.framework.TestCase {
assertFalse(nan.equals(posInf));
assertFalse(nan.equals(negInf));
}
+
+ @SmallTest
+ public void testReduction() {
+ Rational moreComplicated = new Rational(5 * 78, 7 * 78);
+ assertEquals(new Rational(5, 7), moreComplicated);
+ assertEquals(5, moreComplicated.getNumerator());
+ assertEquals(7, moreComplicated.getDenominator());
+
+ Rational posInf = new Rational(5, 0);
+ assertEquals(1, posInf.getNumerator());
+ assertEquals(0, posInf.getDenominator());
+ assertEquals(POSITIVE_INFINITY, posInf);
+
+ Rational negInf = new Rational(-100, 0);
+ assertEquals(-1, negInf.getNumerator());
+ assertEquals(0, negInf.getDenominator());
+ assertEquals(NEGATIVE_INFINITY, negInf);
+
+ Rational zero = new Rational(0, -100);
+ assertEquals(0, zero.getNumerator());
+ assertEquals(1, zero.getDenominator());
+ assertEquals(ZERO, zero);
+
+ Rational flipSigns = new Rational(1, -1);
+ assertEquals(-1, flipSigns.getNumerator());
+ assertEquals(1, flipSigns.getDenominator());
+
+ Rational flipAndReduce = new Rational(100, -200);
+ assertEquals(-1, flipAndReduce.getNumerator());
+ assertEquals(2, flipAndReduce.getDenominator());
+ }
+
+ @SmallTest
+ public void testCompareTo() {
+ // unit is equal to itself
+ assertCompareEquals(UNIT, new Rational(1, 1));
+
+ // NaN is greater than anything but NaN
+ assertCompareEquals(NaN, new Rational(0, 0));
+ assertGreaterThan(NaN, UNIT);
+ assertGreaterThan(NaN, POSITIVE_INFINITY);
+ assertGreaterThan(NaN, NEGATIVE_INFINITY);
+ assertGreaterThan(NaN, ZERO);
+
+ // Positive infinity is greater than any other non-NaN
+ assertCompareEquals(POSITIVE_INFINITY, new Rational(1, 0));
+ assertGreaterThan(POSITIVE_INFINITY, UNIT);
+ assertGreaterThan(POSITIVE_INFINITY, NEGATIVE_INFINITY);
+ assertGreaterThan(POSITIVE_INFINITY, ZERO);
+
+ // Negative infinity is smaller than any other non-NaN
+ assertCompareEquals(NEGATIVE_INFINITY, new Rational(-1, 0));
+ assertLessThan(NEGATIVE_INFINITY, UNIT);
+ assertLessThan(NEGATIVE_INFINITY, POSITIVE_INFINITY);
+ assertLessThan(NEGATIVE_INFINITY, ZERO);
+
+ // A finite number with the same denominator is trivially comparable
+ assertGreaterThan(new Rational(3, 100), new Rational(1, 100));
+ assertGreaterThan(new Rational(3, 100), ZERO);
+
+ // Compare finite numbers with different divisors
+ assertGreaterThan(new Rational(5, 25), new Rational(1, 10));
+ assertGreaterThan(new Rational(5, 25), ZERO);
+
+ // Compare finite numbers with different signs
+ assertGreaterThan(new Rational(5, 25), new Rational(-1, 10));
+ assertLessThan(new Rational(-5, 25), ZERO);
+ }
+
+ @SmallTest
+ public void testConvenienceMethods() {
+ // isFinite
+ assertFinite(ZERO, true);
+ assertFinite(NaN, false);
+ assertFinite(NEGATIVE_INFINITY, false);
+ assertFinite(POSITIVE_INFINITY, false);
+ assertFinite(UNIT, true);
+
+ // isInfinite
+ assertInfinite(ZERO, false);
+ assertInfinite(NaN, false);
+ assertInfinite(NEGATIVE_INFINITY, true);
+ assertInfinite(POSITIVE_INFINITY, true);
+ assertInfinite(UNIT, false);
+
+ // isNaN
+ assertNaN(ZERO, false);
+ assertNaN(NaN, true);
+ assertNaN(NEGATIVE_INFINITY, false);
+ assertNaN(POSITIVE_INFINITY, false);
+ assertNaN(UNIT, false);
+
+ // isZero
+ assertZero(ZERO, true);
+ assertZero(NaN, false);
+ assertZero(NEGATIVE_INFINITY, false);
+ assertZero(POSITIVE_INFINITY, false);
+ assertZero(UNIT, false);
+ }
+
+ @SmallTest
+ public void testValueConversions() {
+ // Unit, simple case
+ assertValueEquals(UNIT, 1.0f);
+ assertValueEquals(UNIT, 1.0);
+ assertValueEquals(UNIT, 1L);
+ assertValueEquals(UNIT, 1);
+ assertValueEquals(UNIT, (short)1);
+
+ // Zero, simple case
+ assertValueEquals(ZERO, 0.0f);
+ assertValueEquals(ZERO, 0.0);
+ assertValueEquals(ZERO, 0L);
+ assertValueEquals(ZERO, 0);
+ assertValueEquals(ZERO, (short)0);
+
+ // NaN is 0 for integers, not-a-number for floating point
+ assertValueEquals(NaN, Float.NaN);
+ assertValueEquals(NaN, Double.NaN);
+ assertValueEquals(NaN, 0L);
+ assertValueEquals(NaN, 0);
+ assertValueEquals(NaN, (short)0);
+
+ // Positive infinity, saturates upwards for integers
+ assertValueEquals(POSITIVE_INFINITY, Float.POSITIVE_INFINITY);
+ assertValueEquals(POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
+ assertValueEquals(POSITIVE_INFINITY, Long.MAX_VALUE);
+ assertValueEquals(POSITIVE_INFINITY, Integer.MAX_VALUE);
+ assertValueEquals(POSITIVE_INFINITY, (short)-1);
+
+ // Negative infinity, saturates downwards for integers
+ assertValueEquals(NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY);
+ assertValueEquals(NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
+ assertValueEquals(NEGATIVE_INFINITY, Long.MIN_VALUE);
+ assertValueEquals(NEGATIVE_INFINITY, Integer.MIN_VALUE);
+ assertValueEquals(NEGATIVE_INFINITY, (short)0);
+
+ // Normal finite values, round down for integers
+ final Rational oneQuarter = new Rational(1, 4);
+ assertValueEquals(oneQuarter, 1.0f / 4.0f);
+ assertValueEquals(oneQuarter, 1.0 / 4.0);
+ assertValueEquals(oneQuarter, 0L);
+ assertValueEquals(oneQuarter, 0);
+ assertValueEquals(oneQuarter, (short)0);
+
+ final Rational nineFifths = new Rational(9, 5);
+ assertValueEquals(nineFifths, 9.0f / 5.0f);
+ assertValueEquals(nineFifths, 9.0 / 5.0);
+ assertValueEquals(nineFifths, 1L);
+ assertValueEquals(nineFifths, 1);
+ assertValueEquals(nineFifths, (short)1);
+
+ final Rational negativeHundred = new Rational(-1000, 10);
+ assertValueEquals(negativeHundred, -100.f / 1.f);
+ assertValueEquals(negativeHundred, -100.0 / 1.0);
+ assertValueEquals(negativeHundred, -100L);
+ assertValueEquals(negativeHundred, -100);
+ assertValueEquals(negativeHundred, (short)-100);
+
+ // Short truncates if the result is too large
+ assertValueEquals(new Rational(Integer.MAX_VALUE, 1), (short)Integer.MAX_VALUE);
+ assertValueEquals(new Rational(0x00FFFFFF, 1), (short)0x00FFFFFF);
+ assertValueEquals(new Rational(0x00FF00FF, 1), (short)0x00FF00FF);
+ }
+
+ @SmallTest
+ public void testSerialize() throws ClassNotFoundException, IOException {
+ /*
+ * Check correct [de]serialization
+ */
+ assertEqualsAfterSerializing(ZERO);
+ assertEqualsAfterSerializing(NaN);
+ assertEqualsAfterSerializing(NEGATIVE_INFINITY);
+ assertEqualsAfterSerializing(POSITIVE_INFINITY);
+ assertEqualsAfterSerializing(UNIT);
+ assertEqualsAfterSerializing(new Rational(100, 200));
+ assertEqualsAfterSerializing(new Rational(-100, 200));
+ assertEqualsAfterSerializing(new Rational(5, 1));
+ assertEqualsAfterSerializing(new Rational(Integer.MAX_VALUE, Integer.MIN_VALUE));
+
+ /*
+ * Check bad deserialization fails
+ */
+ try {
+ Rational badZero = createIllegalRational(0, 100); // [0, 100] , should be [0, 1]
+ Rational results = serializeRoundTrip(badZero);
+ fail("Deserializing " + results + " should not have succeeded");
+ } catch (InvalidObjectException e) {
+ // OK
+ }
+
+ try {
+ Rational badPosInfinity = createIllegalRational(100, 0); // [100, 0] , should be [1, 0]
+ Rational results = serializeRoundTrip(badPosInfinity);
+ fail("Deserializing " + results + " should not have succeeded");
+ } catch (InvalidObjectException e) {
+ // OK
+ }
+
+ try {
+ Rational badNegInfinity =
+ createIllegalRational(-100, 0); // [-100, 0] , should be [-1, 0]
+ Rational results = serializeRoundTrip(badNegInfinity);
+ fail("Deserializing " + results + " should not have succeeded");
+ } catch (InvalidObjectException e) {
+ // OK
+ }
+
+ try {
+ Rational badReduced = createIllegalRational(2, 4); // [2,4] , should be [1, 2]
+ Rational results = serializeRoundTrip(badReduced);
+ fail("Deserializing " + results + " should not have succeeded");
+ } catch (InvalidObjectException e) {
+ // OK
+ }
+
+ try {
+ Rational badReducedNeg = createIllegalRational(-2, 4); // [-2, 4] should be [-1, 2]
+ Rational results = serializeRoundTrip(badReducedNeg);
+ fail("Deserializing " + results + " should not have succeeded");
+ } catch (InvalidObjectException e) {
+ // OK
+ }
+ }
+
+ private static void assertValueEquals(Rational object, float expected) {
+ assertEquals("Checking floatValue() for " + object + ";",
+ expected, object.floatValue());
+ }
+
+ private static void assertValueEquals(Rational object, double expected) {
+ assertEquals("Checking doubleValue() for " + object + ";",
+ expected, object.doubleValue());
+ }
+
+ private static void assertValueEquals(Rational object, long expected) {
+ assertEquals("Checking longValue() for " + object + ";",
+ expected, object.longValue());
+ }
+
+ private static void assertValueEquals(Rational object, int expected) {
+ assertEquals("Checking intValue() for " + object + ";",
+ expected, object.intValue());
+ }
+
+ private static void assertValueEquals(Rational object, short expected) {
+ assertEquals("Checking shortValue() for " + object + ";",
+ expected, object.shortValue());
+ }
+
+ private static void assertFinite(Rational object, boolean expected) {
+ assertAction("finite", object, expected, object.isFinite());
+ }
+
+ private static void assertInfinite(Rational object, boolean expected) {
+ assertAction("infinite", object, expected, object.isInfinite());
+ }
+
+ private static void assertNaN(Rational object, boolean expected) {
+ assertAction("NaN", object, expected, object.isNaN());
+ }
+
+ private static void assertZero(Rational object, boolean expected) {
+ assertAction("zero", object, expected, object.isZero());
+ }
+
+ private static <T> void assertAction(String action, T object, boolean expected,
+ boolean actual) {
+ String expectedMessage = expected ? action : ("not " + action);
+ assertEquals("Expected " + object + " to be " + expectedMessage,
+ expected, actual);
+ }
+
+ private static <T extends Comparable<? super T>> void assertLessThan(T left, T right) {
+ assertTrue("Expected (LR) left " + left + " to be less than right " + right,
+ left.compareTo(right) < 0);
+ assertTrue("Expected (RL) left " + left + " to be less than right " + right,
+ right.compareTo(left) > 0);
+ }
+
+ private static <T extends Comparable<? super T>> void assertGreaterThan(T left, T right) {
+ assertTrue("Expected (LR) left " + left + " to be greater than right " + right,
+ left.compareTo(right) > 0);
+ assertTrue("Expected (RL) left " + left + " to be greater than right " + right,
+ right.compareTo(left) < 0);
+ }
+
+ private static <T extends Comparable<? super T>> void assertCompareEquals(T left, T right) {
+ assertTrue("Expected (LR) left " + left + " to be compareEquals to right " + right,
+ left.compareTo(right) == 0);
+ assertTrue("Expected (RL) left " + left + " to be compareEquals to right " + right,
+ right.compareTo(left) == 0);
+ }
+
+ private static <T extends Serializable> byte[] serialize(T obj) throws IOException {
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ try (ObjectOutputStream objectStream = new ObjectOutputStream(byteStream)) {
+ objectStream.writeObject(obj);
+ }
+ return byteStream.toByteArray();
+ }
+
+ private static <T extends Serializable> T deserialize(byte[] array, Class<T> klass)
+ throws IOException, ClassNotFoundException {
+ ByteArrayInputStream bais = new ByteArrayInputStream(array);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ Object obj = ois.readObject();
+ return klass.cast(obj);
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T extends Serializable> T serializeRoundTrip(T obj)
+ throws IOException, ClassNotFoundException {
+ Class<T> klass = (Class<T>) obj.getClass();
+ byte[] arr = serialize(obj);
+ T serialized = deserialize(arr, klass);
+ return serialized;
+ }
+
+ private static <T extends Serializable> void assertEqualsAfterSerializing(T obj)
+ throws ClassNotFoundException, IOException {
+ T serialized = serializeRoundTrip(obj);
+ assertEquals("Expected values to be equal after serialization round-trip", obj, serialized);
+ }
+
+ private static Rational createIllegalRational(int numerator, int denominator) {
+ Rational r = new Rational(numerator, denominator);
+ mutateField(r, "mNumerator", numerator);
+ mutateField(r, "mDenominator", denominator);
+ return r;
+ }
+
+ private static <T> void mutateField(T object, String name, int value) {
+ try {
+ Field f = object.getClass().getDeclaredField(name);
+ f.setAccessible(true);
+ f.set(object, value);
+ } catch (NoSuchFieldException e) {
+ throw new AssertionError(e);
+ } catch (IllegalAccessException e) {
+ throw new AssertionError(e);
+ } catch (IllegalArgumentException e) {
+ throw new AssertionError(e);
+ }
+ }
}
diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp
index acfcd836bbb8..3f37ed15435a 100644
--- a/native/android/sensor.cpp
+++ b/native/android/sensor.cpp
@@ -171,8 +171,3 @@ const char* ASensor_getStringType(ASensor const* sensor)
{
return static_cast<Sensor const*>(sensor)->getStringType().string();
}
-
-const char* ASensor_getRequiredPermission(ASensor const* sensor)
-{
- return static_cast<Sensor const*>(sensor)->getRequiredPermission().string();
-}
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
index 159ee66d2c05..3861cc1b4803 100644
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ b/packages/DocumentsUI/AndroidManifest.xml
@@ -32,7 +32,7 @@
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.PICK_DIRECTORY" />
+ <action android:name="android.intent.action.OPEN_DOCUMENT_TREE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 9f7699117433..d0b6a1d406ed 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -24,7 +24,7 @@ import static com.android.documentsui.DocumentsActivity.State.ACTION_CREATE;
import static com.android.documentsui.DocumentsActivity.State.ACTION_GET_CONTENT;
import static com.android.documentsui.DocumentsActivity.State.ACTION_MANAGE;
import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_PICK_DIRECTORY;
+import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN_TREE;
import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
@@ -203,7 +203,7 @@ public class DocumentsActivity extends Activity {
final String mimeType = getIntent().getType();
final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE);
SaveFragment.show(getFragmentManager(), mimeType, title);
- } else if (mState.action == ACTION_PICK_DIRECTORY) {
+ } else if (mState.action == ACTION_OPEN_TREE) {
PickFragment.show(getFragmentManager());
}
@@ -213,7 +213,7 @@ public class DocumentsActivity extends Activity {
moreApps.setPackage(null);
RootsFragment.show(getFragmentManager(), moreApps);
} else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE
- || mState.action == ACTION_PICK_DIRECTORY) {
+ || mState.action == ACTION_OPEN_TREE) {
RootsFragment.show(getFragmentManager(), null);
}
@@ -240,8 +240,8 @@ public class DocumentsActivity extends Activity {
mState.action = ACTION_CREATE;
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
mState.action = ACTION_GET_CONTENT;
- } else if (Intent.ACTION_PICK_DIRECTORY.equals(action)) {
- mState.action = ACTION_PICK_DIRECTORY;
+ } else if (Intent.ACTION_OPEN_DOCUMENT_TREE.equals(action)) {
+ mState.action = ACTION_OPEN_TREE;
} else if (DocumentsContract.ACTION_MANAGE_ROOT.equals(action)) {
mState.action = ACTION_MANAGE;
}
@@ -441,7 +441,7 @@ public class DocumentsActivity extends Activity {
actionBar.setIcon(new ColorDrawable());
if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT
- || mState.action == ACTION_PICK_DIRECTORY) {
+ || mState.action == ACTION_OPEN_TREE) {
actionBar.setTitle(R.string.title_open);
} else if (mState.action == ACTION_CREATE) {
actionBar.setTitle(R.string.title_save);
@@ -583,7 +583,7 @@ public class DocumentsActivity extends Activity {
sortSize.setVisible(mState.showSize);
final boolean searchVisible;
- if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
+ if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
createDir.setVisible(cwd != null && cwd.isCreateSupported());
searchVisible = false;
@@ -828,7 +828,7 @@ public class DocumentsActivity extends Activity {
if (cwd == null) {
// No directory means recents
- if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
+ if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
RecentsCreateFragment.show(fm);
} else {
DirectoryFragment.showRecentsOpen(fm, anim);
@@ -857,7 +857,7 @@ public class DocumentsActivity extends Activity {
}
}
- if (mState.action == ACTION_PICK_DIRECTORY) {
+ if (mState.action == ACTION_OPEN_TREE) {
final PickFragment pick = PickFragment.get(fm);
if (pick != null) {
final CharSequence displayName = (mState.stack.size() <= 1) ? root.title
@@ -1021,7 +1021,7 @@ public class DocumentsActivity extends Activity {
}
public void onPickRequested(DocumentInfo pickTarget) {
- final Uri viaUri = DocumentsContract.buildViaUri(pickTarget.authority,
+ final Uri viaUri = DocumentsContract.buildTreeDocumentUri(pickTarget.authority,
pickTarget.documentId);
new PickFinishTask(viaUri).executeOnExecutor(getCurrentExecutor());
}
@@ -1031,7 +1031,7 @@ public class DocumentsActivity extends Activity {
final ContentValues values = new ContentValues();
final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack);
- if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
+ if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
// Remember stack for last create
values.clear();
values.put(RecentColumns.KEY, mState.stack.buildKey());
@@ -1064,7 +1064,7 @@ public class DocumentsActivity extends Activity {
if (mState.action == ACTION_GET_CONTENT) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- } else if (mState.action == ACTION_PICK_DIRECTORY) {
+ } else if (mState.action == ACTION_OPEN_TREE) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
@@ -1202,7 +1202,7 @@ public class DocumentsActivity extends Activity {
public static final int ACTION_OPEN = 1;
public static final int ACTION_CREATE = 2;
public static final int ACTION_GET_CONTENT = 3;
- public static final int ACTION_PICK_DIRECTORY = 4;
+ public static final int ACTION_OPEN_TREE = 4;
public static final int ACTION_MANAGE = 5;
public static final int MODE_UNKNOWN = 0;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java b/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
index a9e488a168f0..5112c92295c5 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
@@ -77,13 +77,15 @@ public class PickFragment extends Fragment {
public void setPickTarget(DocumentInfo pickTarget, CharSequence displayName) {
mPickTarget = pickTarget;
- if (mPickTarget != null) {
- mContainer.setVisibility(View.VISIBLE);
- final Locale locale = getResources().getConfiguration().locale;
- final String raw = getString(R.string.menu_select).toUpperCase(locale);
- mPick.setText(TextUtils.expandTemplate(raw, displayName));
- } else {
- mContainer.setVisibility(View.GONE);
+ if (mContainer != null) {
+ if (mPickTarget != null) {
+ mContainer.setVisibility(View.VISIBLE);
+ final Locale locale = getResources().getConfiguration().locale;
+ final String raw = getString(R.string.menu_select).toUpperCase(locale);
+ mPick.setText(TextUtils.expandTemplate(raw, displayName));
+ } else {
+ mContainer.setVisibility(View.GONE);
+ }
}
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
index 933dbe098b26..caa758137215 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
@@ -105,7 +105,7 @@ public class RootsCache {
mRecentsRoot.rootId = null;
mRecentsRoot.icon = R.drawable.ic_root_recent;
mRecentsRoot.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE
- | Root.FLAG_SUPPORTS_DIR_SELECTION;
+ | Root.FLAG_SUPPORTS_IS_CHILD;
mRecentsRoot.title = mContext.getString(R.string.root_recent);
mRecentsRoot.availableBytes = -1;
@@ -350,7 +350,7 @@ public class RootsCache {
final List<RootInfo> matching = Lists.newArrayList();
for (RootInfo root : roots) {
final boolean supportsCreate = (root.flags & Root.FLAG_SUPPORTS_CREATE) != 0;
- final boolean supportsDir = (root.flags & Root.FLAG_SUPPORTS_DIR_SELECTION) != 0;
+ final boolean supportsIsChild = (root.flags & Root.FLAG_SUPPORTS_IS_CHILD) != 0;
final boolean advanced = (root.flags & Root.FLAG_ADVANCED) != 0;
final boolean localOnly = (root.flags & Root.FLAG_LOCAL_ONLY) != 0;
final boolean empty = (root.flags & Root.FLAG_EMPTY) != 0;
@@ -358,7 +358,7 @@ public class RootsCache {
// Exclude read-only devices when creating
if (state.action == State.ACTION_CREATE && !supportsCreate) continue;
// Exclude roots that don't support directory picking
- if (state.action == State.ACTION_PICK_DIRECTORY && !supportsDir) continue;
+ if (state.action == State.ACTION_OPEN_TREE && !supportsIsChild) continue;
// Exclude advanced devices when not requested
if (!state.showAdvanced && advanced) continue;
// Exclude non-local devices when local only
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index d388ab7fef81..9473eb9112ed 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -145,7 +145,7 @@ public class ExternalStorageProvider extends DocumentsProvider {
final RootInfo root = new RootInfo();
root.rootId = rootId;
root.flags = Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY | Root.FLAG_ADVANCED
- | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_DIR_SELECTION;
+ | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD;
if (ROOT_ID_PRIMARY_EMULATED.equals(rootId)) {
root.title = getContext().getString(R.string.root_internal_storage);
} else {
diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml
index a046dc5a9d18..5811d147f7f6 100644
--- a/packages/Keyguard/res/values-af/strings.xml
+++ b/packages/Keyguard/res/values-af/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Om te ontsluit, druk Kieslys dan 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimum gesigontsluit-pogings oorskry"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Gelaai"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Laai tans"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Koppel jou herlaaier."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Druk kieslys om te ontsluit."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netwerk gesluit"</string>
diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml
index 0bb799391f45..a630dee18ea0 100644
--- a/packages/Keyguard/res/values-am/strings.xml
+++ b/packages/Keyguard/res/values-am/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"ለመክፈት፣ምናሌ ተጫን ከዛ 0"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"የመጨረሻውን የገጽ ክፈት ሙከራዎችን አልፏል"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"ባትሪ ሞልቷል"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"ባትሪ በመሙላት ላይ፣ <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"ኃይል በመሙላት ላይ"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"የኃይል መሙያዎን ይሰኩ።"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ለመክፈት ምናሌውን ይጫኑ።"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"አውታረ መረብ ተቆልፏል"</string>
diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml
index eac32160c0f0..48a5fca43e25 100644
--- a/packages/Keyguard/res/values-ar/strings.xml
+++ b/packages/Keyguard/res/values-ar/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"لإلغاء التأمين، اضغط على \"القائمة\" ثم على 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"تم تجاوز الحد الأقصى لعدد محاولات تأمين الجهاز بالوجه"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"تم الشحن"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"جارٍ الشحن، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"جارٍ الشحن"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"توصيل جهاز الشحن."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"اضغط على \"القائمة\" لإلغاء القفل."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"الشبكة مؤمّنة"</string>
diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml
index ad4285af5ea3..e8d553330665 100644
--- a/packages/Keyguard/res/values-bg/strings.xml
+++ b/packages/Keyguard/res/values-bg/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"За да отключите, натиснете „Меню“ и после 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Максималният брой опити за отключване с лице е надвишен"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Заредена"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Зарежда се, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Зарежда се"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Свържете зарядното си устройство."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Натиснете иконата за меню, за да отключите."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мрежата е заключена"</string>
diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml
index 7e407097b193..d23d4871cd41 100644
--- a/packages/Keyguard/res/values-ca/strings.xml
+++ b/packages/Keyguard/res/values-ca/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Per desbloquejar-lo, premeu Menú i després 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"S\'ha superat el nombre màxim d\'intents de desbloqueig facial"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Carregada"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"S\'està carregant, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Carregant"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Connecta el carregador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Prem Menú per desbloquejar."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Xarxa bloquejada"</string>
diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml
index 53cc7071f6c8..5df050879cc7 100644
--- a/packages/Keyguard/res/values-cs/strings.xml
+++ b/packages/Keyguard/res/values-cs/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Chcete-li telefon odemknout, stiskněte Menu a poté 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Překročili jste maximální povolený počet pokusů o odemknutí obličejem."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Nabito"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nabíjení, <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Nabíjení"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Připojte dobíjecí zařízení."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Telefon odemknete stisknutím tlačítka Menu."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Síť je blokována"</string>
diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml
index cf1aad91102f..85ebf4b7920a 100644
--- a/packages/Keyguard/res/values-da/strings.xml
+++ b/packages/Keyguard/res/values-da/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Tryk på Menu og dernæst på 0 for at låse op."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Det maksimale antal forsøg på at bruge Ansigtslås er overskredet"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Opladet"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Oplader, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Oplader"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Tilslut din oplader."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tryk på Menu for at låse op."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netværket er låst"</string>
diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml
index 14df2375ba2b..bf88124bed51 100644
--- a/packages/Keyguard/res/values-de/strings.xml
+++ b/packages/Keyguard/res/values-de/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Drücken Sie zum Entsperren die Menütaste und dann auf \"0\"."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Die maximal zulässige Anzahl an Face Unlock-Versuchen wurde überschritten."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Aufgeladen"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Akku wird aufgeladen (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Wird aufgeladen"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Bitte Ladegerät anschließen"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Zum Entsperren die Menütaste drücken"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netzwerk gesperrt"</string>
diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml
index 63d8409ce0a5..e9286626558b 100644
--- a/packages/Keyguard/res/values-el/strings.xml
+++ b/packages/Keyguard/res/values-el/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Για ξεκλείδωμα, πατήστε το πλήκτρο Menu και, στη συνέχεια, το πλήκτρο 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Έγινε υπέρβαση του μέγιστου αριθμού προσπαθειών Face Unlock"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Φορτίστηκε"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Φόρτιση, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Φόρτιση"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Συνδέστε τον φορτιστή."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Πατήστε \"Μενού\" για ξεκλείδωμα."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Το δίκτυο κλειδώθηκε"</string>
diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml
index ecc850de34c7..962c80d0f148 100644
--- a/packages/Keyguard/res/values-en-rGB/strings.xml
+++ b/packages/Keyguard/res/values-en-rGB/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"To unlock, press Menu, then 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximum Face Unlock attempts exceeded"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Charged"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Charging"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Connect your charger."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Press Menu to unlock."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Network locked"</string>
diff --git a/packages/Keyguard/res/values-en-rIN/strings.xml b/packages/Keyguard/res/values-en-rIN/strings.xml
index ecc850de34c7..962c80d0f148 100644
--- a/packages/Keyguard/res/values-en-rIN/strings.xml
+++ b/packages/Keyguard/res/values-en-rIN/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"To unlock, press Menu, then 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximum Face Unlock attempts exceeded"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Charged"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Charging"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Connect your charger."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Press Menu to unlock."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Network locked"</string>
diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml
index c6d63ba92ee6..47288a1727e6 100644
--- a/packages/Keyguard/res/values-es-rUS/strings.xml
+++ b/packages/Keyguard/res/values-es-rUS/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, presiona el menú y luego 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Se superó el máximo de intentos permitido para el desbloqueo facial del dispositivo."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Cargada"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Cargando"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Conecta tu cargador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Presiona Menú para desbloquear."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Bloqueada para la red"</string>
diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml
index 8a783990aa61..1bf3b0cd0a2a 100644
--- a/packages/Keyguard/res/values-es/strings.xml
+++ b/packages/Keyguard/res/values-es/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Se ha superado el número máximo de intentos de desbloqueo facial."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Cargada"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Cargando"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Conecta el cargador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Ve al menú para desbloquear la pantalla."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Bloqueada para la red"</string>
diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et-rEE/strings.xml
index b837f0136e52..ad43c0883fa6 100644
--- a/packages/Keyguard/res/values-et-rEE/strings.xml
+++ b/packages/Keyguard/res/values-et-rEE/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Laetud"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Laadimine"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Ühendage laadija."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Avamiseks vajutage menüüklahvi."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Võrk on suletud"</string>
diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml
index 5d1c487d4f10..fe9652c88e5f 100644
--- a/packages/Keyguard/res/values-fa/strings.xml
+++ b/packages/Keyguard/res/values-fa/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"برای بازگشایی قفل، منو را فشار دهید و سپس 0 را فشار دهید."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"‏دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"شارژ شد"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"شارژ، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"شارژ کردن"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"شارژر خود را وصل کنید."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"برای بازگشایی قفل روی منو فشار دهید."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"شبکه قفل شد"</string>
diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml
index bdf66776b72d..4a188984472e 100644
--- a/packages/Keyguard/res/values-fi/strings.xml
+++ b/packages/Keyguard/res/values-fi/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Poista lukitus painamalla Valikko-painiketta ja 0-näppäintä."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Face Unlock -yrityksiä tehty suurin sallittu määrä."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Täynnä"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Ladataan (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Ladataan"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Kytke laturi."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Poista lukitus painamalla Valikko-painiketta."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Verkko lukittu"</string>
diff --git a/packages/Keyguard/res/values-fr-rCA/strings.xml b/packages/Keyguard/res/values-fr-rCA/strings.xml
index e77927c3152b..a3960bf2ffb4 100644
--- a/packages/Keyguard/res/values-fr-rCA/strings.xml
+++ b/packages/Keyguard/res/values-fr-rCA/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Pour déverrouiller le téléphone, appuyez sur \"Menu\", puis sur 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nombre maximal autorisé de tentatives Face Unlock atteint."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Chargé"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"En charge (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Charge en cours..."</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Branchez votre chargeur."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Appuyez sur \"Menu\" pour déverrouiller l\'appareil."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Réseau verrouillé"</string>
diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml
index 41be1eb04aa3..6416e535bbd0 100644
--- a/packages/Keyguard/res/values-fr/strings.xml
+++ b/packages/Keyguard/res/values-fr/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Pour déverrouiller le clavier, appuyez sur \"Menu\" puis sur 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nombre maximal autorisé de tentatives Face Unlock atteint."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Chargé"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"En charge (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Batterie en charge…"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Branchez votre chargeur."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Appuyez sur \"Menu\" pour déverrouiller l\'appareil."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Réseau verrouillé"</string>
diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml
index c963beb28fca..200b42ee22c0 100644
--- a/packages/Keyguard/res/values-hi/strings.xml
+++ b/packages/Keyguard/res/values-hi/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"अनलॉक करने के लिए, मेनू दबाएं और फिर 0 दबाएं."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"फेस अनलॉक के अधिकतम प्रयासों की सीमा पार हो गई"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"चार्ज हो गई"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"चार्ज हो रही है, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"चार्ज हो रहा है"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"अपना चार्जर कनेक्‍ट करें."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"अनलॉक करने के लिए मेनू दबाएं."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"नेटवर्क लॉक किया गया"</string>
diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml
index 6bbdd510c85f..5c6a4672d00a 100644
--- a/packages/Keyguard/res/values-hr/strings.xml
+++ b/packages/Keyguard/res/values-hr/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Za otključavanje pritisnite Izbornik pa 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Premašen je maksimalni broj Otključavanja licem"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Napunjeno"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Puni se, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Punjenje"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Priključite punjač."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pritisnite Izbornik za otključavanje."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mreža je zaključana"</string>
diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml
index 9706874b8ef6..93b994859231 100644
--- a/packages/Keyguard/res/values-hu/strings.xml
+++ b/packages/Keyguard/res/values-hu/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"A feloldáshoz nyomja meg a Menü, majd a 0 gombot."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Elérte az arcalapú feloldási kísérletek maximális számát"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Feltöltve"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Töltés (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Töltés"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Csatlakoztassa a töltőt."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"A feloldáshoz nyomja meg a Menü gombot."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"A hálózat lezárva"</string>
diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy-rAM/strings.xml
index 60c626d8675b..0a4c8e047d92 100644
--- a/packages/Keyguard/res/values-hy-rAM/strings.xml
+++ b/packages/Keyguard/res/values-hy-rAM/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Ապակողպման համար սեղմեք Ցանկ, ապա 0:"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Առավելագույն Դեմքով ապակողպման փորձերը գերազանցված են"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Լիցքավորված է"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Լիցքավորում, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Լիցքավորում"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Միացրեք ձեր լիցքավորիչը:"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Ապակողպելու համար սեղմեք Ցանկը:"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Ցանցը կողպված է"</string>
diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml
index 9ea5a29ce608..343c320af189 100644
--- a/packages/Keyguard/res/values-in/strings.xml
+++ b/packages/Keyguard/res/values-in/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka, tekan Menu lalu 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Percobaan Face Unlock melebihi batas maksimum"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Terisi"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengisi baterai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Mengisi daya"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Hubungkan pengisi daya."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Jaringan terkunci"</string>
diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml
index 2a481e6557dd..6c7cbfeccd84 100644
--- a/packages/Keyguard/res/values-it/strings.xml
+++ b/packages/Keyguard/res/values-it/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Per sbloccare, premi Menu, poi 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Numero massimo di tentativi di Sblocco col sorriso superato"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Carico"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"In carica (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"In carica"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Collega il caricabatterie."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Premi Menu per sbloccare."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rete bloccata"</string>
diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml
index a6a3192284d8..7f73b5a19d64 100644
--- a/packages/Keyguard/res/values-iw/strings.xml
+++ b/packages/Keyguard/res/values-iw/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"כדי לבטל את הנעילה, לחץ על \'תפריט\' ולאחר מכן על 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"חרגת ממספר הניסיונות המרבי של זיהוי פנים"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"טעון"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"טוען, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"טוען"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"חבר את המטען."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"לחץ על \'תפריט\' כדי לבטל את הנעילה."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"רשת נעולה"</string>
diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml
index b683a9dc446b..3b7ea6a4a542 100644
--- a/packages/Keyguard/res/values-ja/strings.xml
+++ b/packages/Keyguard/res/values-ja/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"MENU、0キーでロック解除"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"フェイスアンロックの最大試行回数を超えました"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"充電完了"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中: <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"充電中"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"充電してください。"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"メニューからロックを解除できます。"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"ネットワークがロックされました"</string>
diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka-rGE/strings.xml
index 44140965fc1a..36a2d79d7a1c 100644
--- a/packages/Keyguard/res/values-ka-rGE/strings.xml
+++ b/packages/Keyguard/res/values-ka-rGE/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"განბლოკვისათვის დააჭირეთ მენიუს და შემდეგ 0-ს."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"სახის ამოცნობით განბლოკვის მცდელობამ დაშვებულ რაოდენობას გადააჭარბა"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"დამუხტულია"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"მიმდინარეობს დამუხტვა (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"მიმდინარეობს დატენვა"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"შეაერთეთ დამტენი."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"განბლოკვისთვის დააჭირეთ მენიუს."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"ქსელი ჩაკეტილია"</string>
diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km-rKH/strings.xml
index 18b59f117605..c26b1b493baa 100644
--- a/packages/Keyguard/res/values-km-rKH/strings.xml
+++ b/packages/Keyguard/res/values-km-rKH/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"ដើម្បី​ដោះ​សោ​​ ចុច​ម៉ឺនុយ​ បន្ទាប់មក 0 ។"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"បាន​លើស​ការ​ព្យាយាម​ដោះ​សោ​តាម​ទម្រង់​មុខ"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"បាន​បញ្ចូល​​ពេញ"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"បញ្ចូល​ថ្ម <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"កំពុង​បញ្ចូល​ថ្ម"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"ភ្ជាប់​ឧបករណ៍​បញ្ចូល​ថ្ម​។"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ចុច​ម៉ឺនុយ ដើម្បី​ដោះ​សោ។"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"បណ្ដាញ​ជាប់​សោ"</string>
diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml
index cde2b1cd0b11..994c532a27c7 100644
--- a/packages/Keyguard/res/values-ko/strings.xml
+++ b/packages/Keyguard/res/values-ko/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"잠금해제하려면 메뉴를 누른 다음 0을 누릅니다."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"얼굴 인식 잠금해제 최대 시도 횟수를 초과했습니다."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"충전됨"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"충전 중(<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"충전 중"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"충전기를 연결하세요."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"잠금해제하려면 메뉴를 누르세요."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"네트워크 잠김"</string>
diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo-rLA/strings.xml
index 0571768b106a..cff4cd525492 100644
--- a/packages/Keyguard/res/values-lo-rLA/strings.xml
+++ b/packages/Keyguard/res/values-lo-rLA/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"ເພື່ອປົດລັອກ, ໃຫ້ກົດເມນູ ແລ້ວກົດ 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"ຄວາມພະຍາຍາມປົດລັອກດ້ວຍໜ້ານັ້ນ ເກີນຈຳນວນທີ່ກຳນົດແລ້ວ"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"ສາກເຕັມແລ້ວ"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"ກຳລັງສາກ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"ກຳລັງສາກໄຟ"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"ເຊື່ອມຕໍ່ອຸປະກອນສາກຂອງທ່ານ."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ກົດເມນູເພື່ອປົດລັອກ."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"ເຄືອຂ່າຍຖືກລັອກ"</string>
diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml
index 0fd6605e87b4..e9650768f85d 100644
--- a/packages/Keyguard/res/values-lt/strings.xml
+++ b/packages/Keyguard/res/values-lt/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Jei norite atrakinti, paspauskite „Meniu“ ir 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Viršijote maksimalų atrakinimo pagal veidą bandymų skaičių"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Įkrauta"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Įkraunama, <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Kraunama"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Prijunkite įkroviklį."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Jei norite atrakinti, paspauskite „Meniu“."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tinklas užrakintas"</string>
diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml
index 2bcde1d3e329..144fe8830550 100644
--- a/packages/Keyguard/res/values-lv/strings.xml
+++ b/packages/Keyguard/res/values-lv/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Lai atbloķētu, nospiediet Izvēlne, pēc tam 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Ir pārsniegts maksimālais Autorizācijas pēc sejas mēģinājumu skaits."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Uzlādēts"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Notiek uzlāde (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Notiek uzlāde"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Pievienojiet uzlādes ierīci."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Lai atbloķētu, nospiediet vienumu Izvēlne."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tīkls ir bloķēts."</string>
diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn-rMN/strings.xml
index 7bb819de2052..200e104e7462 100644
--- a/packages/Keyguard/res/values-mn-rMN/strings.xml
+++ b/packages/Keyguard/res/values-mn-rMN/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Тайлах бол Цэсийг дараад 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Нүүрээр түгжээ тайлах оролдлогын тоо дээд хэмжээнээс хэтэрсэн"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Цэнэглэгдэв"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Цэнэглэж байна, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Цэнэглэж байна"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Цэнэглэгчээ холбоно уу."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Тайлх бол цэсийг дарна уу."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сүлжээ түгжигдсэн"</string>
diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms-rMY/strings.xml
index b4c1b46b667d..0592b34edce8 100644
--- a/packages/Keyguard/res/values-ms-rMY/strings.xml
+++ b/packages/Keyguard/res/values-ms-rMY/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Telah melepasi had cubaan Buka Kunci Wajah"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Sudah dicas"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Mengecas"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Sambungkan pengecas anda."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka kunci."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rangkaian dikunci"</string>
diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml
index 801e03dc0800..44b9641ab504 100644
--- a/packages/Keyguard/res/values-nb/strings.xml
+++ b/packages/Keyguard/res/values-nb/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"For å låse opp, trykk på menyknappen og deretter 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Du har overskredet grensen for opplåsingsforsøk med Ansiktslås"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Oppladet"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Lader: <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Lader"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Koble til laderen."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Trykk på Meny for å låse opp."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Nettverk låst"</string>
diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml
index 195f950d7eed..5006f4916ff1 100644
--- a/packages/Keyguard/res/values-nl/strings.xml
+++ b/packages/Keyguard/res/values-nl/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Druk op \'Menu\' en vervolgens op 0 om te ontgrendelen."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximaal aantal pogingen voor Ontgrendelen via gezichtsherkenning overschreden"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Opgeladen"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Opladen, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Opladen"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Sluit de oplader aan."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Druk op \'Menu\' om te ontgrendelen."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Netwerk vergrendeld"</string>
diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml
index 165b2c4cee28..8e22a5a38e25 100644
--- a/packages/Keyguard/res/values-pl/strings.xml
+++ b/packages/Keyguard/res/values-pl/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Aby odblokować, naciśnij Menu, a następnie 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Przekroczono maksymalną liczbę prób rozpoznania twarzy."</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Naładowana"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Ładowanie (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Ładuje się"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Podłącz ładowarkę."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Naciśnij Menu, by odblokować."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Zablokowana sieć"</string>
diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml
index 332a94337657..443f4c251c26 100644
--- a/packages/Keyguard/res/values-pt-rPT/strings.xml
+++ b/packages/Keyguard/res/values-pt-rPT/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, prima Menu e, em seguida, 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Excedido o n.º máximo de tentativas de Desbloqueio Através do Rosto"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Carregado"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"A carregar, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"A carregar"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Ligue o carregador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Prima Menu para desbloquear."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rede bloqueada"</string>
diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml
index a97b1b6f72f1..f7d6c1b2a9a7 100644
--- a/packages/Keyguard/res/values-pt/strings.xml
+++ b/packages/Keyguard/res/values-pt/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear, pressione Menu e, em seguida, 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"O número máximo de tentativas de Desbloqueio por reconhecimento facial foi excedido"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Carregado"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Carregando, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Carregando"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Conecte seu carregador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pressione \"Menu\" para desbloquear."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rede bloqueada"</string>
diff --git a/packages/Keyguard/res/values-rm/strings.xml b/packages/Keyguard/res/values-rm/strings.xml
index 4d71f273447c..9ce72a458612 100644
--- a/packages/Keyguard/res/values-rm/strings.xml
+++ b/packages/Keyguard/res/values-rm/strings.xml
@@ -43,7 +43,7 @@
<skip />
<!-- no translation found for keyguard_charged (3272223906073492454) -->
<skip />
- <!-- no translation found for keyguard_plugged_in (8117572000639998388) -->
+ <!-- no translation found for keyguard_plugged_in (9087497435553252863) -->
<skip />
<!-- no translation found for keyguard_low_battery (8143808018719173859) -->
<skip />
diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml
index 58bc337ce854..2ab07b433d13 100644
--- a/packages/Keyguard/res/values-ro/strings.xml
+++ b/packages/Keyguard/res/values-ro/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Pentru a debloca, apăsaţi Meniu, apoi 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"S-a depăşit numărul maxim de încercări pentru Deblocare facială"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Încărcată"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Se încarcă, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Se încarcă"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Conectați încărcătorul."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Apăsați pe Meniu pentru a debloca."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rețea blocată"</string>
diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml
index 866abc003a62..56e9e54fd109 100644
--- a/packages/Keyguard/res/values-ru/strings.xml
+++ b/packages/Keyguard/res/values-ru/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Для разблокировки нажмите \"Меню\", а затем 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Все попытки войти с помощью Фейсконтроля использованы"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Батарея заряжена"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Идет зарядка (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Зарядка батареи"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Подключите зарядное устройство."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Для разблокировки нажмите \"Меню\"."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сеть заблокирована"</string>
diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml
index 45e4288a2ac4..de18f142ff2f 100644
--- a/packages/Keyguard/res/values-sk/strings.xml
+++ b/packages/Keyguard/res/values-sk/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Ak chcete telefón odomknúť, stlačte Menu a následne 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Prekročili ste maximálny povolený počet pokusov o odomknutie tvárou"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Batéria je nabitá"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nabíjanie, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Nabíja sa"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Pripojte nabíjačku."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Telefón odomknete stlačením tlačidla Menu."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Sieť je zablokovaná"</string>
diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml
index cf72e474c50b..981fb449fff5 100644
--- a/packages/Keyguard/res/values-sl/strings.xml
+++ b/packages/Keyguard/res/values-sl/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Če želite telefon odkleniti, pritisnite meni in nato 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Presegli ste dovoljeno število poskusov odklepanja z obrazom"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Napolnjeno"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Polnjenje, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Polnjenje"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Priključite napajalnik."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Če želite odkleniti, pritisnite meni."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Omrežje je zaklenjeno"</string>
diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml
index bd08eae17deb..b944237dc640 100644
--- a/packages/Keyguard/res/values-sr/strings.xml
+++ b/packages/Keyguard/res/values-sr/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Да бисте откључали, притисните „Мени“, а затим 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Премашен је највећи дозвољени број покушаја Откључавања лицем"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Напуњено"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Пуњење, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Пуњење"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Повежите пуњач."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Притисните Мени да бисте откључали."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мрежа је закључана"</string>
@@ -128,8 +128,8 @@
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Унели сте PIN неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Унели сте лозинку неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. \n\nПокушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити ресетован на фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Таблет ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Телефон ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште.\n\nПокушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml
index 1214100d4adf..a3c7295de9dc 100644
--- a/packages/Keyguard/res/values-sv/strings.xml
+++ b/packages/Keyguard/res/values-sv/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Tryck på Menu och sedan på 0 om du vill låsa upp."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Du har försökt låsa upp med Ansiktslås för många gånger"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Batteriet har laddats"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laddar, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Debitering"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Anslut din laddare."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tryck på Meny om du vill låsa upp."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Nätverk låst"</string>
diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml
index fc1ce174b085..ca2ce47decd4 100644
--- a/packages/Keyguard/res/values-sw/strings.xml
+++ b/packages/Keyguard/res/values-sw/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Ili kufungua, bofya Menyu kisha 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Majaribio ya Juu ya Kufungua Uso yamezidishwa"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Betri imejaa"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Inachaji, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Inachaji"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Unganisha chaja yako."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Bonyeza Menyu ili kufungua."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mtandao umefungwa"</string>
diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml
index 34d97c268363..368e0048e8fc 100644
--- a/packages/Keyguard/res/values-th/strings.xml
+++ b/packages/Keyguard/res/values-th/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"หากต้องการปลดล็อก กด เมนู ตามด้วย 0"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"มีความพยายามที่จะใช้ Face Unlock เกินขีดจำกัด"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"ชาร์จแล้ว"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"กำลังชาร์จ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"กำลังชาร์จ"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"เสียบที่ชาร์จของคุณ"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"กด \"เมนู\" เพื่อปลดล็อก"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"เครือข่ายล็อก"</string>
diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml
index 9d97d22c01d7..5a1090ae38fa 100644
--- a/packages/Keyguard/res/values-tl/strings.xml
+++ b/packages/Keyguard/res/values-tl/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Upang i-unlock, pindutin ang Menu pagkatapos ay 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nalagpasan na ang maximum na mga pagtatangka sa Face Unlock"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Na-charge"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Nagcha-charge, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Nagtsa-charge"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Ikonekta ang iyong charger."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Pindutin ang Menu upang i-unlock."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Naka-lock ang network"</string>
diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml
index 1d8b982754ea..e2c18926eedd 100644
--- a/packages/Keyguard/res/values-tr/strings.xml
+++ b/packages/Keyguard/res/values-tr/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmak için önce Menü\'ye, sonra 0\'a basın."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Yüz Tanıma Kilidi için maksimum deneme sayısı aşıldı"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Şarj oldu"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Şarj oluyor, <xliff:g id="PERCENT">%%</xliff:g><xliff:g id="NUMBER">%d</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Şarj oluyor"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Şarj cihazınızı takın."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Kilidi açmak için Menü\'ye basın."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Ağ kilitli"</string>
diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml
index 16cf6cfa920e..519aa4d5cf18 100644
--- a/packages/Keyguard/res/values-uk/strings.xml
+++ b/packages/Keyguard/res/values-uk/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Щоб розбл., натисн. меню та 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перевищено максимальну кількість спроб розблокування за допомогою функції \"Фейсконтроль\""</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Заряджено"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Заряджається, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Заряджається"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Підключіть зарядний пристрій."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Натисніть Меню, щоб розблокувати."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Мережу заблоковано"</string>
diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml
index 00693aa5dc78..58bda927bc0d 100644
--- a/packages/Keyguard/res/values-vi/strings.xml
+++ b/packages/Keyguard/res/values-vi/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Để mở khóa, hãy nhấn vào Trình đơn sau đó nhấn 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Đã vượt quá số lần Mở khóa bằng khuôn mặt tối đa"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Pin đầy"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Đang sạc, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Đang sạc"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Kết nối bộ sạc của bạn."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Nhấn vào Trình đơn để mở khóa."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Mạng đã bị khóa"</string>
diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml
index 1c014c34d859..09f521a66a75 100644
--- a/packages/Keyguard/res/values-zh-rCN/strings.xml
+++ b/packages/Keyguard/res/values-zh-rCN/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"要解锁,请先按 MENU 再按 0。"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超过“人脸解锁”尝试次数上限"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"充电完成"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"正在充电 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"正在充电"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"请连接充电器。"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按“菜单”键解锁。"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"网络已锁定"</string>
diff --git a/packages/Keyguard/res/values-zh-rHK/strings.xml b/packages/Keyguard/res/values-zh-rHK/strings.xml
index 1b621d60eeb9..280dea355086 100644
--- a/packages/Keyguard/res/values-zh-rHK/strings.xml
+++ b/packages/Keyguard/res/values-zh-rHK/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"如要解鎖,請按選單鍵,然後按 0。"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超過臉容解鎖嘗試次數上限"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"充電完成"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"充電中"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"請連接充電器。"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按選單鍵解鎖。"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"網絡已鎖定"</string>
diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml
index 6e632efaf366..349282c83a79 100644
--- a/packages/Keyguard/res/values-zh-rTW/strings.xml
+++ b/packages/Keyguard/res/values-zh-rTW/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"如要解鎖,請按 Menu 鍵,然後按 0。"</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超過人臉解鎖嘗試次數上限"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"充電完成"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"充電中"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"連接充電器。"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按選單鍵解鎖。"</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"網路已鎖定"</string>
diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml
index 95d3474239b1..c69bc180e645 100644
--- a/packages/Keyguard/res/values-zu/strings.xml
+++ b/packages/Keyguard/res/values-zu/strings.xml
@@ -32,7 +32,7 @@
<string name="keyguard_label_text" msgid="861796461028298424">"Ukuvula, chofoza Menyu bese 0."</string>
<string name="faceunlock_multiple_failures" msgid="754137583022792429">"Ukuzama Kokuvula Ubuso Okuningi kudluliwe"</string>
<string name="keyguard_charged" msgid="3272223906073492454">"Kushajiwe"</string>
- <string name="keyguard_plugged_in" msgid="8117572000639998388">"Iyashaja, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="keyguard_plugged_in" msgid="9087497435553252863">"Iyashaja"</string>
<string name="keyguard_low_battery" msgid="8143808018719173859">"Xhuma ishaja yakho."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Chofoza imenyu ukuze uvule."</string>
<string name="keyguard_network_locked_message" msgid="9169717779058037168">"Inethiwekhi ikhiyiwe"</string>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 286921ecff33..81a1b943a2b2 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2448,7 +2448,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
}
private String getDefaultDeviceName() {
- return mContext.getResources().getString(R.string.def_device_name, Build.BRAND,
+ return mContext.getResources().getString(R.string.def_device_name, Build.MANUFACTURER,
Build.MODEL);
}
}
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_lower_gradient.9.png b/packages/SystemUI/res/drawable-hdpi/recents_lower_gradient.9.png
new file mode 100644
index 000000000000..d4fdbf388a76
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/recents_lower_gradient.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_nav_bar_background.9.png b/packages/SystemUI/res/drawable-hdpi/recents_nav_bar_background.9.png
deleted file mode 100644
index 6cd1176c5fdc..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/recents_nav_bar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png
deleted file mode 100644
index 7ed4c78de97c..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
deleted file mode 100644
index 08c07b2bf5b1..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png
deleted file mode 100644
index 5ce8708db094..000000000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recents_lower_gradient.9.png b/packages/SystemUI/res/drawable-mdpi/recents_lower_gradient.9.png
new file mode 100644
index 000000000000..9fc1a3bffd57
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/recents_lower_gradient.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recents_nav_bar_background.9.png b/packages/SystemUI/res/drawable-mdpi/recents_nav_bar_background.9.png
deleted file mode 100644
index 7237f0991028..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/recents_nav_bar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png
deleted file mode 100644
index bd4e1ae0dfad..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png
deleted file mode 100644
index e82c6e43babc..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png
deleted file mode 100644
index bdf0f67d546e..000000000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_lower_gradient.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_lower_gradient.9.png
new file mode 100644
index 000000000000..f38de93264d3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/recents_lower_gradient.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_nav_bar_background.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_nav_bar_background.9.png
deleted file mode 100644
index 8d56a1d41b4c..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/recents_nav_bar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png
deleted file mode 100644
index 757dbf3be7c5..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
deleted file mode 100644
index d431dc2779aa..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png
deleted file mode 100644
index 461535cc24f3..000000000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/recents_lower_gradient.9.png b/packages/SystemUI/res/drawable-xxhdpi/recents_lower_gradient.9.png
new file mode 100644
index 000000000000..8194605e1646
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/recents_lower_gradient.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/recents_nav_bar_background.9.png b/packages/SystemUI/res/drawable-xxhdpi/recents_nav_bar_background.9.png
deleted file mode 100644
index aed300bd197c..000000000000
--- a/packages/SystemUI/res/drawable-xxhdpi/recents_nav_bar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth.png
deleted file mode 100644
index 17ffdb9a4128..000000000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png
deleted file mode 100644
index 6ec234eb8a0f..000000000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_no_sim.png
deleted file mode 100644
index 7b03a11d1acf..000000000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_no_sim.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_02.xml b/packages/SystemUI/res/drawable/ic_notify_zen.xml
index bb4465f36cf5..c46455b3f7ae 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_02.xml
+++ b/packages/SystemUI/res/drawable/ic_notify_zen.xml
@@ -15,14 +15,14 @@ Copyright (C) 2014 The Android Open Source Project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" >
<size
- android:width="64dp"
- android:height="64dp"/>
+ android:width="24dp"
+ android:height="24dp"/>
<viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
<path
android:fill="#FFFFFFFF"
- android:pathData="M12.0,4.0c-3.48,0.0 -6.3,2.82 -6.3,6.3C5.7,15.02 12.0,22.0 12.0,22.0s6.3,-6.98 6.3,-11.7C18.3,6.82 15.48,4.0 12.0,4.0zM12.0,12.55c-1.24,0.0 -2.25,-1.01 -2.25,-2.25S10.76,8.05 12.0,8.05c1.24,0.0 2.25,1.01 2.25,2.25S13.24,12.55 12.0,12.55z"/>
+ android:pathData="M4.0,24.0c0.0,11.0 9.0,20.0 20.0,20.0s20.0,-9.0 20.0,-20.0S35.0,4.0 24.0,4.0S4.0,13.0 4.0,24.0zM36.6,33.8L14.2,11.4C16.9,9.3 20.3,8.0 24.0,8.0c8.8,0.0 16.0,7.2 16.0,16.0C40.0,27.7 38.7,31.1 36.6,33.8zM8.0,24.0c0.0,-3.7 1.3,-7.1 3.4,-9.8L33.8,36.6C31.1,38.7 27.7,40.0 24.0,40.0C15.2,40.0 8.0,32.8 8.0,24.0z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_color_inversion.xml b/packages/SystemUI/res/drawable/ic_qs_color_inversion.xml
deleted file mode 100644
index dc30a53de115..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_color_inversion.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:fill="#FFFFFFFF"
- android:pathData="M18.939,7.244c-5.887,-5.885 -6.214,-6.214 -6.222,-6.222l-0.707,-0.737L5.088,7.207c-2.914,2.915 -3.74,6.629 -2.266,10.19c1.541,3.719 5.312,6.316 9.174,6.317l0.0,0.0c3.861,-0.001 7.636,-2.603 9.179,-6.328C22.646,13.834 21.832,10.138 18.939,7.244zM4.67,16.632c-1.149,-2.776 -0.481,-5.696 1.832,-8.011l5.494,-5.492c0.0,0.002 0.002,0.003 0.003,0.004l0.0,18.582c-0.001,0.0 -0.002,0.0 -0.003,0.0C8.922,21.714 5.91,19.624 4.67,16.632z"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml b/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml
new file mode 100644
index 000000000000..b6a5cadfe0c8
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml
@@ -0,0 +1,28 @@
+<!--
+Copyright (C) 2014 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" >
+ <size
+ android:width="64dp"
+ android:height="64dp"/>
+
+ <viewport
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
+
+ <path
+ android:fill="#4DFFFFFF"
+ android:pathData="M41.3,41.7L36.6,37.0L24.0,24.5l-7.1,-7.1L14.0,14.5L8.5,9.0L6.0,11.5l5.6,5.6c-5.1,6.3 -4.7,15.5 1.1,21.4c3.1,3.1 7.2,4.7 11.3,4.7c3.6,0.0 7.1,-1.2 10.1,-3.6l5.4,5.4l2.5,-2.5L41.3,41.7zM24.0,39.2c-3.2,0.0 -6.2,-1.2 -8.5,-3.5c-2.3,-2.3 -3.5,-5.3 -3.5,-8.5c0.0,-2.6 0.9,-5.1 2.4,-7.2l9.6,9.6L24.0,39.2zM24.0,10.2l0.0,9.2l14.5,14.5c2.7,-5.9 1.7,-13.1 -3.2,-18.0L24.0,4.5l0.0,0.0l0.0,0.0L16.6,12.0l2.8,2.8L24.0,10.2z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_04.xml b/packages/SystemUI/res/drawable/ic_qs_inversion_on.xml
index 0c0fb3b87e93..e8d59e0dad9d 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_04.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_inversion_on.xml
@@ -19,10 +19,10 @@ Copyright (C) 2014 The Android Open Source Project
android:height="64dp"/>
<viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
<path
android:fill="#FFFFFFFF"
- android:pathData="M12.0,10.0c-2.32,0.0 -4.2,1.88 -4.2,4.2C7.8,17.35 12.0,22.0 12.0,22.0s4.2,-4.65 4.2,-7.8C16.2,11.88 14.32,10.0 12.0,10.0zM12.0,15.7c-0.83,0.0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5c0.83,0.0 1.5,0.67 1.5,1.5S12.83,15.7 12.0,15.7z"/>
+ android:pathData="M35.3,15.9L24.0,4.5l0.0,0.0l0.0,0.0L12.7,15.9c-6.2,6.2 -6.2,16.4 0.0,22.6c3.1,3.1 7.2,4.7 11.3,4.7s8.2,-1.6 11.3,-4.7C41.6,32.2 41.6,22.1 35.3,15.9zM24.0,39.2L24.0,39.2c-3.2,0.0 -6.2,-1.2 -8.5,-3.5c-2.3,-2.3 -3.5,-5.3 -3.5,-8.5s1.2,-6.2 3.5,-8.5l8.5,-8.5L24.0,39.2z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_05.xml b/packages/SystemUI/res/drawable/ic_qs_location_05.xml
deleted file mode 100644
index 1a21e2f1cc6e..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_05.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:fill="#FFFFFFFF"
- android:pathData="M12.0,13.0c-1.74,0.0 -3.15,1.41 -3.15,3.15C8.85,18.51 12.0,22.0 12.0,22.0s3.15,-3.49 3.15,-5.85C15.15,14.41 13.74,13.0 12.0,13.0zM12.0,17.27c-0.62,0.0 -1.13,-0.5 -1.13,-1.12c0.0,-0.62 0.5,-1.12 1.13,-1.12c0.62,0.0 1.12,0.5 1.12,1.12C13.12,16.77 12.62,17.27 12.0,17.27z"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_06.xml b/packages/SystemUI/res/drawable/ic_qs_location_06.xml
deleted file mode 100644
index 5642a8a2a7e7..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_06.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:fill="#FFFFFFFF"
- android:pathData="M12.0,16.0c-1.16,0.0 -2.1,0.94 -2.1,2.1C9.9,19.67 12.0,22.0 12.0,22.0s2.1,-2.33 2.1,-3.9C14.1,16.94 13.16,16.0 12.0,16.0zM12.0,18.85c-0.41,0.0 -0.75,-0.34 -0.75,-0.75s0.34,-0.75 0.75,-0.75c0.41,0.0 0.75,0.34 0.75,0.75S12.41,18.85 12.0,18.85z"/>
- <path
- android:pathData="M11.99,15c-1.35,0,-2.45,1.1,-2.45,2.45 c0,1.84,2.45,4.55,2.45,4.55s2.45,-2.71,2.45,-4.55C14.44,16.1,13.34,15,11.99,15z M11.99,18.33c-0.48,0,-0.88,-0.39,-0.88,-0.88 s0.39,-0.88,0.88,-0.88c0.48,0,0.87,0.39,0.87,0.88S12.47,18.33,11.99,18.33z"
- android:fill="#4DFFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_07.xml b/packages/SystemUI/res/drawable/ic_qs_location_07.xml
deleted file mode 100644
index 1ad2ebc7fdda..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_07.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:pathData="M12,9c-2.51,0,-4.55,2.04,-4.55,4.55 C7.45,16.96,12,22,12,22s4.55,-5.04,4.55,-8.45C16.55,11.04,14.51,9,12,9z M12,15.18c-0.9,0,-1.63,-0.73,-1.63,-1.62 s0.73,-1.62,1.63,-1.62c0.9,0,1.62,0.73,1.62,1.62S12.9,15.18,12,15.18z"
- android:fill="#4DFFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_09.xml b/packages/SystemUI/res/drawable/ic_qs_location_09.xml
deleted file mode 100644
index 6169af57c5f9..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_09.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:pathData="M12,4c-3.48,0,-6.3,2.82,-6.3,6.3 C5.7,15.02,12,22,12,22s6.3,-6.98,6.3,-11.7C18.3,6.82,15.48,4,12,4z M12,12.55c-1.24,0,-2.25,-1.01,-2.25,-2.25S10.76,8.05,12,8.05 c1.24,0,2.25,1.01,2.25,2.25S13.24,12.55,12,12.55z"
- android:fill="#4DFFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_10.xml b/packages/SystemUI/res/drawable/ic_qs_location_10.xml
deleted file mode 100644
index 93e2eb46b050..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_10.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:pathData="M12,3C8.33,3,5.35,5.98,5.35,9.65 C5.35,14.64,12,22,12,22s6.65,-7.36,6.65,-12.35C18.65,5.98,15.67,3,12,3z M12,12.02c-1.31,0,-2.38,-1.06,-2.38,-2.38 S10.69,7.28,12,7.28c1.31,0,2.37,1.06,2.37,2.37S13.31,12.02,12,12.02z"
- android:fill="#4DFFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_11.xml b/packages/SystemUI/res/drawable/ic_qs_location_11.xml
deleted file mode 100644
index 09a3e630bc95..000000000000
--- a/packages/SystemUI/res/drawable/ic_qs_location_11.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (C) 2014 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" >
- <size
- android:width="64dp"
- android:height="64dp"/>
-
- <viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
-
- <path
- android:pathData="M12,2C8.13,2,5,5.13,5,9c0,5.25,7,13,7,13s7,-7.75,7,-13 C19,5.13,15.87,2,12,2z M12,11.5c-1.38,0,-2.5,-1.12,-2.5,-2.5s1.12,-2.5,2.5,-2.5c1.38,0,2.5,1.12,2.5,2.5S13.38,11.5,12,11.5z"
- android:fill="#4DFFFFFF"/>
-</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_off.xml b/packages/SystemUI/res/drawable/ic_qs_location_off.xml
index d28d3475218a..26ebfbf050b1 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_off.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_location_off.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
@@ -14,18 +13,19 @@ Copyright (C) 2014 The Android Open Source Project
See the License for the specific language governing permissions and
limitations under the License.
-->
-<animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/ic_qs_location_01" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_02" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_03" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_04" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_05" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_06" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_07" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_08" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_09" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_10" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_11" android:duration="16" />
-</animation-list>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+ <size
+ android:width="64dp"
+ android:height="64dp"/>
+
+ <viewport
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
+
+ <path
+ android:fill="#4DFFFFFF"
+ android:pathData="M24.0,13.0c2.8,0.0 5.0,2.2 5.0,5.0c0.0,1.5 -0.7,2.8 -1.7,3.7l7.3,7.3c2.0,-3.7 3.4,-7.6 3.4,-11.0c0.0,-7.7 -6.3,-14.0 -14.0,-14.0c-4.0,0.0 -7.5,1.6 -10.1,4.3l6.4,6.4C21.2,13.6 22.5,13.0 24.0,13.0zM32.7,32.2l-9.3,-9.3l-0.2,-0.2L6.5,6.0L4.0,8.5l6.4,6.4c-0.2,1.0 -0.4,2.0 -0.4,3.1c0.0,10.5 14.0,26.0 14.0,26.0s3.3,-3.7 6.8,-8.7l6.7,6.7l2.5,-2.5L32.7,32.2z"/>
+ <path
+ android:pathData="M23.5,22.9l0.0,0.0 -0.20000076,-0.19999886z"
+ android:fill="#4DFFFFFF"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_on.xml b/packages/SystemUI/res/drawable/ic_qs_location_on.xml
index 72512ac48fce..bc73005ff891 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_on.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_location_on.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
@@ -14,18 +13,16 @@ Copyright (C) 2014 The Android Open Source Project
See the License for the specific language governing permissions and
limitations under the License.
-->
-<animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/ic_qs_location_11" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_10" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_09" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_08" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_07" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_06" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_05" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_04" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_03" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_02" android:duration="16" />
- <item android:drawable="@drawable/ic_qs_location_01" android:duration="16" />
-</animation-list>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+ <size
+ android:width="64dp"
+ android:height="64dp"/>
+
+ <viewport
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
+
+ <path
+ android:fill="#FFFFFFFF"
+ android:pathData="M24.0,4.0c-7.7,0.0 -14.0,6.3 -14.0,14.0c0.0,10.5 14.0,26.0 14.0,26.0s14.0,-15.5 14.0,-26.0C38.0,10.3 31.7,4.0 24.0,4.0zM24.0,23.0c-2.8,0.0 -5.0,-2.2 -5.0,-5.0s2.2,-5.0 5.0,-5.0c2.8,0.0 5.0,2.2 5.0,5.0S26.8,23.0 24.0,23.0z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml b/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml
deleted file mode 100644
index ce3372ee0f9b..000000000000
--- a/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:state_pressed="true" android:drawable="@drawable/notification_item_background_color_pressed" />
- <item android:state_pressed="false" android:drawable="@drawable/notification_item_background_legacy_color" />
-</selector>
diff --git a/packages/SystemUI/res/drawable/qs_panel_background.xml b/packages/SystemUI/res/drawable/qs_panel_background.xml
index a1a53629abd1..74876f7b55d5 100644
--- a/packages/SystemUI/res/drawable/qs_panel_background.xml
+++ b/packages/SystemUI/res/drawable/qs_panel_background.xml
@@ -16,5 +16,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/system_primary_color" />
<corners
- android:radius="@*android:dimen/notification_quantum_rounded_rect_radius"/>
+ android:radius="@*android:dimen/notification_material_rounded_rect_radius"/>
</shape>
diff --git a/packages/SystemUI/res/drawable/ripple_drawable.xml b/packages/SystemUI/res/drawable/ripple_drawable.xml
index d2bff42c711c..af7941ff9ffb 100644
--- a/packages/SystemUI/res/drawable/ripple_drawable.xml
+++ b/packages/SystemUI/res/drawable/ripple_drawable.xml
@@ -16,6 +16,4 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="?android:attr/colorControlHighlight"
- android:tintMode="src_over"
- android:pinned="true" />
+ android:color="?android:attr/colorControlHighlight" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_01.xml b/packages/SystemUI/res/drawable/stat_sys_data_bluetooth.xml
index ff37d9a82e1f..e28490bfb890 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_01.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_data_bluetooth.xml
@@ -15,14 +15,14 @@ Copyright (C) 2014 The Android Open Source Project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" >
<size
- android:width="64dp"
- android:height="64dp"/>
+ android:width="18dp"
+ android:height="18dp"/>
<viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
<path
android:fill="#FFFFFFFF"
- android:pathData="M12.0,2.0C8.13,2.0 5.0,5.13 5.0,9.0c0.0,5.25 7.0,13.0 7.0,13.0s7.0,-7.75 7.0,-13.0C19.0,5.13 15.87,2.0 12.0,2.0zM12.0,11.5c-1.38,0.0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5c1.38,0.0 2.5,1.12 2.5,2.5S13.38,11.5 12.0,11.5z"/>
+ android:pathData="M35.4,15.4L24.0,4.0l-2.0,0.0l0.0,15.2L12.8,10.0L10.0,12.8L21.2,24.0L10.0,35.2l2.8,2.8l9.2,-9.2L22.0,44.0l2.0,0.0l11.4,-11.4L26.8,24.0L35.4,15.4zM26.0,11.7l3.8,3.8L26.0,19.2L26.0,11.7zM29.8,32.6L26.0,36.3l0.0,-7.5L29.8,32.6z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_03.xml b/packages/SystemUI/res/drawable/stat_sys_data_bluetooth_connected.xml
index 956a8c348a9d..c012d14a7fba 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_03.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_data_bluetooth_connected.xml
@@ -15,14 +15,14 @@ Copyright (C) 2014 The Android Open Source Project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" >
<size
- android:width="64dp"
- android:height="64dp"/>
+ android:width="18dp"
+ android:height="18dp"/>
<viewport
- android:viewportWidth="24.0"
- android:viewportHeight="24.0"/>
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0"/>
<path
android:fill="#FFFFFFFF"
- android:pathData="M12.0,7.0c-2.9,0.0 -5.25,2.35 -5.25,5.25C6.75,16.19 12.0,22.0 12.0,22.0s5.25,-5.81 5.25,-9.75C17.25,9.35 14.9,7.0 12.0,7.0zM12.0,14.12c-1.04,0.0 -1.88,-0.84 -1.88,-1.88s0.84,-1.88 1.88,-1.88c1.04,0.0 1.87,0.84 1.87,1.88S13.04,14.12 12.0,14.12z"/>
+ android:pathData="M14.0,24.0l-4.0,-4.0l-4.0,4.0l4.0,4.0L14.0,24.0zM35.4,15.4L24.0,4.0l-2.0,0.0l0.0,15.2L12.8,10.0L10.0,12.8L21.2,24.0L10.0,35.2l2.8,2.8l9.2,-9.2L22.0,44.0l2.0,0.0l11.4,-11.4L26.8,24.0L35.4,15.4zM26.0,11.7l3.8,3.8L26.0,19.2L26.0,11.7zM29.8,32.6L26.0,36.3l0.0,-7.5L29.8,32.6zM38.0,20.0l-4.0,4.0l4.0,4.0l4.0,-4.0L38.0,20.0z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_location_08.xml b/packages/SystemUI/res/drawable/stat_sys_no_sim.xml
index 179bc6646741..70948b7f4d5f 100644
--- a/packages/SystemUI/res/drawable/ic_qs_location_08.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_no_sim.xml
@@ -15,14 +15,14 @@ Copyright (C) 2014 The Android Open Source Project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android" >
<size
- android:width="64dp"
- android:height="64dp"/>
+ android:width="18dp"
+ android:height="18dp"/>
<viewport
android:viewportWidth="24.0"
android:viewportHeight="24.0"/>
<path
- android:pathData="M12,6c-3.09,0,-5.6,2.51,-5.6,5.6 C6.4,15.8,12,22,12,22s5.6,-6.2,5.6,-10.4C17.6,8.51,15.09,6,12,6z M12,13.6c-1.1,0,-2,-0.9,-2,-2s0.9,-2,2,-2c1.1,0,2,0.9,2,2 S13.1,13.6,12,13.6z"
- android:fill="#4DFFFFFF"/>
+ android:fill="#4DFFFFFF"
+ android:pathData="M19.0,5.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0l-7.0,0.0L7.7,5.3L19.0,16.7L19.0,5.0zM3.7,3.9L2.4,5.2L5.0,7.8L5.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l10.0,0.0c0.4,0.0 0.7,-0.1 1.0,-0.3l1.9,1.9l1.3,-1.3L3.7,3.9z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/status_bar_item_background.xml b/packages/SystemUI/res/drawable/status_bar_item_background.xml
deleted file mode 100644
index 3a50aa957b03..000000000000
--- a/packages/SystemUI/res/drawable/status_bar_item_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:opacity="translucent"
- >
- <item
- android:drawable="@drawable/notification_item_background_color"
- />
-</layer-list>
-
diff --git a/packages/SystemUI/res/drawable/ticker_background.xml b/packages/SystemUI/res/drawable/ticker_background.xml
deleted file mode 100644
index 7320fa0de803..000000000000
--- a/packages/SystemUI/res/drawable/ticker_background.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:opacity="translucent"
- >
- <!-- the large icon extends 12dp beyond the edge of the status bar -->
- <item
- android:drawable="@drawable/notification_item_background_color"
- android:top="12dp"
- />
-</layer-list>
-
diff --git a/packages/SystemUI/res/layout/recents_nav_bar_scrim.xml b/packages/SystemUI/res/layout/recents_nav_bar_scrim.xml
index 463fee81f8b4..4245d49ad857 100644
--- a/packages/SystemUI/res/layout/recents_nav_bar_scrim.xml
+++ b/packages/SystemUI/res/layout/recents_nav_bar_scrim.xml
@@ -20,4 +20,4 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:scaleType="fitXY"
- android:src="@drawable/recents_nav_bar_background" /> \ No newline at end of file
+ android:src="@drawable/recents_lower_gradient" /> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index eaa255863395..aa62daa22a19 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -111,47 +111,13 @@
/>
</LinearLayout>
</LinearLayout>
-
- <LinearLayout android:id="@+id/ticker"
+
+ <ViewStub
+ android:id="@+id/ticker_stub"
+ android:inflatedId="@+id/ticker"
+ android:layout="@layout/status_bar_ticker"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingStart="6dip"
- android:animationCache="false"
- android:orientation="horizontal" >
- <ImageSwitcher android:id="@+id/tickerIcon"
- android:layout_width="@dimen/status_bar_icon_size"
- android:layout_height="@dimen/status_bar_icon_size"
- android:layout_marginEnd="4dip"
- >
- <com.android.systemui.statusbar.AnimatedImageView
- android:layout_width="@dimen/status_bar_icon_size"
- android:layout_height="@dimen/status_bar_icon_size"
- android:scaleType="center"
- />
- <com.android.systemui.statusbar.AnimatedImageView
- android:layout_width="@dimen/status_bar_icon_size"
- android:layout_height="@dimen/status_bar_icon_size"
- android:scaleType="center"
- />
- </ImageSwitcher>
- <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:paddingTop="2dip"
- android:paddingEnd="10dip">
- <TextView
- android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- />
- <TextView
- android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- />
- </com.android.systemui.statusbar.phone.TickerView>
- </LinearLayout>
+ />
+
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
index 7f34041bca07..4028ec336422 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
@@ -75,10 +75,11 @@
/>
<ImageButton android:id="@+id/settings_button"
- style="@android:style/Widget.Quantum.Button.Borderless"
+ style="@android:style/Widget.Material.Button.Borderless"
android:layout_toStartOf="@id/multi_user_switch"
- android:layout_width="56dp"
+ android:layout_width="48dp"
android:layout_height="@dimen/status_bar_header_height"
+ android:layout_marginStart="8dp"
android:src="@drawable/ic_settings_24dp"
android:contentDescription="@string/accessibility_desc_quick_settings"/>
@@ -86,14 +87,14 @@
android:layout_width="wrap_content"
android:layout_height="@dimen/status_bar_header_height"
android:layout_toStartOf="@id/multi_user_switch"
- android:layout_marginEnd="4dp"
+ android:layout_marginEnd="2dp"
/>
<com.android.keyguard.CarrierText
android:id="@+id/keyguard_carrier_text"
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_header_height_keyguard"
- android:layout_marginLeft="8dp"
+ android:layout_marginLeft="16dp"
android:layout_toStartOf="@id/system_icons_container"
android:gravity="center_vertical"
android:ellipsize="marquee"
diff --git a/packages/SystemUI/res/layout/status_bar_notification_speed_bump.xml b/packages/SystemUI/res/layout/status_bar_notification_speed_bump.xml
index 84d64b9c4894..e220a16d0ad2 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_speed_bump.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_speed_bump.xml
@@ -18,48 +18,13 @@
<com.android.systemui.statusbar.SpeedBumpView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:focusable="true"
- android:clickable="true"
+ android:layout_height="@dimen/speed_bump_height"
android:visibility="gone"
>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="@dimen/speed_bump_height_collapsed"
- android:layout_gravity="top"
- android:orientation="horizontal">
- <com.android.systemui.statusbar.AlphaOptimizedView
- android:id="@+id/speedbump_line_left"
- android:layout_width="0dp"
- android:layout_height="1dp"
- android:layout_weight="1"
- android:background="#6fdddddd"
- android:layout_gravity="center_vertical"/>
- <com.android.systemui.statusbar.SpeedBumpDotsLayout
- android:id="@+id/speed_bump_dots_layout"
- android:layout_width="34dp"
- android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp"
- android:layout_height="match_parent"
- android:layout_weight="0"/>
- <com.android.systemui.statusbar.AlphaOptimizedView
- android:id="@+id/speedbump_line_right"
- android:layout_width="0dp"
- android:layout_height="1dp"
- android:layout_weight="1"
- android:background="#6fdddddd"
- android:layout_gravity="center_vertical"/>
- </LinearLayout>
- <TextView
- android:id="@+id/speed_bump_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top|center_horizontal"
- android:fontFamily="sans-serif-condensed"
- android:textSize="15sp"
- android:singleLine="true"
- android:textColor="#eeeeee"
- android:visibility="invisible"
- android:text="@string/speed_bump_explanation"
- android:paddingTop="4dp" />
+ <com.android.systemui.statusbar.AlphaOptimizedView
+ android:id="@+id/speedbump_line"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="#6fdddddd"
+ android:layout_gravity="center_vertical"/>
</com.android.systemui.statusbar.SpeedBumpView>
diff --git a/packages/SystemUI/res/layout/status_bar_ticker.xml b/packages/SystemUI/res/layout/status_bar_ticker.xml
new file mode 100644
index 000000000000..dd9b3efe5f43
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_ticker.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ - Copyright 2014, The Android Open Source Project
+ -
+ - Licensed under the Apache License, Version 2.0 (the "License");
+ - you may not use this file except in compliance with the License.
+ - You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing, software
+ - distributed under the License is distributed on an "AS IS" BASIS,
+ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ - See the License for the specific language governing permissions and
+ - limitations under the License.
+ -->
+<LinearLayout android:id="@+id/ticker"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingStart="6dip"
+ android:animationCache="false"
+ android:orientation="horizontal">
+
+ <ImageSwitcher android:id="@+id/tickerIcon"
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:layout_marginEnd="4dip"
+ >
+ <com.android.systemui.statusbar.AnimatedImageView
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:scaleType="center"
+ />
+ <com.android.systemui.statusbar.AnimatedImageView
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:scaleType="center"
+ />
+ </ImageSwitcher>
+ <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:paddingTop="2dip"
+ android:paddingEnd="10dip">
+ <TextView
+ android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ />
+ <TextView
+ android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ />
+ </com.android.systemui.statusbar.phone.TickerView>
+</LinearLayout>
+
diff --git a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
index 7671c354a2f4..1928506de07a 100644
--- a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
+++ b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
@@ -28,7 +28,7 @@
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:button="@null"
- android:background="@*android:drawable/switch_track_quantum"
+ android:background="@*android:drawable/switch_track_material"
android:visibility="gone"
/>
<com.android.systemui.settings.ToggleSeekBar
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index c64262637258..a2ef9e66d6e5 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Aan."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Af"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Gekoppel."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Koppel tans."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> toestelle)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth af"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Outoroteer"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasie gesluit"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Gesluit op portret"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Gesluit op landskap"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Outo-draai"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotasie is gesluit"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portret"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landskap"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermetode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Ligging"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ligging af"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nie gekoppel nie"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk nie"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Saai na skerm uit"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Uitsaaiskerm"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Keer kleure om"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak om te wys"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Moenie steur nie"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d meer"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Minder dringende kennisgewings hieronder"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tik weer om oop te maak"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Sleep op om te ontsluit"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Sleep regs vir foon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Sleep links vir kamera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Totdat jy dit afskakel"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laai tans (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Een minuut lank"</item>
<item quantity="other" msgid="6924190729213550991">"%d minute lank"</item>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index d864f9f36de1..6aeb6d61b02f 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"በርቷል።"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"ጠፍቷል።"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ተገናኝቷል።"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"በማገናኘት ላይ።"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ብሉቱዝ (<xliff:g id="NUMBER">%d</xliff:g> መሣሪያዎች)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ብሉቱዝ ጠፍቷል"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ብሩህነት"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ራስ-አዙር"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"አዙሪት ተቆልፏል"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ወደ ቁመት አቀማመጥ ተቆልፏል"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ወደ መሬት ገጽታ ተቆልፏል"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"በራስ ሰር አሽከርክር"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"አዙሪት ተቆልፏል"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ምስል ገላጭ"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"በወርድ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"የግቤት ስልት"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"አካባቢ"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"አካባቢ ጠፍቷል"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"አልተገናኘም"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ምንም አውታረ መረብ የለም"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ጠፍቷል"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ማያ ገጽ ውሰድ"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"ማያ ገጽ ውሰድ"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ብሩህነት"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ራስ-ሰር"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"ቀለማትን ግልብጥ"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"ለማሳየት ነካ ያድርጉ"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"አይረብሹ"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d ተጨማሪ"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"በጣም አስቸካይ ያልሆኑ ማሳወቂያዎች ከታች"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"ለመክፈት ዳግም መታ ያድርጉ"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"ለማስከፈት ወደ ላይ ያንሸራትቱ"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"ለስልክ ወደቀኝ ያንሸራትቱ"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"ለካሜራ ወደግራ ያንሸራትቱ"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"ይህን እስኪያጠፉት ድረስ"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ሃይል በመሙላት ላይ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> እስከሚሞላ ድረስ)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"ለአንድ ደቂቃ"</item>
<item quantity="other" msgid="6924190729213550991">"ለ%d ደቂቃዎች"</item>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 3906bfacdb2e..1aec6fdf5079 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"تم التشغيل."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"تم الإيقاف."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"متصل."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"جارٍ الاتصال."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1‎ X‎"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"بلوتوث (<xliff:g id="NUMBER">%d</xliff:g> من الأجهزة)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"إيقاف البلوتوث"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"السطوع"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"تدوير تلقائي"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"تم قفل التدوير"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"تم القفل على الوضع العمودي"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"تم القفل على الوضع الأفقي"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"دوران تلقائي"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"تم قفل التدوير"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"عمودي"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"أفقي"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"أسلوب الإدخال"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"الموقع"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"الموقع قيد الإيقاف"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ليست متصلة"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏إيقاف Wi-Fi"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"بث الشاشة"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"‏شاشة Cast"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"السطوع"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"تلقائي"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"قلب الألوان"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"المس للعرض"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"الرجاء عدم الإزعاج"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"‏%d أخرى"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"الإشعارات الأقل إلحاحًا أدناه"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"انقر مرة أخرى للفتح"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"مرر سريعًا لأعلى لإلغاء القفل"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"مرر سريعًا إلى اليسار لفتح الهاتف"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"مرر سريعًا إلى اليمين لفتح الكاميرا"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"لحين تعطيل هذا الإعداد"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"جارٍ الشحن (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الامتلاء)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"لمدة دقيقة واحدة"</item>
<item quantity="other" msgid="6924190729213550991">"‏لمدة %d من الدقائق"</item>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 6ef23ad06114..e16cdd33bd3b 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Вкл."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Изкл."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Има връзка."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Установява се връзка."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> устройства)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth е изключен"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркост"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автоматична ориентация"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ориентацията е заключена"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Заключено във вертикален режим"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Заключено в хоризонтален режим"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматична ориентация"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Ориентацията е заключена"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Вертикален режим"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Хоризонтален режим"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод на въвеждане"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Местоположение"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Местоположението е изключено"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Няма връзка"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма мрежа"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е изключен"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Екран за предаване"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Екран за предаване"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркост"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТ."</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Обръщане на цветовете"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Докоснете за показване"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Не ме безпокойте"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Още %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Ппоказване на по-малко спешните известия по-долу"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Докоснете отново, за да отворите"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Прекарайте пръст нагоре, за да отключите"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Прекарайте пръст надясно, за да използвате телефона"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Прекарайте пръст наляво, за да включите камерата"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Докато не изключите това"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарежда се (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"За една минута"</item>
<item quantity="other" msgid="6924190729213550991">"За %d минути"</item>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 9e3495ef6184..ad08dab67aba 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activat."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desactivat."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connectat."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"S’està connectant."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositius)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivat"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillantor"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotació automàtica"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotació bloquejada"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloquejat en mode vertical"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloquejat en mode horitzontal"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotació automàtica"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotació bloquejada"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertical"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horitzontal"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Mètode d\'entrada"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicació"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicació desactivada"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Desconnectat"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectada"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Pantalla d\'emissió"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Pantalla d\'emissió"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillantor"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÀTICA"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverteix els colors"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca per mostrar-ho."</string>
<string name="zen_mode_title" msgid="8793432092004749188">"No molesteu"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d més"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacions menys urgents a continuació"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Torna a tocar per obrir-la."</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Fes lliscar el dit cap amunt per desbloquejar el teclat."</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Fes lliscar el dit cap a la dreta per obrir el telèfon."</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Fes lliscar el dit cap a l\'esquerra per obrir la càmera."</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Fins que no ho desactivis"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la càrrega)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Durant un minut"</item>
<item quantity="other" msgid="6924190729213550991">"Durant %d minuts"</item>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 6050da49a3d3..5a08251d1277 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Zapnuto."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Vypnuto."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Připojeno."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Připojování."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> zařízení)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhraní Bluetooth je vypnuto"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jas"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatické otáčení"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Otáčení je uzamčeno"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Uzamčen režim na výšku"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Uzamčen režim na šířku"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatické otáčení"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Otáčení je uzamčeno"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Na výšku"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Na šířku"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metoda zadávání dat"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Poloha"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Poloha vypnuta"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nepřipojeno"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žádná síť"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi vypnuta"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Vzdálená obrazovka"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Odesílání obrazovky"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jas"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATICKY"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Převrátit barvy"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Oznámení zobrazíte kliknutím"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Nerušit"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Další: %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Méně urgentní oznámení níže"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Oznámení otevřete opětovným klepnutím"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Zařízení odemknete přejetím prstem nahoru"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Telefon otevřete přejetím prstem vpravo."</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Fotoaparát otevřete přejetím prstem vlevo."</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Dokud tuto funkci nevypnete"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Na jednu minutu"</item>
<item quantity="other" msgid="6924190729213550991">"Na %d min"</item>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 830bebf28895..50c3dbb362ba 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Til."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Fra."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Forbundet."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Opretter forbindelse..."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheder)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth slået fra"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatisk rotation"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation er låst"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Altid stående"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Altid liggende"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Roter automatisk"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotationen er låst"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Stående"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Liggende"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Inputmetode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Placering"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Placering fra"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke forbundet"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast skærm"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Skærm til casting"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Byt om på farver"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryk for at vise"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Vil ikke forstyrres"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d mere"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende underretninger nedenfor"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tryk igen for at åbne"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Stryg for at låse op"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Stryg til højre for at bruge telefonen"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Stryg til venstre for at åbne kameraet"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Indtil du slår denne indstilling fra"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Opladning (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"I ét minut"</item>
<item quantity="other" msgid="6924190729213550991">"I %d minutter"</item>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 72c9d64e05d5..27523d80b92b 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"An"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Aus"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Verbunden"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Verbindung wird hergestellt."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Geräte)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth aus"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helligkeit"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Autom. drehen"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Drehung gesperrt"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Auf Hochformat gesperrt"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Auf Querformat gesperrt"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatisch drehen"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Drehung gesperrt"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Hochformat"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Querformat"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Eingabemethode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Standort"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Standort aus"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nicht verbunden"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Kein Netz"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN aus"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Bildschirm übertragen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Bildschirmübertragung"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helligkeit"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Farben umkehren"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Zum Ansehen tippen"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Nicht stören"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d mehr"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Weniger dringende Benachrichtigungen unten"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Erneut tippen, um Benachrichtigung zu öffnen"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Zum Entsperren nach oben wischen"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Zum Öffnen des Telefons nach rechts wischen"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Zum Öffnen der Kamera nach links wischen"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Bis zur Deaktivierung"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Wird aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Für eine Minute"</item>
<item quantity="other" msgid="6924190729213550991">"Für %d Minuten"</item>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 2d3f246c9f7a..c0d586ed9bdf 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Ενεργό."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Ανενεργό."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Έχει συνδεθεί."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Σύνδεση."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> συσκευές)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Απενεργοποιημένο Bluetooth"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Φωτεινότητα"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Αυτόματη περιστροφή"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Η περιστροφή είναι κλειδωμένη"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Κλειδωμένο στην κατακόρυφη προβολή"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Κλειδωμένο στην οριζόντια προβολή"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Αυτόματη περιστροφή"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Η περιστροφή είναι κλειδωμένη"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Κατακόρυφα"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Οριζόντια"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Μέθοδος εισαγωγής"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Τοποθεσία"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Τοποθεσία απενεργοποιημένη"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Μη συνδεδεμένο"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Κανένα δίκτυο"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ανενεργό"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Μετάδοση οθόνης"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Μετάδοση οθόνης"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Φωτεινότητα"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ΑΥΤΟΜΑΤΗ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Αντιστροφή χρωμάτων"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Αγγίξτε για εμφάνιση"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Μην ενοχλείτε"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d ακόμη"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Λιγότερο επείγουσες ειδοποιήσεις παρακάτω"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Πατήστε ξανά για να ανοίξετε"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Σύρετε για να ξεκλειδώσετε"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Σύρετε προς τα δεξιά για το τηλέφωνο"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Σύρετε αριστερά για τη φωτογραφική μηχανή"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Μέχρι να το απενεργοποιήσετε"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Για ένα λεπτό"</item>
<item quantity="other" msgid="6924190729213550991">"Για %d λεπτά"</item>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 66233ccdc242..df8698c8db3d 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Rotate"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation Locked"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Locked to Portrait"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Locked to Landscape"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Auto-rotate"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation locked"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Cast screen"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invert colours"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Do not disturb"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d more"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tap again to open"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Until you turn this off"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"For one minute"</item>
<item quantity="other" msgid="6924190729213550991">"For %d minutes"</item>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 66233ccdc242..df8698c8db3d 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Rotate"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation Locked"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Locked to Portrait"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Locked to Landscape"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Auto-rotate"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation locked"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Cast screen"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invert colours"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Do not disturb"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d more"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tap again to open"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Until you turn this off"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"For one minute"</item>
<item quantity="other" msgid="6924190729213550991">"For %d minutes"</item>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 0810ee7929e3..5ce867e39de0 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activado"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desactivado"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automáticamente"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotación bloqueada"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueada en vertical"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueada en horizontal"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotación automática"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotación bloqueada"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertical"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horizontal"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de introducción"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicación"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicación desactivada"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Sin conexión"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sin red"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivada"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Pantalla de Cast"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Transmitir pantalla"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillo"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÁTICO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertir colores"</string>
@@ -215,8 +214,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Anclaje a red"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notificaciones"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"No hay aplicaciones recientes."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Es posible que la red\nesté supervisada."</string>
@@ -229,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d más"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgentes abajo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Presionar de nuevo para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar el dedo hacia arriba para desbloquear"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Desliza hacia la derecha para abrir el teléfono."</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Desliza hacia la izquierda para acceder a la cámara."</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Hasta que lo desactives"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (faltan <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Durante un minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Durante %d minutos"</item>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index ad92c241cd89..c25e5cd35bfd 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Sí"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"No"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automáticamente"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotación bloqueada"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado en vertical"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado en horizontal"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Girar automáticamente"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotación bloqueada"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertical"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horizontal"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicación"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicación desactivada"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"No conectado"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hay red."</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivado"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Enviar contenido a pantalla"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Pantalla de Cast"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillo"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertir colores"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d más"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgente abajo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Toca de nuevo para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Desliza el dedo hacia arriba para desbloquear"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Desliza el dedo hacia la izquierda para acceder al teléfono"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Desliza el dedo hacia la izquierda para acceder a la cámara"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Hasta apagar el dispositivo"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hasta completar)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Durante un minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Durante %d minutos"</item>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index 71e2af6beb32..21cb2f1af1fd 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Sees."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Väljas."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ühendatud."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ühenduse loomine."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> seadet)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth on väljas"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Heledus"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automaatne pööramine"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Pööramine lukus"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Lukustatud vertikaalpaigutusse"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Lukustatud horisontaalpaigutusse"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automaatne pööramine"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Pööramine on lukustatud"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertikaalpaigutus"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horisontaalpaigutus"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Sisestusmeetod"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Asukoht"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Asukoht on väljas"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ühendus puudub"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast-ekraan"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Ülekandeekraan"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Vaheta värve"</string>
@@ -224,13 +223,14 @@
<!-- no translation found for zen_mode_notification_title:other (7388721375827338153) -->
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Puudutage kuvamiseks"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Mitte segada"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Veel %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Vähem kiireloomulised märguanded on allpool"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Avamiseks puudutage uuesti"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Lukustuse tühistamiseks pühkige üles"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Telefoni kasutamiseks pühkige paremale"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Kaamera kasutamiseks pühkige vasakule"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Kuni lülitate selle välja"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laadimine (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>, kuni seade on täis)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Üheks minutiks"</item>
<item quantity="other" msgid="6924190729213550991">"%d minutiks"</item>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 3ea2110c6113..a0d181928740 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"روشن."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"خاموش."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"متصل."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"در حال مرتبط‌ شدن."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"بلوتوث ( <xliff:g id="NUMBER">%d</xliff:g> دستگاه)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"بلوتوث خاموش"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"روشنایی"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"چرخش خودکار"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"چرخش قفل شد"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"قفل شده در حالت عمودی"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"قفل شده در حالت افقی"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"چرخش اتوماتیک"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"چرخش قفل شد"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"عمودی"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"افقی"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"روش ورودی"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"مکان"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"مکان خاموش"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"متصل نیست"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکه‌ای موجود نیست"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi خاموش است"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"فرستادن صفحه"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"فرستادن صفحه‌نمایش"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"روشنایی"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"خودکار"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"برگردان رنگ‌ها"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"برای نمایش لمس کنید"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"مزاحم نشوید"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"‏%d بیشتر"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"اعلان‌های کمتر فوری در زیر"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"برای باز کردن دوباره ضربه بزنید"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"برای باز کردن قفل سریع به بالا بکشید"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"برای تلفن انگشت را تند به سمت چپ بکشید"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"برای دوربین انگشت را تند به سمت راست بکشید"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"تا وقتی آن را خاموش کنید"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"در حال شارژ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"برای یک دقیقه"</item>
<item quantity="other" msgid="6924190729213550991">"‏برای %d دقیقه"</item>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index eb68ea61465d..0a0cdd92adbc 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Käytössä."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Pois käytöstä."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Yhdistetty."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Yhdistetään."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> laitetta)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth pois käytöstä"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kirkkaus"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automaattinen kääntö"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Kääntö lukittu"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Vaaka lukittu"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Pysty lukittu"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automaattinen kääntö"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Kääntö lukittu"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Pysty"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Vaaka"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Syöttötapa"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Sijainti"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Sijainti ei käytössä"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ei yhteyttä"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ei verkkoa"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-yhteys pois käytöstä"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Lähetysnäyttö"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Lähetysnäyttö"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kirkkaus"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Käänteiset värit"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Jaettu yhteys"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Ilmoitukset"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Ei viimeaikaisia sovelluksia"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Verkkoa saatetaan\nvalvoa"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Näytä koskettamalla"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Älä häiritse"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d muuta"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Vähemmän kiireelliset ilmoitukset ovat alla"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Avaa napauttamalla uudelleen"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Avaa lukitus pyyhkäisemällä ylös"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Avaa puhelin pyyhkäisemällä oikealle"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Avaa kamera pyyhkäisemällä oikealle"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Kunnes poistat tämän käytöstä"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ladataan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kunnes täynnä)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Minuutiksi"</item>
<item quantity="other" msgid="6924190729213550991">"%d minuutiksi"</item>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 4c1df8c4176d..c3b53b59f77c 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activé"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Désactivé"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connecté"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connexion."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1x"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"3G+"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"BLUETOOTH DÉSACTIVÉ"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosité"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotation automatique"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation verrouillée"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Verrouillé en mode portrait"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Verrouillé en mode paysage"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotation automatique"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation verrouillée"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Paysage"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Mode de saisie"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Position"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localisation désactivée"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connecté"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Écran distant"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Écran de diffusion"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosité"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATIQUE"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverser les couleurs"</string>
@@ -215,8 +214,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Partage de connexion"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Point d\'accès sans fil"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifications"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Aucune application récente"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string>
@@ -229,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Touchez pour afficher la notification"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ne pas déranger"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d autres"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes affichées ci-dessous"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Touchez à nouveau pour ouvrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Glissez vers le haut pour déverrouiller"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Balayez l\'écran vers la droite pour accéder au téléphone"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Balayez l\'écran vers la gauche pour accéder à l\'appareil photo"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Jusqu\'à la désactivation"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours... (chargée à 100 % dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Pendant une minute"</item>
<item quantity="other" msgid="6924190729213550991">"Pendant %d minutes"</item>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index bd709a0a9542..ab1f30ba54cb 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activé"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Désactivé"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connecté"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connexion en cours…"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1x"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth désactivé"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosité"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotation auto"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation bloquée"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Verrouillé en mode portrait"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Verrouillé en mode paysage"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotation automatique"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation verrouillée"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Paysage"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Mode de saisie"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Localisation"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localisation désactivée"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connecté"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Caster l\'écran"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Caster l\'écran"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosité"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATIQUE"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverser les couleurs"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Appuyer pour afficher"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ne pas déranger"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"+ %d autres"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes ci-dessous"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Appuyer à nouveau pour ouvrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Faire glisser pour déverrouiller"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Balayer l\'écran vers la droite pour accéder au téléphone"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Balayer l\'écran vers la gauche pour accéder à l\'appareil photo"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Jusqu\'à la désactivation"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours… (chargé à 100 % dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Pendant une minute"</item>
<item quantity="other" msgid="6924190729213550991">"Pendant %d minutes"</item>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index d6b6d6abfe3a..8b1eb55ba8dd 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"चालू."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"बंद."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"कनेक्ट है."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"कनेक्ट हो रहा है."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> उपकरण)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth बंद"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"स्क्रीन की रोशनी"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"स्वत: रोटेट"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"रोटेशन लॉक किया गया"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"पोर्ट्रेट पर लॉक किया गया"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"भू-दृश्य पर लॉक किया गया"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"स्वत: घुमाएं"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"घुमाना लॉक किया गया"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"पोर्ट्रेट"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"लैंडस्केप"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"इनपुट विधि"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बंद"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"कनेक्ट नहीं है"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"कोई नेटवर्क नहीं"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi बंद"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"स्क्रीन कास्ट करें"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"स्क्रीन कास्ट करें"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"स्क्रीन की रोशनी"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"स्वत:"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"रंग उलटें"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"दिखाने के लिए स्पर्श करें"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"परेशान न करें"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d और"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"कम अत्यावश्यक सूचनाएं नीचे दी गई हैं"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"खोलने के लिए पुन: टैप करें"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करने के लिए ऊपर स्वाइप करें"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"फ़ोन के लिए दाएं स्वाइप करें"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"कैमरे के लिए बाएं स्वाइप करें"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"जब तक आप इसे बंद नहीं कर देते"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूर्ण होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> शेष)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"एक मिनट के लिए"</item>
<item quantity="other" msgid="6924190729213550991">"%d मिनट के लिए"</item>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 79d7003b50d8..953e077b3c3a 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Uključeno."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Isključeno."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Povezano."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Povezivanje."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (broj uređaja: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth isključen"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svjetlina"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatska rotacija"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotacija zaključana"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Blokirano u portretnom prikazu"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Blokirano u pejzažnom prikazu"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatsko usmjerenje"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Usmjerenje je zaključano"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Okomito"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Vodoravno"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Način unosa"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokacija"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokacija je isključena"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nije povezano"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nema mreže"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi isključen"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Emitiranje zaslona"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Emitirani zaslon"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svjetlina"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATSKI"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Preokreni boje"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Dodirnite za prikaz"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ne ometaj"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Još %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Manje hitne obavijesti pri dnu"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Dodirnite opet za otvaranje"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Prijeđite prstom prema gore za otključavanje"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Prijeđite prstom udesno za telefon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Prijeđite prstom ulijevo za fotoaparat"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Dok ne isključite"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Jednu minutu"</item>
<item quantity="other" msgid="6924190729213550991">"%d min"</item>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 915f5eb8233c..ad2bc5cf87f7 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Bekapcsolva."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Kikapcsolva."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Csatlakoztatva."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Csatlakozás."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> eszköz)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth kikapcsolva"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Fényerő"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatikus forgatás"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Forgatás zárolva"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Álló nézet zárolva"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Fekvő nézet zárolva"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatikus elforgatás"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Elforgatás zárolva"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Álló"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Fekvő"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Beviteli módszer"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Tartózkodási hely"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Hely kikapcsolva"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nincs kapcsolat"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nincs hálózat"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi kikapcsolva"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Képernyő tartalmának átküldése"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Képernyőtartalom átküldése"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Fényerő"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"automatikus"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Színek invertálása"</string>
@@ -213,7 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Megosztás"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Értesítések"</string>
- <string name="recents_empty_message" msgid="7883614615463619450">"Nincs újabb alkalmazás"</string>
+ <string name="recents_empty_message" msgid="7883614615463619450">"Nincsenek nemrég használt alkalmazások"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Lehet, hogy a\nhálózat felügyelt"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"A megtekintéshez érintse meg"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ne zavarjanak"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d további"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"A kevésbé sürgős értesítések lentebb vannak"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Koppintson rá ismét a megnyitáshoz"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Húzza felfelé az ujját a feloldáshoz"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"A telefon eléréséhez csúsztassa ujját jobbra"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"A fényképezőgép eléréséhez csúsztassa ujját balra"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Amíg ki nem kapcsolja ezt"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Töltés (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> a teljes töltöttségig)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Egy percen át"</item>
<item quantity="other" msgid="6924190729213550991">"%d percen át"</item>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index ca327d8fc950..e15730e18f81 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Միացված է:"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Անջատված է:"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Միացված է:"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Միանում է:"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> սարք)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth-ն անջատված է"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Պայծառություն"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Ինքնապտտում"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Պտտումը կողպված է"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Միայն ուղղաձիգ"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Միայն հորիզոնական"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Ինքնապտտում"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Պտտումը կողպված է"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Դիմանկար"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Լանդշաֆտ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Մուտքագրման եղանակը"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Տեղադրություն"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Անջատել տեղադրությունը"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Միացված չէ"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ցանց չկա"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-ը անջատված է"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Հեռակա էկրան"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Հեռակա էկրան"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Պայծառություն"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"Ինքնաշխատ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Շրջել գույները"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Միացում"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Թեժ կետ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Ծանուցումներ"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Նոր հավելվածներ չկան"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ցանցը կարող է\nվերահսկվել"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Հպեք՝ ցուցադրելու համար"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Չխանգարել"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Եվս %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Պակաս հրատապ ծանուցումները ստորև"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Կրկին հպեք՝ բացելու համար"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Սահեցրեք վերև` ապակողպելու համար"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Հեռախոսի համար սահեցրեք աջ"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Խցիկի համար սահեցրեք ձախ"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Քանի դեռ չեք անջատել"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> մինչև լրիվ լիցքավորումը)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Մեկ րոպե"</item>
<item quantity="other" msgid="6924190729213550991">"%d րոպե"</item>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 48c9a6d23754..08da9007ed5c 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Aktif."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Nonaktif."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Tersambung."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Menyambung."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Perangkat)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Mati"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotasi Otomatis"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasi Dikunci"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Terkunci ke Potret"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Terkunci ke Lanskap"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotasi otomatis"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotasi terkunci"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Potret"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Lanskap"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metode Masukan"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasi"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Mati"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Tidak Tersambung"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Layar Transmisi"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Layar transmisi"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OTOMATIS"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inversi warna"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menampilkan"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Jangan ganggu"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d lainnya"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Pemberitahuan kurang darurat di bawah"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Ketuk lagi untuk membuka"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Gesek ke atas untuk membuka kunci"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Gesek ke kanan untuk menelepon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Gesek ke kiri untuk kamera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Hingga Anda menonaktifkan ini"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengisi daya (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Selama satu menit"</item>
<item quantity="other" msgid="6924190729213550991">"Selama %d menit"</item>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 8653c8febecc..16ebe4c83d40 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"ON"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"OFF"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connesso."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connessione in corso."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivi)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth spento"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosità"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotazione autom."</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotazione bloccata"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloccato in verticale"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloccato in orizzontale"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotazione automatica"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotazione bloccata"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Verticale"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Orizzontale"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metodo di immissione"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Geolocalizz."</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Geolocalizz. non attiva"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connesso"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nessuna rete"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi disattivato"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Trasmetti schermo"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Trasmetti schermo"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosità"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverti colori"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Tocca per visualizzare"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Non disturbare"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Altre %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notifiche meno urgenti in basso"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tocca ancora per aprire"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Scorri verso l\'alto per sbloccare"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Scorri verso destra per accedere al telefono"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Scorri verso sinistra per accedere alla fotocamera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Fino alla disattivazione"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"In carica (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Per un minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Per %d minuti"</item>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 3279bc15d17c..49d7b40612fa 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"פועל."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"כבוי."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"מחובר."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"מתחבר."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"‎1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"‏Bluetooth ‏(<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"‏Bluetooth מופסק"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"בהירות"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"סיבוב אוטומטי"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"סיבוב נעול"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"נעול במצב הצגה לאורך"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"נעול במצב הצגה לרוחב"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"סיבוב אוטומטי"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"סיבוב נעול"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"לאורך"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"לרוחב"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"שיטת קלט"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"מיקום"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"מיקום כבוי"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"לא מחובר"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"אין רשת"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi כבוי"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"העבר מסך"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"העבר מסך"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"בהירות"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"אוטומטי"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"הפוך צבעים"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"גע כדי להציג"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"נא לא להפריע"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"‏עוד %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"הודעות בדחיפות נמוכה יותר בהמשך"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"הקש שוב כדי לפתוח"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"החלק מעלה כדי לבטל את הנעילה"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"החלק ימינה להפעלת הטלפון"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"החלק שמאלה להפעלת המצלמה"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"עד שתכבה"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"טוען (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד לסיום)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"למשך דקה אחת"</item>
<item quantity="other" msgid="6924190729213550991">"‏למשך %d דקות"</item>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index a1f7b5ef2547..4a2a3c180cb6 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"ON"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"OFF"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"接続済みです。"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"接続しています。"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth(端末数<xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth OFF"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"画面の明るさ"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動回転"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"画面の向きをロック"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"縦向きにロック済み"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"横向きにロック済み"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"自動回転"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"画面の向きをロック"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"縦向き"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"横向き"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"入力方法"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"現在地"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"現在地OFF"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"接続されていません"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ネットワークなし"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi OFF"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"画面のキャスト"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"画面のキャスト"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"画面の明るさ"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"色を反転"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"表示するにはタップします"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"通知を非表示"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"他%d件"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"緊急度の低い通知を下に表示"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"開くにはもう一度タップしてください"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"ロック解除するには上にスワイプしてください"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"右にスワイプして電話を表示"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"左にスワイプしてカメラを表示"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"ユーザーがOFFにするまで"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中(フルになるまで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1分"</item>
<item quantity="other" msgid="6924190729213550991">"%d分"</item>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index a1862dab7fbe..079fc7fba6eb 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"ჩართული"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"გამორთულია."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"დაკავშირებულია."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"უკავშრდება."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> მოწყობილობა)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth გამორთულია"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"სიკაშკაშე"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ავტო მობრუნება"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"როტაციის ჩაკეტვა"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"პორტრეტზე ჩაკეტილი"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ლანდშაფტზე ჩაკეტილი"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ავტოროტაცია"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"როტაცია ჩაკეტილია"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"პორტრეტი"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"პეიზაჟის რეჟიმი"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"შეყვანის მეთოდი"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"მდებარეობა"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"მდებარეობა გამორთულია"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"არ არის დაკავშირებული."</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ქსელი არ არის"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi გამორთულია"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"ეკრანის გადაცემა"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"განათება"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ავტომატურად"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"ფერების შებრუნება"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"მოდემის რეჟიმი"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"წვდომის წერტილი"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"შეტყობინებები"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"ბოლო აპები არ არის"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"შესაძლოა ქსელზე\nმონიტორინგი ხორციელდებოდეს"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"შეეხეთ საჩვენებლად"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"არ შემაწუხოთ"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d სხვა"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"ქვემოთ მითითებულია ნაკლებად სასწრაფო შეტყობინებები"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"შეეხეთ ისევ გასახსნელად"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"გაასრიალეთ ზევით განსაბლოკად"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"გადაფურცლეთ მარჯვნივ ტელეფონისთვის"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"კამერისთვის მარცხენა შენაცვლება"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"სანამ ამას გამორთავდეთ"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>-ის შეცვლა დასრულებამდე)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"ერთი წუთით"</item>
<item quantity="other" msgid="6924190729213550991">"%d წუთით"</item>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 3f5b8448ede5..be41e5046d00 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"បើក។"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"បិទ"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"បាន​តភ្ជាប់។"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"ការ​ភ្ជាប់​។"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ប៊្លូធូស (ឧបករណ៍ <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"​ប៊្លូធូស​បាន​បិទ"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ពន្លឺ"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"បង្វិល​​ស្វ័យ​ប្រវត្តិ"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"បាន​ចាក់​សោ​ការ​បង្វិល"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ចាក់​សោ​​បញ្ឈរ"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ចាក់​សោ​​​ផ្ដេក"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"បង្វិល​ស្វ័យ​ប្រវត្តិ"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"បាន​ចាក់សោ​ការ​បង្វិល"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"បញ្ឈរ"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ទេសភាព"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"វិធីសាស្ត្រ​បញ្ចូល"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"ទី​តាំង​"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"ទីតាំង​បាន​បិទ"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"មិន​បាន​តភ្ជាប់"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"គ្មាន​បណ្ដាញ"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"វ៉ាយហ្វាយ​បានបិទ"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ចាត់​ថ្នាក់​អេក្រង់"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"ចាត់​ថ្នាក់​អេក្រង់"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ពន្លឺ"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ស្វ័យប្រវត្តិ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"ដាក់​​​បញ្ច្រាស​ពណ៌"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ការ​ភ្ជាប់"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ហតស្ប៉ត"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ការ​ជូនដំណឹង"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"មិនមាន​​កម្មវិធី​ថ្មីៗ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មាន​កម្មវិធី"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"បណ្ដាញ​អាច​\nត្រូវ​បាន​ត្រួតពិនិត្យ​"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"ប៉ះ​ដើម្បី​បង្ហាញ"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"កុំ​រំខាន"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d ទៀត"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"ការ​ជូន​ដំណឹង​​មិន​សូវ​បន្ទាន់​ខាង​ក្រោម"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"ប៉ះ​ម្ដង​ទៀត ដើម្បី​បើក"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"អូស​ឡើង​លើ ដើម្បី​ដោះ​សោ"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"អូស​ទៅ​ស្ដាំ​ដើម្បី​បើក​​ទូរស័ព្ទ"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"អូស​ទៅ​ឆ្វេង​​ដើម្បី​ប្រើ​​ម៉ាស៊ីន​ថត"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"រហូត​ដល់ពេល​​អ្នក​បិទ​វា"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"កំពុង​បញ្ចូល​ថ្ម (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើប​ពេញ)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"សម្រាប់​មួយ​នាទី"</item>
<item quantity="other" msgid="6924190729213550991">"សម្រាប់ %d នាទី"</item>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 4772e54b5db7..5fdc4e1fe051 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"사용"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"사용 안함"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"연결됨"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"연결 중..."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"블루투스(<xliff:g id="NUMBER">%d</xliff:g>개의 기기)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"블루투스 사용 안함"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"밝기"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"자동 회전"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"회전 잠금"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"세로 모드로 고정됨"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"가로 모드로 고정됨"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"자동 회전"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"방향 고정"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"세로"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"가로"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"입력 방법"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"위치"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"위치 사용 중지"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"연결되어 있지 않음"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"네트워크가 연결되지 않음"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 꺼짐"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"화면 전송"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"화면 전송"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"밝기"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"자동"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"색상 반전"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"표시하려면 터치"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"알림 일시중지"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d개 더보기"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"아래에 덜 급한 알림 표시"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"다시 탭하여 열기"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"위로 스와이프하여 잠금 해제"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"전화 기능을 사용하려면 오른쪽으로 스와이프하세요."</string>
+ <string name="camera_hint" msgid="5241441720959174226">"카메라를 사용하려면 왼쪽으로 스와이프하세요."</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"이 기능을 사용 중지할 때까지"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1분 동안"</item>
<item quantity="other" msgid="6924190729213550991">"%d분 동안"</item>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index d5117a90dba5..abcab9eaad71 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"ເປີດ."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"ປິດ."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ເຊື່ອມ​ຕໍ່ແລ້ວ."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"ກຳ​ລັງ​ເຊື່ອມ​ຕໍ່."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ອຸປະກອນ)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth ປິດ"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ຄວາມສະຫວ່າງ"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"ລັອກການປ່ຽນລວງ"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ລັອກເປັນຮູບລວງຕັ້ງ"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ລັອກເປັນຮູບລວງນອນ"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ໝຸນ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"​ລັອກ​ການ​ໝຸນ​ຈ​ໍ​ແລ້ວ"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ລວງຕັ້ງ"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ລວງນອນ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"ວິທີການປ້ອນຂໍ້ມູນ"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"ສະຖານທີ່"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"ຂໍ້ມູນສະຖານທີ່ປິດຢູ່"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ບໍ່ໄດ້ເຊື່ອມຕໍ່"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ບໍ່ມີເຄືອຂ່າຍ"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi​-Fi ປິດ"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ດຶງໜ້າຈໍ"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"ສົ່ງ​ສັນ​ຍານ​ພາບ"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ຄວາມແຈ້ງ"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ອັດຕະໂນມັດ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"​ສະ​ລັບ​ສີ"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"​ແຕະ​ເພື່ອ​ສະ​ແດງ"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"ຫ້າມລົບກວນ"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d ເພີ່ມ​ເຕີມ"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"ການ​ແຈ້ງເຕືອນ​ທີ່​ສຳຄັນ​ໜ້ອຍ​ກວ່າ​ຢູ່​ດ້ານ​ລຸ່ມ"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"ແຕະ​ອີກ​ຄັ້ງ​ເພື່ອ​ເປີດ"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"ເລື່ອນ​ຂຶ້ນ​ເພື່ອ​ປົດ​ລັອກ"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"ປັດ​ຂວາ​ເພື່ອ​ໃຊ້​ໂທ​ລະ​ສັບ"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"ປັດ​ຊ້າຍ​ເພື່ອ​ໃຊ້​ກ້ອງ"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"ຈົນກວ່າ​ທ່ານ​ຈະ​ປິດ​"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ກຳ​ລັງ​ສາກ​ໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າ​ຈ​ະ​ເຕັມ)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"ເປັນ​ເວລາ​ນຶ່ງ​ນາ​ທີ"</item>
<item quantity="other" msgid="6924190729213550991">"ເປັນ​ເວລາ %d ນາ​ທີ"</item>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 574e55956da4..4818a1f909fd 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Įjungta."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Išjungta."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Prijungta."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Prisijungiama."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"„Bluetooth“ (<xliff:g id="NUMBER">%d</xliff:g> įreng.)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"„Bluetooth“ išjungta"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Šviesumas"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatiškai sukti"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Sukimas užrakintas"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Užrakinta stačia padėtis"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Užrakinta gulsčia padėtis"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatinis kaitaliojimas"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Kaitaliojimas užrakintas"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Stačias"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Gulsčias"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Įvesties metodas"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Vietovė"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Vietovė išjungta"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Neprisijungta"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tinklo nėra"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"„Wi-Fi“ išjungta"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Perduoti ekraną"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Perduoti ekraną"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Šviesumas"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATINIS"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Pakeisti spalvas"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Palieskite, kad būtų rodoma"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Netrukdyti"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Dar %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mažiau skubūs pranešimai toliau"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Palieskite dar kartą, kad atidarytumėte"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Perbraukite aukštyn, kad atrakintumėte"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Perbraukite į dešinę, kad galėtumėte skambinti"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Perbraukite į kairę, kad būtų įjungtas fotoaparatas"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Kol išjungsite"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1 min."</item>
<item quantity="other" msgid="6924190729213550991">"%d min."</item>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 398553d35cf6..5a3a5637ad89 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Ieslēgts"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Izslēgts"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Savienojums ir izveidots."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Notiek savienojuma izveide..."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ierīce(-es))"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth savienojums ir izslēgts."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Spilgtums"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automātiska pagriešana"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Pagriešana bloķēta"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Fiksēts portreta režīmā"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Fiksēts ainavas režīmā"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automātiska pagriešana"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Pagriešana bloķēta"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrets"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Ainava"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Ievades metode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Atrašanās vieta"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Atrašanās vieta izslēgta"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nav izveidots savienojums"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nav tīkla"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ir izslēgts"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Apraides ekrāns"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Apraides ekrāns"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Spilgtums"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMĀTISKI"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertēt krāsas"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Piesaiste"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tīklājs"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Paziņojumi"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Nav nesen izmantotu lietotņu"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Tīkls var\ntikt uzraudzīts"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Pieskarieties, lai rādītu"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Netraucēt"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"vēl %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mazāk steidzami paziņojumi tiek rādīti tālāk"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Pieskarieties vēlreiz, lai atvērtu"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Velciet uz augšu, lai atbloķētu"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Lai lietotu tālruni, velciet pa labi."</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Lai lietotu kameru, velciet pa kreisi."</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Līdz brīdim, kad izslēgsiet"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Notiek uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Vienu minūti"</item>
<item quantity="other" msgid="6924190729213550991">"%d min"</item>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 6a2e79ec3308..9c02521d1304 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Идэвхижсэн."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Унтраах"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Холбогдсон."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Холбож байна."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Блютүүт (<xliff:g id="NUMBER">%d</xliff:g> төхөөрөмж)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Блютүүт унтраалттай"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Тодрол"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автомат эргэх"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Эргүүлэлт түгжигдсэн"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Босоо байдлаар түгжсэн"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Хэвтээ байдлаар түгжсэн"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматаар эргэх"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Эргэлтийг түгжсэн"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Босоо"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Хэвтээ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Оруулах арга"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Байршил"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Байршил идэвхгүй"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Холбогдоогүй"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Сүлжээгүй"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi унтарсан"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Дамжуулах дэлгэц"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Дамжуулах дэлгэц"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Тодрол"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОМАТ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Өнгийг урвуулах"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Харуулах бол хүрнэ үү"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Бүү саад бол"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"өөр %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Яаралтай биш мэдэгдлүүдийг доор"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Нээхийн тулд дахин товшино уу"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Түгжээг тайлах бол шудрана уу"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Утас гаргахын тулд баруун шударна уу"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Камер гаргахын тулд зүүн шударна уу"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Таныг унтраах хүртэл"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Нэг минутын турш"</item>
<item quantity="other" msgid="6924190729213550991">"%d минутын турш"</item>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index 7ae9b555bd4b..7ff19ba5db55 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Dihidupkan."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Dimatikan."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Disambungkan."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Menyambung."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Peranti)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Dimatikan"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Putar"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Putaran Dikunci"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Dikunci kepada Potret"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Dikunci kepada Landskap"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Autoputar"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Putaran dikunci"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Potret"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landskap"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Kaedah Input"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasi"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Dimatikan"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Tidak Disambungkan"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tiada Rangkaian"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Dimatikan"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Skrin Cast"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Skrin Cast"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Terbalikkan warna"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Penambatan"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tempat liputan"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Pemberitahuan"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Tiada apl terbaharu"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rangkaian mungkin\nboleh dipantau"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menunjukkan"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Jangan ganggu"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d lagi"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Pemberitahuan kurang penting di bawah"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Ketik lagi untuk membuka"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Leret ke atas untuk membuka kunci"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Leret ke kanan untuk telefon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Leret ke kiri untuk kamera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Sehingga anda matikan"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengecas (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Selama satu minit"</item>
<item quantity="other" msgid="6924190729213550991">"Selama %d minit"</item>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index e842c0f0036b..f0316fced0d9 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"På."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Av."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Tilkoblet."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Kobler til."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth er slått av"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatisk rotasjon"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasjon er låst"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Låst til stående format"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Låst til liggende format"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotér automatisk"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotasjonen er låst"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrett"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landskap"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Inndatametode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Sted"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Posisjon av"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke tilkoblet"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi er av"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast skjermen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Cast skjermen"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverter farger"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Trykk for å vise"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ikke forstyrr"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d til"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende varsler nedenfor"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Trykk på nytt for å åpne"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Sveip oppover for å låse opp"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Sveip mot høyre for å åpne telefonen"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Sveip mot venstre for å åpne kameraet"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Inntil du slår av funksjonen"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Lader (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"I ett minutt"</item>
<item quantity="other" msgid="6924190729213550991">"I %d minutter"</item>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 360b71de951b..198eb8ef86a4 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Ingeschakeld."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Uitgeschakeld."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Verbonden."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Verbinden."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> apparaten)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth uit"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatische rotatie"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotatie vergrendeld"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Vergrendeld in staande stand"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Vergrendeld in liggende stand"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatische rotatie"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotatie vergrendeld"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portret"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landschap"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermethode"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Locatie"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Locatie uit"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Niet verbonden"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi uit"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Scherm casten"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Scherm casten"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATISCH"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Kleuren omkeren"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak aan om weer te geven"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Niet storen"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Nog %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Minder urgente meldingen onderaan"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tik nogmaals om te openen"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Veeg omhoog om te ontgrendelen"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Veeg naar rechts voor telefoon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Veeg naar links voor camera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Totdat u dit uitschakelt"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Opladen (vol over <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Eén minuut"</item>
<item quantity="other" msgid="6924190729213550991">"%d minuten"</item>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 25098d86f2b5..a83c07dae624 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Wł."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Wył."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Połączono."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Łączę..."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (urządzenia: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth wył."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jasność"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Autoobracanie"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Obracanie jest zablokowane"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Zablokowano w orientacji pionowej"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Zablokowano w orientacji poziomej"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Autoobracanie"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Obracanie zablokowane"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Pionowo"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Poziomo"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metoda wprowadzania"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokalizacja"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokalizacja wyłączona"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Brak połączenia"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Brak sieci"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wyłącz Wi-Fi"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Ekran Cast"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Ekran Cast"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jasność"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATYCZNA"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Odwróć kolory"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotknij, by zobaczyć"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Nie przeszkadzać"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d więcej"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Poniżej widać mniej pilne powiadomienia"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Kliknij ponownie, by otworzyć"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Przesuń w górę, by odblokować"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Przesuń w prawo, by przełączyć się na telefon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Przesuń w lewo, by przełączyć się na aparat"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Dopóki nie wyłączysz"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ładuje się (pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Przez minutę"</item>
<item quantity="other" msgid="6924190729213550991">"Przez %d min"</item>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 34adc4679aa2..560f64a8f28b 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Ativado."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desativado."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ligado."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"A ligar..."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Dispositivos)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desat."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rodar automat."</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotação Bloqueada"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado em retrato"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado em paisagem"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotação automática"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotação bloqueada"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertical"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horizontal"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de Introdução"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Localização"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localização Desativada"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Não Ligado"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem Rede"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Desligado"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Transmitir ecrã"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Transmitir ecrã"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brilho"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÁTICO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverter cores"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Não incomodar"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Mais %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Toque novamente para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar rapidamente com o dedo para cima para desbloquear"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Deslize rapidamente para a direita para aceder ao telemóvel"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Deslize rapidamente para a esquerda para aceder à câmara"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Até que o utilizador desative"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"A carregar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Durante um minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Durante %d minutos"</item>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index e3b1f84604fa..9dcb25da5d63 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Ligado."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desligado."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desativado"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automat."</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotação bloqueada"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado no modo retrato"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado no modo paisagem"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotação automática"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotação bloqueada"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Retrato"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Paisagem"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Localização"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localização desativada"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Não conectado"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem rede"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Transmitir tela"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Transmitir tela"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brilho"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverter cores"</string>
@@ -215,8 +214,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Ponto de acesso"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notificações"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Nenhum app recente"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do aplicativo"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"A rede pode estar\nsob monitoração"</string>
@@ -229,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Não perturbe"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Mais %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Toque novamente para abrir"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Deslize para cima para desbloquear"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Deslize para a esquerda para usar o telefone"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Deslize para a esquerda para usar a câmera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Até você desativar"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Por 1 minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Por %d minutos"</item>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index e6a38723aad4..73c0cd2012ce 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -342,13 +342,13 @@
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
+ <!-- no translation found for quick_settings_rotation_unlocked_label (7305323031808150099) -->
<skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
+ <!-- no translation found for quick_settings_rotation_locked_label (6359205706154282377) -->
<skip />
- <!-- no translation found for quick_settings_rotation_locked_portrait_label (1553131290066230775) -->
+ <!-- no translation found for quick_settings_rotation_locked_portrait_label (5102691921442135053) -->
<skip />
- <!-- no translation found for quick_settings_rotation_locked_landscape_label (7216265671276086593) -->
+ <!-- no translation found for quick_settings_rotation_locked_landscape_label (8553157770061178719) -->
<skip />
<!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
@@ -376,7 +376,7 @@
<skip />
<!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) -->
<skip />
- <!-- no translation found for quick_settings_remote_display_no_connection_label (372107699274391290) -->
+ <!-- no translation found for quick_settings_remote_display_no_connection_label (7482103121002965053) -->
<skip />
<!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
<skip />
@@ -414,15 +414,22 @@
<skip />
<!-- no translation found for zen_mode_title (8793432092004749188) -->
<skip />
- <!-- no translation found for keyguard_more_overflow_text:other (9180696159506883684) -->
+ <!-- no translation found for keyguard_more_overflow_text (9195222469041601365) -->
+ <skip />
<!-- no translation found for speed_bump_explanation (1288875699658819755) -->
<skip />
<!-- no translation found for notification_tap_again (7590196980943943842) -->
<skip />
<!-- no translation found for keyguard_unlock (8043466894212841998) -->
<skip />
+ <!-- no translation found for phone_hint (3101468054914424646) -->
+ <skip />
+ <!-- no translation found for camera_hint (5241441720959174226) -->
+ <skip />
<!-- no translation found for zen_mode_forever (7420011936770086993) -->
<skip />
+ <!-- no translation found for keyguard_indication_charging_time (1757251776872835768) -->
+ <skip />
<!-- no translation found for zen_mode_duration_minutes:one (9040808414992812341) -->
<!-- no translation found for zen_mode_duration_minutes:other (6924190729213550991) -->
<!-- no translation found for zen_mode_duration_hours:one (3480040795582254384) -->
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 9bc917844593..6f992e481823 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Activat."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Dezactivat."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectat."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Se conectează."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispozitive)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth dezactivat"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminozitate"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotire automată"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotire blocată"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Blocat la afișarea „portret”"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Blocat la afișarea „peisaj”"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotire automată"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotire blocată"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portret"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Peisaj"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metodă de introducere"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Locație"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localizarea este dezactivată"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Neconectat"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nicio reţea"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi deconectat"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Ecran de afișare a transmisiunii"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Ecran de trimitere"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminozitate"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAT"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inversați culori"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Atingeți pentru a afișa"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Nu deranjaţi"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Încă %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Notificările mai puțin urgente mai jos"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Atingeți din nou pentru a deschide"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Glisați în sus pentru a debloca"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Glisați la dreapta pentru a acesa telefonul"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Glisați la stânga pentru a accesa camera foto"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Până la dezactivare"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Se încarcă (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Timp de un minut"</item>
<item quantity="other" msgid="6924190729213550991">"Timp de %d (de) minute"</item>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 619ebc26e3ee..12232c58cb26 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Вкл."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Выкл."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Подключено"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Соединение."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выкл."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркость"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автоповорот"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Автоповорот выкл."</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Только вертикально"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Только горизонтально"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоповорот"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Автоповорот отключен"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Вертикальная ориентация"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Горизонтальная ориентация"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Способ ввода"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Передача геоданных"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Местоположение выкл."</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Нет соединения"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi выкл."</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Wi-Fi-монитор"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Беспроводной монитор"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркость"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОНАСТРОЙКА"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Инвертировать"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Нажмите, чтобы открыть"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Не беспокоить"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Ещё %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Показать менее важные оповещения"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Нажмите ещё раз, чтобы открыть"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Для разблокировки проведите пальцем по экрану"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Чтобы открыть приложение \"Телефон\", пролистните вправо"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Чтобы включить камеру, пролистните влево"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Пока я не отключу"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядка батареи (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1 мин."</item>
<item quantity="other" msgid="6924190729213550991">"%d мин."</item>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index df880cf64116..e5e08025088a 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Zapnuté."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Vypnuté."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Pripojené."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Pripája sa"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Rozhranie Bluetooth (počet zariadení: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhranie Bluetooth je vypnuté"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jas"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatické otáčanie"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Otáčanie uzamknuté"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Uzamknuté na výšku"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Uzamknuté na šírku"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatické otáčanie"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Otáčanie je uzamknuté"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Na výšku"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Na šírku"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Metóda vstupu"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Poloha"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Poloha vypnutá"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nepripojené"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žiadna sieť"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi-Fi je vypnutá"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Vzdialená obrazovka"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Vzdialená obrazovka"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jas"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATICKY"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertovať farby"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Upozornenie zobrazíte dotykom"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Nerušiť"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d ďalších"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Menej naliehavé upozornenia sa nachádzajú nižšie"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Upozornenie otvoríte opätovným klepnutím"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Zariadenie odomknete prejdením prstom nahor"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Telefón otvoríte prejdením prstom doľava"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Fotoaparát otvoríte prejdením prstom doľava"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Dokým túto funkciu nevypnete"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíja sa (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Na jednu minútu"</item>
<item quantity="other" msgid="6924190729213550991">"Na %d min"</item>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index d1170bda204e..8fbd70de9726 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Vklopljen."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Izklopljen."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Povezan."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Povezovanje."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (št. naprav: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth izklopljen"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svetlost"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Samodejno vrtenje"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Zaklenjeno vrtenje"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Zaklenjeno na pokončno postavitev"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Zaklenjeno na ležečo postavitev"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Samodejno sukanje"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Sukanje je zaklenjeno"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Pokončno"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Ležeče"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Način vnosa"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokacija"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokacija izklopljena"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Povezava ni vzpostavljena"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ni omrežja"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi izklopljen"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Zaslon za predvajanje"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Zaslon za predvajanje"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svetlost"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"SAMODEJNO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Obrni barve"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotaknite se za prikaz"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ne moti"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"še %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Manj nujna obvestila spodaj"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Znova se dotaknite, da odprete"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Povlecite, da odklenete"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Povlecite v desno za telefon"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Povlecite v levo za fotoaparat"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Dokler tega ne izklopite"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Za eno minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Za %d min"</item>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index cfb6a2cfdf11..db8e278553d3 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Укључено."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Искључено."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Повезано је."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Повезивање."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> уређаја)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth искључен"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Осветљеност"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Аутоматско ротирање"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ротирање је закључано"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Закључано на Усправно"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Закључано на Водоравно"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Аутоматска ротација"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Ротација је закључана"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Вертикални приказ"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Хоризонтални приказ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод уноса"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Локација"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Локација је искључена"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Веза није успостављена"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мреже"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi је искључен"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Пребаци екран"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Пребацивање екрана"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Осветљеност"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АУТОМАТСКА"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Обрни боје"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Додирните за приказ"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Не узнемиравај"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Још %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Мање хитна обавештења су у наставку"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Додирните поново да бисте отворили"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Превуците нагоре да бисте откључали"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Превуците удесно за телефон"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Превуците улево за камеру"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Док не искључите"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Пуњење (пун је за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Један минут"</item>
<item quantity="other" msgid="6924190729213550991">"%d мин"</item>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 4e3d72f0c868..f92a4f72459c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Aktiverad."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Inaktiverad."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ansluten."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ansluter."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth av"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ljusstyrka"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotera automatiskt"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotationen har låsts"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Låst i stående läge"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Låst i liggande läge"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotera automatiskt"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotationen har låsts"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Stående"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Liggande"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Inmatningsmetod"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Plats"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Plats har inaktiverats"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ej ansluten"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi av"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Överför skärmen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Casta skärmen"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ljusstyrka"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertera färger"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Internetdelning"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Trådlös surfzon"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Aviseringar"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Inga aktiva appar"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Nätverket kan\nvara övervakat"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryck här om du vill visa aviseringar"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Stör ej"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d till"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre brådskande aviseringar nedan"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Tryck igen för att öppna"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Dra uppåt om du vill låsa upp"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Dra åt höger om du vill visa telefonen"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Dra åt vänster om du vill visa kameran"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Tills du inaktiverar detta"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laddar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tills batteriet är fulladdat)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"I en minut"</item>
<item quantity="other" msgid="6924190729213550991">"I %d minuter"</item>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 9bab46ec6673..24cd5740ee11 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -118,8 +118,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Imewashwa."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Imezimwa."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Imeunganishwa."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Inaunganisha."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -185,10 +184,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (Vifaa <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Imezimwa"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ung\'avu"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Zungusha Otomatiki"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Mzunguko Umefungwa"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Imefungwa katika mkamo Wima"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Imefungwa katika mkao Mlalo"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Zungusha kiotomatiki"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Mzunguko umefungwa"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Wima"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Mlalo"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Mbinu ya uingizaji"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Kutambua Eneo"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Kitambua eneo kimezimwa"</string>
@@ -202,7 +201,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Haijaunganishwa"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Hakuna Mtandao"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Imezimwa"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Utumaji wa Skrini"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Utumaji wa Skrini"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ung\'avu"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"KIOTOMATIKI"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Pindua rangi"</string>
@@ -224,13 +223,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Gusa ili zionekane"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Usisumbue"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d zaidi"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>+"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Arifa zisizo za dharura sana ziko hapo chini"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Gonga tena ili ufungue"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Telezesha kidole ili ufungue"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Telezesha kidole kulia ili ufikie simu"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Telezesha kidole kushoto ili ufikie kamera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Hadi utakapozima hili"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Inachaji ( <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hadi ijae)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Kwa dakika moja"</item>
<item quantity="other" msgid="6924190729213550991">"Kwa dakika %d"</item>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 4820071b1b7e..0d6bb5cce4e3 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"เปิดอยู่"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"ปิดอยู่"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"เชื่อมต่อแล้ว"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"กำลังเชื่อมต่อ"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"บลูทูธ (<xliff:g id="NUMBER">%d</xliff:g> อุปกรณ์)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ปิดบลูทูธ"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ความสว่าง"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"หมุนอัตโนมัติ"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"ล็อกการหมุนแล้ว"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ล็อกที่แนวตั้ง"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ล็อกที่แนวนอน"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"หมุนอัตโนมัติ"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ล็อกการหมุน"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"บุคคล"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"แนวนอน"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"วิธีป้อนข้อมูล"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"ตำแหน่ง"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"ปิดตำแหน่ง"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ไม่ได้เชื่อมต่อ"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ไม่มีเครือข่าย"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ปิด WiFi"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ส่งหน้าจอ"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"ส่งหน้าจอ"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ความสว่าง"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"อัตโนมัติ"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"สลับสี"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"แตะเพื่อแสดง"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"ห้ามรบกวน"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"อีก %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"การแจ้งเตือนที่เร่งด่วนน้อยด้านล่าง"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"แตะอีกครั้งเพื่อเปิด"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"กวาดขึ้นเพื่อปลดล็อก"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"กวาดไปทางขวาเพื่อใช้โทรศัพท์"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"กวาดไปทางซ้ายเพื่อใช้กล้องถ่ายรูป"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"จนกว่าคุณจะปิดฟังก์ชันนี้"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"กำลังชาร์จ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> เต็ม)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1 นาที"</item>
<item quantity="other" msgid="6924190729213550991">"%d นาที"</item>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 6c6af51b2162..a76eb5f0afbf 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Naka-on."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Naka-off."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Nakakonekta."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Kumokonekta."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> (na) Device)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Naka-off ang Bluetooth"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"I-auto Rotate"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Naka-lock ang Pag-rotate"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Naka-lock sa Portrait"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Naka-lock sa Landscape"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Awtomatikong i-rotate"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Naka-lock ang pag-ikot"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Pamamaraan ng Pag-input"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasyon"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Naka-off ang Lokasyon"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Hindi Nakakonekta"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Naka-off ang Wi-Fi"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"I-cast ang Screen"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"I-cast ang screen"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"I-invert ang mga kulay"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Pindutin upang ipakita"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Huwag istorbohin"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d pa"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Nasa ibaba ang mga notification na hindi masyadong mahalaga"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"I-tap ulit upang buksan"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Mag-swipe pataas upang i-unlock"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Mag-swipe pakanan para sa telepono"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Mag-swipe pakaliwa para sa camera"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Hanggang sa i-off mo ito"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nagtsa-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang mapuno)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Sa loob ng isang minuto"</item>
<item quantity="other" msgid="6924190729213550991">"Sa loob ng %d (na) minuto"</item>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 85ba8febd9ee..8b37f15d2043 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Açık."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Kapalı."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Bağlandı."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Bağlanıyor."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Cihaz)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Kapalı"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Parlaklık"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Otomatik Döndür"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Dönme Kilitlendi"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Dikey Görünüme Kilitlendi"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Yatay Görünüme Kilitlendi"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Otomatik döndür"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Döndürme kilitlendi"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Dikey"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Yatay"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Giriş Yöntemi"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Konum"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Konum Bilgisi Kapalı"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Bağlı Değil"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ağ yok"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Kablosuz Kapalı"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Yayınlama Ekranı"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Ekranı yayınla"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Parlaklık"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OTOMATİK"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Renkleri çevir"</string>
@@ -213,8 +212,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Bildirimler"</string>
- <!-- no translation found for recents_empty_message (7883614615463619450) -->
- <skip />
+ <string name="recents_empty_message" msgid="7883614615463619450">"Yakın zamanda kullanılan uygulama yok"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string>
<string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ağ izleniyor\nolabilir"</string>
@@ -227,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Görüntülemek için dokunun"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Rahatsız etmeyin"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d adet daha"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Daha az acil bildirimler aşağıdadır"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Açmak için tekrar hafifçe vurun"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Kilidi açmak için hızlıca yukarı kaydırın"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Telefon için sağa kaydırın"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Kamera için sola kaydırın"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Siz bunu kapatana kadar"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Şarj oluyor (tamamen dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Bir dakika süreyle"</item>
<item quantity="other" msgid="6924190729213550991">"%d dakika süreyle"</item>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 7f66e7233e59..2d3609f85392 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Увімкнено."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Вимкнено."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Під’єднано."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"З’єднання."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (пристроїв: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth вимкнено"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яскравість"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Обертати автоматично"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Обертання заблоковано"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Заблоковано в книжковій орієнтації"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Заблоковано в альбомній орієнтації"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматичне обертання"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Обертання заблоковано"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Книжкова орієнтація"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Альбомна орієнтація"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод введення"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Місцезнаходження"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Місцезнаходження вимкнено"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Не під’єднано."</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Немає мережі"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi вимкнено"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Транслювати екран"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Транслювати екран"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яскравість"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТО"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Інвертувати кольори"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Торкніться, щоб показати"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Не турбувати"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"Ще %d"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Менше термінових сповіщень нижче"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Торкніться знову, щоб відкрити"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Проведіть пальцем угору, щоб розблокувати"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Проведіть пальцем праворуч, щоб скористатися телефоном"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Проведіть пальцем ліворуч, щоб скористатися камерою"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Доки ви не вимкнете"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного зарядження)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Протягом хвилини"</item>
<item quantity="other" msgid="6924190729213550991">"Протягом %d хв"</item>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 3ddea9629397..e15b1b5e1747 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Bật."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Tắt."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Đã kết nối."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Đang kết nối."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> thiết bị)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Đã tắt Bluetooth"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Độ sáng"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Tự động xoay"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Khóa xoay"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Đã khóa ở chế độ xoay dọc"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Đã khóa ở chế độ xoay ngang"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Tự động xoay"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Khóa xoay"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Dọc"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Ngang"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Phương thức nhập"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Vị trí"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Tắt vị trí"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Chưa được kết nối"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Không có mạng nào"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Tắt Wi-Fi"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Truyền màn hình"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Màn hình truyền"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Độ sáng"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"TỰ ĐỘNG"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Đảo ngược màu"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Chạm để hiển thị"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Không làm phiền"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d thông báo khác"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Thông báo ít khẩn cấp hơn bên dưới"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Nhấn lại để mở"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Vuốt lên để mở khóa"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Vuốt sang phải để mở điện thoại"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Vuốt sang trái để mở máy ảnh"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Cho đến khi bạn tắt tính năng này"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Đang sạc (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho đến khi đầy)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Trong một phút"</item>
<item quantity="other" msgid="6924190729213550991">"Trong %d phút"</item>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 934ac8c21da3..2bcd6b8f8941 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"开启。"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"关闭。"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"已连接。"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"正在连接。"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"蓝牙(<xliff:g id="NUMBER">%d</xliff:g> 台设备)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"蓝牙:关闭"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自动旋转"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"屏幕方向:锁定"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"锁定为纵向"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"锁定为横向"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"自动旋转"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"旋转功能已锁定"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"纵向"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"横向"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"输入法"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"位置信息"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"位置信息:关闭"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未连接"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"无网络"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN:关闭"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"投射屏幕"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"投射屏幕"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自动"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"反色"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"触摸即可显示"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"勿扰"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"还有%d条"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+另外<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>条"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"不太紧急的通知会显示在下方"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"再次点按即可打开"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"向上滑动即可解锁"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"向右滑动可打开拨号界面"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"向左滑动可打开相机"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"直到您将其关闭"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"正在充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>才能充满)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1分钟"</item>
<item quantity="other" msgid="6924190729213550991">"%d分钟"</item>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 40b56fe36eb5..25d9bcea9fbe 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"開啟。"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"關閉。"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"已連線。"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"連線中。"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 部裝置)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"藍牙關閉"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動旋轉"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"已鎖定屏幕旋轉功能"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"已鎖定為直向"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"已鎖定為橫向"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"自動旋轉"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"輪流展示鎖定"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"直向"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"橫向"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"輸入法"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"位置"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"位置關閉"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未連線"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網絡"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 關閉"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"放送螢幕"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"放送螢幕"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"反轉顏色"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"請勿騷擾"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"還有 %d 個"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"不太緊急的通知會在下方顯示"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"再次輕按即可開啟"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"向上快速滑動即可解鎖"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"向右快速滑動即可使用手機功能"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"向左快速滑動即可使用相機功能"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"直至您關閉這項設定"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1 分鐘"</item>
<item quantity="other" msgid="6924190729213550991">"%d 分鐘"</item>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c1a48c40f88b..4e4007aba04b 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"開啟。"</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"關閉。"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"已連線。"</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"連線中。"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -189,10 +188,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 個裝置)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"關閉藍牙"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動旋轉"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"已鎖定螢幕旋轉功能"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"已鎖定為縱向"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"已鎖定為橫向"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"自動旋轉"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"已鎖定旋轉"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"縱向"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"橫向"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"輸入法"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"定位"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"定位服務已關閉"</string>
@@ -206,7 +205,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未連線"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網路"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 已關閉"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"投放螢幕"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"投放螢幕"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"反轉顏色"</string>
@@ -228,13 +227,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"請勿打擾"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"還有 %d 則"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"較不緊急的通知會顯示在下方"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"再次輕按即可開啟"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"向上滑動即可解鎖"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"向左滑動可使用手機功能"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"向左滑動可使用相機功能"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"手動關閉這項設定前一律啟用"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後充飽)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"1 分鐘"</item>
<item quantity="other" msgid="6924190729213550991">"%d 分鐘"</item>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index af49a7f80dcb..7f292c17742b 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -120,8 +120,7 @@
<string name="accessibility_desc_on" msgid="2385254693624345265">"Vula."</string>
<string name="accessibility_desc_off" msgid="6475508157786853157">"Vala."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ixhunyiwe."</string>
- <!-- no translation found for accessibility_desc_connecting (3812924520316280149) -->
- <skip />
+ <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Iyaxhuma."</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
<string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"I-HSPA"</string>
@@ -187,10 +186,10 @@
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"I-Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> amadivayisi)"</string>
<string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"I-Bluetooth ivaliwe"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ukugqama"</string>
- <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Ukuphendula ngokuzenzakalela"</string>
- <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ukuphendula kukhiyiwe"</string>
- <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Kukhiyelwe ekumeni ngobude"</string>
- <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Kukhiyelwe ekwakhiweni kwezwe"</string>
+ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Ukuphenduka okuzenzakalelayo"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Ukuphenduka kukhiyiwe"</string>
+ <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Ukuma ngobude"</string>
+ <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Ndlaleka okubanzi"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Indlela yokungenayo"</string>
<string name="quick_settings_location_label" msgid="5011327048748762257">"Indawo"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"Indawo ivaliwe"</string>
@@ -204,7 +203,7 @@
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Akuxhunyiwe"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string>
- <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Isikrini sabalingisi"</string>
+ <string name="quick_settings_remote_display_no_connection_label" msgid="7482103121002965053">"Isikrini sabadlali"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ukugqama"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OKUZENZAKALELAYO"</string>
<string name="quick_settings_inversion_label" msgid="8790919884718619648">"Faka imibala"</string>
@@ -226,13 +225,14 @@
</plurals>
<string name="zen_mode_notification_text" msgid="8336623711388065713">"Thinta ukuze ubonise"</string>
<string name="zen_mode_title" msgid="8793432092004749188">"Ungaphazamisi"</string>
- <plurals name="keyguard_more_overflow_text">
- <item quantity="other" msgid="9180696159506883684">"%d okuningi"</item>
- </plurals>
+ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
<string name="speed_bump_explanation" msgid="1288875699658819755">"Izaziso ezingasheshi kakhulu ezingezansi"</string>
<string name="notification_tap_again" msgid="7590196980943943842">"Thepha futhi ukuze uvule"</string>
<string name="keyguard_unlock" msgid="8043466894212841998">"Swayiphela phezulu ukuze uvule"</string>
+ <string name="phone_hint" msgid="3101468054914424646">"Swayiphela ngakwesokudla ukuze uthole ifoni"</string>
+ <string name="camera_hint" msgid="5241441720959174226">"Swayiphela ngakwesokunxele ukuze uthole ikhamela"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Uze uvale lokhu"</string>
+ <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Iyashaja (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
<plurals name="zen_mode_duration_minutes">
<item quantity="one" msgid="9040808414992812341">"Iminithi elilodwa"</item>
<item quantity="other" msgid="6924190729213550991">"Amaminithi angu-%d"</item>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 34cfbe8e9f42..8c1a9c710dd4 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -29,7 +29,6 @@
<drawable name="status_bar_notification_row_background_color">#ff090909</drawable>
<color name="notification_list_shadow_top">#80000000</color>
<drawable name="recents_callout_line">#99ffffff</drawable>
- <drawable name="notification_item_background_legacy_color">#ffaaaaaa</drawable>
<drawable name="heads_up_notification_bg_pressed">#ff33B5E5</drawable>
<color name="batterymeter_frame_color">#66FFFFFF</color><!-- 40% white -->
<color name="batterymeter_charge_color">#FFFFFFFF</color>
@@ -42,24 +41,10 @@
<color name="qs_tile_divider">#29ffffff</color><!-- 16% white -->
<color name="qs_tile_text">#FFFFFFFF</color>
<color name="status_bar_clock_color">#FFFFFFFF</color>
- <drawable name="notification_item_background_color">#ff111111</drawable>
- <drawable name="notification_item_background_color_pressed">#ff454545</drawable>
<!-- Tint color for the content on the notification overflow card. -->
<color name="keyguard_overflow_content_color">#ff686868</color>
- <!-- The color of the red speed bump dot -->
- <color name="speed_bump_dot_red">#ffd50000</color>
-
- <!-- The color of the blue speed bump dot -->
- <color name="speed_bump_dot_blue">#ff2962ff</color>
-
- <!-- The color of the yellow speed bump dot -->
- <color name="speed_bump_dot_yellow">#ffffd600</color>
-
- <!-- The color of the green speed bump dot -->
- <color name="speed_bump_dot_green">#ff00c853</color>
-
<!-- The default recents task bar background color. -->
<color name="recents_task_bar_default_background_color">#e6444444</color>
<!-- The default recents task bar text color. -->
@@ -77,7 +62,7 @@
<color name="keyguard_affordance">#ffffffff</color>
- <!-- Our quantum color palette (deep teal) -->
+ <!-- Our material color palette (deep teal) -->
<color name="primary_color">#ff7fcac3</color>
<color name="background_color_1">#ff384248</color>
<color name="background_color_1_press">#ff54656e</color>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 79a1df41d2a8..1ef5bcd128bd 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -141,5 +141,10 @@
<!-- Wait on the touch feedback this long before performing an action. -->
<integer name="feedback_start_delay">300</integer>
+
+ <!-- Set to true to enable the classic notification ticker that scrolls
+ Notification.tickerText across the status bar for what seems like an
+ eternity. -->
+ <bool name="enable_ticker">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 35bc7e39a35a..b8f9ad36b0c9 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -275,14 +275,8 @@
<!-- The minimum amount of top overscroll to go to the quick settings. -->
<dimen name="min_top_overscroll_to_qs">36dp</dimen>
- <!-- The height of the collapsed speed bump view. -->
- <dimen name="speed_bump_height_collapsed">24dp</dimen>
-
- <!-- The padding inset the explanation text needs compared to the collapsed height -->
- <dimen name="speed_bump_text_padding_inset">10dp</dimen>
-
- <!-- The height of the speed bump dots. -->
- <dimen name="speed_bump_dots_height">5dp</dimen>
+ <!-- The height of the speed bump view. -->
+ <dimen name="speed_bump_height">16dp</dimen>
<!-- The total height of the stack in its collapsed size (i.e. when quick settings is open) -->
<dimen name="collapsed_stack_height">94dp</dimen>
@@ -338,4 +332,7 @@
<!-- The width of the region on the left/right edge of the screen for performing the camera/
phone hints. -->
<dimen name="edge_tap_area_width">48dp</dimen>
+
+ <!-- end margin for multi user switch in expanded quick settings -->
+ <dimen name="multi_user_switch_expanded_margin">8dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/internal.xml b/packages/SystemUI/res/values/internal.xml
index ddaab9422d79..7b93d318f156 100644
--- a/packages/SystemUI/res/values/internal.xml
+++ b/packages/SystemUI/res/values/internal.xml
@@ -17,6 +17,6 @@
<resources>
<dimen name="status_bar_height">@*android:dimen/status_bar_height</dimen>
<dimen name="navigation_bar_height">@*android:dimen/navigation_bar_height</dimen>
- <drawable name="notification_quantum_bg">@*android:drawable/notification_quantum_bg</drawable>
+ <drawable name="notification_material_bg">@*android:drawable/notification_material_bg</drawable>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 4c269a2616f1..b0b018dae339 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -214,7 +214,7 @@
<item name="android:colorControlActivated">#ffffffff</item>
</style>
- <style name="BorderlessButton" parent="@android:style/Widget.Quantum.Button.Borderless" />
+ <style name="BorderlessButton" parent="@android:style/Widget.Material.Button.Borderless" />
<style name="BorderlessButton.Tiny">
<item name="android:minHeight">12dip</item>
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index 0fb0f8b02c65..192ba5722bd0 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -17,13 +17,16 @@
package com.android.systemui.power;
import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.database.ContentObserver;
import android.os.BatteryManager;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.provider.Settings;
import android.util.Slog;
@@ -54,17 +57,22 @@ public class PowerUI extends SystemUI {
public void start() {
- mLowBatteryAlertCloseLevel = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_lowBatteryCloseWarningLevel);
- mLowBatteryReminderLevels[0] = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_lowBatteryWarningLevel);
- mLowBatteryReminderLevels[1] = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_criticalBatteryWarningLevel);
-
final PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mScreenOffTime = pm.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
mWarnings = new PowerDialogWarnings(mContext);
+ ContentObserver obs = new ContentObserver(mHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateBatteryWarningLevels();
+ }
+ };
+ final ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
+ false, obs, UserHandle.USER_ALL);
+ updateBatteryWarningLevels();
+
// Register for Intent broadcasts for...
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
@@ -73,6 +81,29 @@ public class PowerUI extends SystemUI {
mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
}
+ void updateBatteryWarningLevels() {
+ int critLevel = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_criticalBatteryWarningLevel);
+
+ final ContentResolver resolver = mContext.getContentResolver();
+ int defWarnLevel = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryWarningLevel);
+ int warnLevel = Settings.Global.getInt(resolver,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, defWarnLevel);
+ if (warnLevel == 0) {
+ warnLevel = defWarnLevel;
+ }
+ if (warnLevel < critLevel) {
+ warnLevel = critLevel;
+ }
+
+ mLowBatteryReminderLevels[0] = warnLevel;
+ mLowBatteryReminderLevels[1] = critLevel;
+ mLowBatteryAlertCloseLevel = mLowBatteryReminderLevels[0]
+ + mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryCloseWarningBump);
+ }
+
/**
* Buckets the battery level.
*
@@ -87,7 +118,7 @@ public class PowerUI extends SystemUI {
if (level >= mLowBatteryAlertCloseLevel) {
return 1;
}
- if (level >= mLowBatteryReminderLevels[0]) {
+ if (level > mLowBatteryReminderLevels[0]) {
return 0;
}
final int N = mLowBatteryReminderLevels.length;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index c76ee8c9f655..786cd9ec12ed 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -287,6 +287,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
public boolean activityIn;
public boolean activityOut;
public int overlayIconId;
+ public boolean filter;
@Override
public boolean copyTo(State other) {
@@ -300,6 +301,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
o.activityIn = activityIn;
o.activityOut = activityOut;
o.overlayIconId = overlayIconId;
+ o.filter = filter;
return super.copyTo(other) || changed;
}
@@ -311,6 +313,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
rt.insert(rt.length() - 1, ",activityIn=" + activityIn);
rt.insert(rt.length() - 1, ",activityOut=" + activityOut);
rt.insert(rt.length() - 1, ",overlayIconId=" + overlayIconId);
+ rt.insert(rt.length() - 1, ",filter=" + filter);
return rt;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index 901cc104702e..d5fe033db88c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -93,12 +93,12 @@ public final class SignalTileView extends QSTileView {
final SignalState s = (SignalState) state;
mSignal.setImageDrawable(null); // force refresh
mSignal.setImageResource(s.iconId);
- mSignal.setColorFilter(FILTER);
+ mSignal.setColorFilter(s.filter ? FILTER : null);
if (s.overlayIconId > 0) {
mOverlay.setVisibility(VISIBLE);
mOverlay.setImageDrawable(null); // force refresh
mOverlay.setImageResource(s.overlayIconId);
- mOverlay.setColorFilter(FILTER);
+ mOverlay.setColorFilter(s.filter ? FILTER : null);
} else {
mOverlay.setVisibility(GONE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 20ed62992d05..7431e6941e51 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -84,7 +84,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
} else if (connecting) {
state.iconId = R.drawable.ic_qs_bluetooth_connecting;
stateContentDescription = mContext.getString(R.string.accessibility_desc_connecting);
- state.label = mController.getLastDeviceName();
+ state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
} else {
state.iconId = R.drawable.ic_qs_bluetooth_on;
stateContentDescription = mContext.getString(R.string.accessibility_desc_on);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index 182a0ced3045..6d91d33f5f80 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -72,12 +72,15 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
if (cb == null) return;
final Resources r = mContext.getResources();
- state.iconId = cb.enabled && (cb.mobileSignalIconId > 0)
+ state.iconId = cb.noSim
+ ? R.drawable.stat_sys_no_sim
+ : cb.enabled && (cb.mobileSignalIconId > 0)
? cb.mobileSignalIconId
: R.drawable.ic_qs_signal_no_signal;
state.overlayIconId = cb.enabled && (cb.dataTypeIconId > 0) && !cb.wifiEnabled
? cb.dataTypeIconId
: 0;
+ state.filter = state.iconId != R.drawable.stat_sys_no_sim;
state.activityIn = cb.enabled && cb.activityIn;
state.activityOut = cb.enabled && cb.activityOut;
@@ -117,6 +120,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
boolean activityIn;
boolean activityOut;
String enabledDesc;
+ boolean noSim;
}
private final NetworkSignalChangedCallback mCallback = new NetworkSignalChangedCallback() {
@@ -134,7 +138,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
int mobileSignalIconId,
String mobileSignalContentDescriptionId, int dataTypeIconId,
boolean activityIn, boolean activityOut,
- String dataTypeContentDescriptionId, String description) {
+ String dataTypeContentDescriptionId, String description, boolean noSim) {
final CallbackInfo info = new CallbackInfo(); // TODO pool?
info.enabled = enabled;
info.wifiEnabled = mWifiEnabled;
@@ -145,6 +149,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
info.activityIn = activityIn;
info.activityOut = activityOut;
info.enabledDesc = description;
+ info.noSim = noSim;
refreshState(info);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index 53013622d8c9..7c2c7c301bbf 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -71,6 +71,6 @@ public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
state.visible = mVisible;
state.value = enabled;
state.label = mContext.getString(R.string.quick_settings_inversion_label);
- state.iconId = R.drawable.ic_qs_color_inversion;
+ state.iconId = enabled ? R.drawable.ic_qs_inversion_on : R.drawable.ic_qs_inversion_off;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index db9b0547f8ba..04f1eb5359a6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -16,9 +16,6 @@
package com.android.systemui.qs.tiles;
-import android.content.res.Resources;
-import android.graphics.drawable.AnimationDrawable;
-
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.LocationController;
@@ -63,28 +60,15 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
protected void handleUpdateState(BooleanState state, Object arg) {
final boolean locationEnabled = mController.isLocationEnabled();
state.visible = true;
- if (state.value != locationEnabled) {
- state.value = locationEnabled;
- final Resources res = mContext.getResources();
- final AnimationDrawable d = (AnimationDrawable) res.getDrawable(locationEnabled
- ? R.drawable.ic_qs_location_on
- : R.drawable.ic_qs_location_off);
- state.icon = d;
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- d.start();
- }
- });
- }
+ state.value = locationEnabled;
if (locationEnabled) {
- if (state.icon == null) state.iconId = R.drawable.ic_qs_location_01;
+ state.iconId = R.drawable.ic_qs_location_on;
state.label = mContext.getString(R.string.quick_settings_location_label);
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_location,
mContext.getString(R.string.accessibility_desc_on));
} else {
- if (state.icon == null) state.iconId = R.drawable.ic_qs_location_11;
+ state.iconId = R.drawable.ic_qs_location_off;
state.label = mContext.getString(R.string.quick_settings_location_label);
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_location,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index 6b73002375bc..a2364973fd41 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -87,6 +87,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
state.connected = wifiConnected;
state.activityIn = cb.enabled && cb.activityIn;
state.activityOut = cb.enabled && cb.activityOut;
+ state.filter = true;
final String signalContentDescription;
final Resources r = mContext.getResources();
if (wifiConnected) {
@@ -159,7 +160,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
int mobileSignalIconId,
String mobileSignalContentDescriptionId, int dataTypeIconId,
boolean activityIn, boolean activityOut,
- String dataTypeContentDescriptionId, String description) {
+ String dataTypeContentDescriptionId, String description, boolean noSim) {
// noop
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
index 76e88a57ff42..147ff62bac7a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Constants.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
@@ -106,7 +106,7 @@ public class Constants {
// The height of the peek space relative to the stack height
public static final float StackPeekHeightPct = 0.1f;
// The min scale of the last card in the peek area
- public static final float StackPeekMinScale = 0.9f;
+ public static final float StackPeekMinScale = 0.8f;
// The number of cards we see in the peek space
public static final int StackPeekNumCards = 3;
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 8680786a470d..96344d5d8e29 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -41,6 +41,8 @@ import com.android.systemui.recents.model.SpaceNode;
import com.android.systemui.recents.model.TaskStack;
import com.android.systemui.recents.views.RecentsView;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Set;
@@ -79,6 +81,19 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
boolean mVisible;
boolean mTaskLaunched;
+ private static Method sPropertyMethod;
+ static {
+ try {
+ Class<?> c = Class.forName("android.view.GLES20Canvas");
+ sPropertyMethod = c.getDeclaredMethod("setProperty", String.class, String.class);
+ if (!sPropertyMethod.isAccessible()) sPropertyMethod.setAccessible(true);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ }
+ }
+
// Broadcast receiver to handle messages from our RecentsService
BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() {
@Override
@@ -139,21 +154,12 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
// Add the default no-recents layout
if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) {
mEmptyView.setVisibility(View.VISIBLE);
-
- // Dim the background even more
- WindowManager.LayoutParams wlp = getWindow().getAttributes();
- wlp.dimAmount = Constants.Values.Window.DarkBackgroundDim;
- getWindow().setAttributes(wlp);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
} else {
mEmptyView.setVisibility(View.GONE);
-
- // Un-dim the background
- WindowManager.LayoutParams wlp = getWindow().getAttributes();
- wlp.dimAmount = 0f;
- getWindow().setAttributes(wlp);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
+
+ // Dim the background
+ mRecentsView.setBackgroundColor(0x80000000);
}
/** Attempts to allocate and bind the search bar app widget */
@@ -277,6 +283,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
LayoutInflater inflater = LayoutInflater.from(this);
mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false);
mNavBarScrimView = inflater.inflate(R.layout.recents_nav_bar_scrim, mContainerView, false);
+ mNavBarScrimView.setLayoutParams(new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM));
mContainerView = new FrameLayout(this);
mContainerView.addView(mRecentsView);
@@ -296,6 +305,16 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
if (savedInstanceState != null) {
onConfigurationChange();
}
+
+ // XXX: Update the shadows
+ try {
+ sPropertyMethod.invoke(null, "ambientShadowStrength", String.valueOf(35f));
+ sPropertyMethod.invoke(null, "ambientRatio", String.valueOf(0.5f));
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
}
void onConfigurationChange() {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java
index 0c2c11d1983c..113efe389b68 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java
@@ -121,6 +121,7 @@ class SystemUIMessageHandler extends Handler {
// Send a broadcast to hide recents
Intent intent = new Intent(RecentsService.ACTION_HIDE_RECENTS_ACTIVITY);
intent.setPackage(context.getPackageName());
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
if (msg.arg1 != 0) {
intent.putExtra(RecentsService.EXTRA_TRIGGERED_FROM_ALT_TAB, true);
}
@@ -129,6 +130,7 @@ class SystemUIMessageHandler extends Handler {
// Send a broadcast to toggle recents
Intent intent = new Intent(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY);
intent.setPackage(context.getPackageName());
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
context.sendBroadcast(intent);
// Time this path
@@ -140,6 +142,7 @@ class SystemUIMessageHandler extends Handler {
// Send a broadcast to start the enter animation
Intent intent = new Intent(RecentsService.ACTION_START_ENTER_ANIMATION);
intent.setPackage(context.getPackageName());
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
context.sendBroadcast(intent);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 5830e37edca8..8d9f8beed32d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -156,10 +156,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
float boundedT = Math.max(t, -(numPeekCards + 1));
// Set the scale relative to its position
+ int numFrontScaledCards = 3;
float minScale = Constants.Values.TaskStackView.StackPeekMinScale;
float scaleRange = 1f - minScale;
- float scaleInc = scaleRange / numPeekCards;
- float scale = Math.max(minScale, Math.min(1f, 1f + (boundedT * scaleInc)));
+ float scaleInc = scaleRange / (numPeekCards + numFrontScaledCards);
+ float scale = Math.max(minScale, Math.min(1f, minScale +
+ ((boundedT + (numPeekCards + 1)) * scaleInc)));
float scaleYOffset = ((1f - scale) * mTaskRect.height()) / 2;
transform.scale = scale;
@@ -171,6 +173,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
transform.translationY = (int) (boundedT * overlapHeight - scaleYOffset);
}
+ // Set the z translation
+ RecentsConfiguration config = RecentsConfiguration.getInstance();
+ int minZ = config.taskViewTranslationZMinPx;
+ int incZ = config.taskViewTranslationZIncrementPx;
+ transform.translationZ = (int) Math.max(minZ, minZ + ((boundedT + numPeekCards) * incZ));
+
// Set the alphas
transform.dismissAlpha = Math.max(-1f, Math.min(0f, t + 1)) + 1f;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index 632c816edad5..5df5e4dd901c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -142,8 +142,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
TaskViewTransform toTransform, int duration) {
RecentsConfiguration config = RecentsConfiguration.getInstance();
- int minZ = config.taskViewTranslationZMinPx;
- int incZ = config.taskViewTranslationZIncrementPx;
// Update the bar view
mBarView.updateViewPropertiesToTaskTransform(animateFromTransform, toTransform, duration);
@@ -153,14 +151,14 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
if (animateFromTransform != null) {
setTranslationY(animateFromTransform.translationY);
if (Constants.DebugFlags.App.EnableShadows) {
- setTranslationZ(Math.max(minZ, minZ + (animateFromTransform.t * incZ)));
+ setTranslationZ(animateFromTransform.translationZ);
}
setScaleX(animateFromTransform.scale);
setScaleY(animateFromTransform.scale);
setAlpha(animateFromTransform.alpha);
}
if (Constants.DebugFlags.App.EnableShadows) {
- animate().translationZ(Math.max(minZ, minZ + (toTransform.t * incZ)));
+ animate().translationZ(toTransform.translationZ);
}
animate().translationY(toTransform.translationY)
.scaleX(toTransform.scale)
@@ -179,7 +177,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
} else {
setTranslationY(toTransform.translationY);
if (Constants.DebugFlags.App.EnableShadows) {
- setTranslationZ(Math.max(minZ, minZ + (toTransform.t * incZ)));
+ setTranslationZ(toTransform.translationZ);
}
setScaleX(toTransform.scale);
setScaleY(toTransform.scale);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
index e6391a8cd1b8..3c3ebd7ad193 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
@@ -22,6 +22,7 @@ import android.graphics.Rect;
/* The transform state for a task view */
public class TaskViewTransform {
public int translationY = 0;
+ public int translationZ = 0;
public float scale = 1f;
public float alpha = 1f;
public float dismissAlpha = 1f;
@@ -35,6 +36,7 @@ public class TaskViewTransform {
public TaskViewTransform(TaskViewTransform o) {
translationY = o.translationY;
+ translationZ = o.translationZ;
scale = o.scale;
alpha = o.alpha;
dismissAlpha = o.dismissAlpha;
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index a770f58e6f2d..80e85f940fa1 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -34,6 +34,7 @@ import java.util.ArrayList;
public class BrightnessController implements ToggleSlider.Listener {
private static final String TAG = "StatusBar.BrightnessController";
+ private static final boolean SHOW_AUTOMATIC_ICON = false;
/**
* {@link android.provider.Settings.System#SCREEN_AUTO_BRIGHTNESS_ADJ} uses the range [-1, 1].
@@ -232,7 +233,7 @@ public class BrightnessController implements ToggleSlider.Listener {
private void updateIcon(boolean automatic) {
if (mIcon != null) {
- mIcon.setImageResource(automatic ?
+ mIcon.setImageResource(automatic && SHOW_AUTOMATIC_ICON ?
com.android.systemui.R.drawable.ic_qs_brightness_auto_on :
com.android.systemui.R.drawable.ic_qs_brightness_auto_off);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
index dcd187cebe9c..8d19f50e25ad 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -33,11 +33,13 @@ import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewAnimationUtils;
import android.view.ViewConfiguration;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.PathInterpolator;
+
import com.android.systemui.R;
import com.android.systemui.statusbar.stack.StackStateAnimator;
@@ -88,8 +90,8 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
private boolean mDimmed;
- private int mBgResId = com.android.internal.R.drawable.notification_quantum_bg;
- private int mDimmedBgResId = com.android.internal.R.drawable.notification_quantum_bg_dim;
+ private int mBgResId = com.android.internal.R.drawable.notification_material_bg;
+ private int mDimmedBgResId = com.android.internal.R.drawable.notification_material_bg_dim;
private int mBgTint = 0;
private int mDimmedBgTint = 0;
@@ -141,7 +143,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
setClipToPadding(false);
mAppearAnimationFilter = new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_ATOP);
mRoundedRectCornerRadius = getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_quantum_rounded_rect_radius);
+ com.android.internal.R.dimen.notification_material_rounded_rect_radius);
}
@Override
@@ -156,7 +158,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
private final Runnable mTapTimeoutRunnable = new Runnable() {
@Override
public void run() {
- makeInactive();
+ makeInactive(true /* animate */);
}
};
@@ -181,7 +183,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
break;
case MotionEvent.ACTION_MOVE:
if (!isWithinTouchSlop(event)) {
- makeInactive();
+ makeInactive(true /* animate */);
return false;
}
break;
@@ -191,14 +193,17 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
makeActive();
postDelayed(mTapTimeoutRunnable, DOUBLETAP_TIMEOUT_MS);
} else {
- performClick();
+ boolean performed = performClick();
+ if (performed) {
+ removeCallbacks(mTapTimeoutRunnable);
+ }
}
} else {
- makeInactive();
+ makeInactive(true /* animate */);
}
break;
case MotionEvent.ACTION_CANCEL:
- makeInactive();
+ makeInactive(true /* animate */);
break;
default:
break;
@@ -219,7 +224,8 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
int heightHalf = mBackgroundNormal.getActualHeight()/2;
float radius = (float) Math.sqrt(widthHalf*widthHalf + heightHalf*heightHalf);
ValueAnimator animator =
- mBackgroundNormal.createRevealAnimator(widthHalf, heightHalf, 0, radius);
+ ViewAnimationUtils.createCircularReveal(mBackgroundNormal,
+ widthHalf, heightHalf, 0, radius);
mBackgroundNormal.setVisibility(View.VISIBLE);
Interpolator interpolator;
Interpolator alphaInterpolator;
@@ -254,10 +260,14 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
/**
* Cancels the hotspot and makes the notification inactive.
*/
- private void makeInactive() {
+ public void makeInactive(boolean animate) {
if (mActivated) {
if (mDimmed) {
- startActivateAnimation(true /* reverse */);
+ if (animate) {
+ startActivateAnimation(true /* reverse */);
+ } else {
+ mBackgroundNormal.setVisibility(View.INVISIBLE);
+ }
}
mActivated = false;
}
@@ -348,6 +358,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
mBackgroundDimmed.setVisibility(View.INVISIBLE);
mBackgroundNormal.setVisibility(View.VISIBLE);
mBackgroundNormal.setAlpha(1f);
+ removeCallbacks(mTapTimeoutRunnable);
}
}
@@ -578,7 +589,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
}
public interface OnActivatedListener {
- void onActivated(View view);
- void onActivationReset(View view);
+ void onActivated(ActivatableNotificationView view);
+ void onActivationReset(ActivatableNotificationView view);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 06cc476d0295..5a9fe91a58d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -48,7 +48,7 @@ import android.provider.Settings;
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.service.notification.NotificationListenerService;
-import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.text.TextUtils;
import android.util.Log;
@@ -80,11 +80,10 @@ import com.android.systemui.SearchPanelView;
import com.android.systemui.SystemUI;
import com.android.systemui.statusbar.NotificationData.Entry;
import com.android.systemui.statusbar.phone.KeyguardTouchDelegate;
+import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.Locale;
import static com.android.keyguard.KeyguardHostView.OnDismissAction;
@@ -106,6 +105,7 @@ public abstract class BaseStatusBar extends SystemUI implements
protected static final int MSG_SHOW_HEADS_UP = 1026;
protected static final int MSG_HIDE_HEADS_UP = 1027;
protected static final int MSG_ESCALATE_HEADS_UP = 1028;
+ protected static final int MSG_DECAY_HEADS_UP = 1029;
protected static final boolean ENABLE_HEADS_UP = true;
// scores above this threshold should be displayed in heads up mode.
@@ -129,7 +129,9 @@ public abstract class BaseStatusBar extends SystemUI implements
protected NotificationData mNotificationData = new NotificationData();
protected NotificationStackScrollLayout mStackScroller;
- protected NotificationData.Entry mInterruptingNotificationEntry;
+ // for heads up notifications
+ protected HeadsUpNotificationView mHeadsUpNotificationView;
+ protected int mHeadsUpNotificationDecay;
protected long mInterruptingNotificationTime;
// used to notify status bar for suppressing notification LED
@@ -291,7 +293,7 @@ public abstract class BaseStatusBar extends SystemUI implements
public void onListenerConnected() {
if (DEBUG) Log.d(TAG, "onListenerConnected");
final StatusBarNotification[] notifications = getActiveNotifications();
- final Ranking currentRanking = getCurrentRanking();
+ final RankingMap currentRanking = getCurrentRanking();
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -303,41 +305,40 @@ public abstract class BaseStatusBar extends SystemUI implements
}
@Override
- public void onNotificationPosted(final StatusBarNotification sbn) {
+ public void onNotificationPosted(final StatusBarNotification sbn,
+ final RankingMap rankingMap) {
if (DEBUG) Log.d(TAG, "onNotificationPosted: " + sbn);
- final Ranking currentRanking = getCurrentRanking();
mHandler.post(new Runnable() {
@Override
public void run() {
if (mNotificationData.findByKey(sbn.getKey()) != null) {
- updateNotificationInternal(sbn, currentRanking);
+ updateNotificationInternal(sbn, rankingMap);
} else {
- addNotificationInternal(sbn, currentRanking);
+ addNotificationInternal(sbn, rankingMap);
}
}
});
}
@Override
- public void onNotificationRemoved(final StatusBarNotification sbn) {
+ public void onNotificationRemoved(final StatusBarNotification sbn,
+ final RankingMap rankingMap) {
if (DEBUG) Log.d(TAG, "onNotificationRemoved: " + sbn);
- final Ranking currentRanking = getCurrentRanking();
mHandler.post(new Runnable() {
@Override
public void run() {
- removeNotificationInternal(sbn.getKey(), currentRanking);
+ removeNotificationInternal(sbn.getKey(), rankingMap);
}
});
}
@Override
- public void onNotificationRankingUpdate() {
+ public void onNotificationRankingUpdate(final RankingMap rankingMap) {
if (DEBUG) Log.d(TAG, "onRankingUpdate");
- final Ranking currentRanking = getCurrentRanking();
mHandler.post(new Runnable() {
@Override
public void run() {
- updateRankingInternal(currentRanking);
+ updateRankingInternal(rankingMap);
}
});
}
@@ -505,8 +506,8 @@ public abstract class BaseStatusBar extends SystemUI implements
protected View updateNotificationVetoButton(View row, StatusBarNotification n) {
View vetoButton = row.findViewById(R.id.veto);
- if (n.isClearable() || (mInterruptingNotificationEntry != null
- && mInterruptingNotificationEntry.row == row)) {
+ if (n.isClearable() || (mHeadsUpNotificationView.getEntry() != null
+ && mHeadsUpNotificationView.getEntry().row == row)) {
final String _pkg = n.getPackageName();
final String _tag = n.getTag();
final int _id = n.getId();
@@ -545,21 +546,20 @@ public abstract class BaseStatusBar extends SystemUI implements
if (entry.expanded.getId() != com.android.internal.R.id.status_bar_latest_event_content) {
// Using custom RemoteViews
- if (version > 0 && version < Build.VERSION_CODES.GINGERBREAD) {
- entry.row.setBackgroundResource(R.drawable.notification_row_legacy_bg);
- } else if (version < Build.VERSION_CODES.L) {
+ if (version >= Build.VERSION_CODES.GINGERBREAD && version < Build.VERSION_CODES.L) {
entry.row.setBackgroundResourceIds(
com.android.internal.R.drawable.notification_bg,
com.android.internal.R.drawable.notification_bg_dim);
+ entry.legacy = true;
}
} else {
// Using platform templates
final int color = sbn.getNotification().color;
if (isMediaNotification(entry)) {
entry.row.setBackgroundResourceIds(
- com.android.internal.R.drawable.notification_quantum_bg,
+ com.android.internal.R.drawable.notification_material_bg,
color,
- com.android.internal.R.drawable.notification_quantum_bg_dim,
+ com.android.internal.R.drawable.notification_material_bg_dim,
color);
}
}
@@ -766,6 +766,12 @@ public abstract class BaseStatusBar extends SystemUI implements
public abstract void resetHeadsUpDecayTimer();
+ public abstract void scheduleHeadsUpOpen();
+
+ public abstract void scheduleHeadsUpClose();
+
+ public abstract void scheduleHeadsUpEscalation();
+
/**
* Save the current "public" (locked and secure) state of the lockscreen.
*/
@@ -797,6 +803,18 @@ public abstract class BaseStatusBar extends SystemUI implements
return mUsersAllowingPrivateNotifications.get(userHandle);
}
+ public void onNotificationClear(StatusBarNotification notification) {
+ try {
+ mBarService.onNotificationClear(
+ notification.getPackageName(),
+ notification.getTag(),
+ notification.getId(),
+ notification.getUserId());
+ } catch (android.os.RemoteException ex) {
+ // oh well
+ }
+ }
+
protected class H extends Handler {
public void handleMessage(Message m) {
Intent intent;
@@ -981,7 +999,7 @@ public abstract class BaseStatusBar extends SystemUI implements
if (publicViewLocal == null) {
// Add a basic notification template
publicViewLocal = LayoutInflater.from(mContext).inflate(
- com.android.internal.R.layout.notification_template_quantum_base,
+ com.android.internal.R.layout.notification_template_material_base,
expandedPublic, true);
final TextView title = (TextView) publicViewLocal.findViewById(com.android.internal.R.id.title);
@@ -992,7 +1010,10 @@ public abstract class BaseStatusBar extends SystemUI implements
title.setText(entry.notification.getPackageName());
}
- final ImageView icon = (ImageView) publicViewLocal.findViewById(com.android.internal.R.id.icon);
+ final ImageView icon = (ImageView) publicViewLocal.findViewById(
+ com.android.internal.R.id.icon);
+ final ImageView profileIcon = (ImageView) publicViewLocal.findViewById(
+ com.android.internal.R.id.profile_icon);
final StatusBarIcon ic = new StatusBarIcon(entry.notification.getPackageName(),
entry.notification.getUser(),
@@ -1008,9 +1029,22 @@ public abstract class BaseStatusBar extends SystemUI implements
com.android.internal.R.drawable.notification_icon_legacy_bg_inset);
}
- final TextView text = (TextView) publicViewLocal.findViewById(com.android.internal.R.id.text);
+ if (profileIcon != null) {
+ Drawable profileDrawable
+ = mUserManager.getBadgeForUser(entry.notification.getUser());
+ if (profileDrawable != null) {
+ profileIcon.setImageDrawable(profileDrawable);
+ profileIcon.setVisibility(View.VISIBLE);
+ } else {
+ profileIcon.setVisibility(View.GONE);
+ }
+ }
+
+ final TextView text = (TextView) publicViewLocal.findViewById(
+ com.android.internal.R.id.text);
text.setText("Unlock your device to see this notification.");
+ entry.autoRedacted = true;
// TODO: fill out "time" as well
}
@@ -1086,7 +1120,7 @@ public abstract class BaseStatusBar extends SystemUI implements
try {
if (mIsHeadsUp) {
- mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+ mHeadsUpNotificationView.clear();
}
mBarService.onNotificationClick(mNotificationKey);
} catch (RemoteException ex) {
@@ -1142,7 +1176,7 @@ public abstract class BaseStatusBar extends SystemUI implements
}
}
- protected StatusBarNotification removeNotificationViews(String key, Ranking ranking) {
+ protected StatusBarNotification removeNotificationViews(String key, RankingMap ranking) {
NotificationData.Entry entry = mNotificationData.remove(key, ranking);
if (entry == null) {
Log.w(TAG, "removeNotification for unknown key: " + key);
@@ -1182,7 +1216,7 @@ public abstract class BaseStatusBar extends SystemUI implements
return entry;
}
- protected void addNotificationViews(Entry entry, Ranking ranking) {
+ protected void addNotificationViews(Entry entry, RankingMap ranking) {
if (entry == null) {
return;
}
@@ -1191,7 +1225,7 @@ public abstract class BaseStatusBar extends SystemUI implements
updateNotifications();
}
- private void addNotificationViews(StatusBarNotification notification, Ranking ranking) {
+ private void addNotificationViews(StatusBarNotification notification, RankingMap ranking) {
addNotificationViews(createNotificationViews(notification), ranking);
}
@@ -1277,9 +1311,9 @@ public abstract class BaseStatusBar extends SystemUI implements
}
public abstract void addNotificationInternal(StatusBarNotification notification,
- Ranking ranking);
+ RankingMap ranking);
- protected abstract void updateRankingInternal(Ranking ranking);
+ protected abstract void updateRankingInternal(RankingMap ranking);
@Override
public void removeNotification(String key) {
@@ -1288,7 +1322,7 @@ public abstract class BaseStatusBar extends SystemUI implements
}
}
- public abstract void removeNotificationInternal(String key, Ranking ranking);
+ public abstract void removeNotificationInternal(String key, RankingMap ranking);
public void updateNotification(StatusBarNotification notification) {
if (!USE_NOTIFICATION_LISTENER) {
@@ -1296,7 +1330,7 @@ public abstract class BaseStatusBar extends SystemUI implements
}
}
- public void updateNotificationInternal(StatusBarNotification notification, Ranking ranking) {
+ public void updateNotificationInternal(StatusBarNotification notification, RankingMap ranking) {
if (DEBUG) Log.d(TAG, "updateNotification(" + notification + ")");
final NotificationData.Entry oldEntry = mNotificationData.findByKey(notification.getKey());
@@ -1379,15 +1413,15 @@ public abstract class BaseStatusBar extends SystemUI implements
try {
updateNotificationViews(oldEntry, notification);
- if (ENABLE_HEADS_UP && mInterruptingNotificationEntry != null
- && oldNotification == mInterruptingNotificationEntry.notification) {
+ if (ENABLE_HEADS_UP && mHeadsUpNotificationView.getEntry() != null
+ && oldNotification == mHeadsUpNotificationView.getEntry().notification) {
if (!shouldInterrupt(notification)) {
if (DEBUG) Log.d(TAG, "no longer interrupts!");
- mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+ scheduleHeadsUpClose();
} else {
if (DEBUG) Log.d(TAG, "updating the current heads up:" + notification);
- mInterruptingNotificationEntry.notification = notification;
- updateHeadsUpViews(mInterruptingNotificationEntry, notification);
+ mHeadsUpNotificationView.getEntry().notification = notification;
+ updateHeadsUpViews(mHeadsUpNotificationView.getEntry(), notification);
}
}
@@ -1496,8 +1530,8 @@ public abstract class BaseStatusBar extends SystemUI implements
}
protected void notifyHeadsUpScreenOn(boolean screenOn) {
- if (!screenOn && mInterruptingNotificationEntry != null) {
- mHandler.sendEmptyMessage(MSG_ESCALATE_HEADS_UP);
+ if (!screenOn) {
+ scheduleHeadsUpEscalation();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 84005d1aa65e..5bad60205dc6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -209,7 +209,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
}
public int getMaxExpandHeight() {
- return mMaxExpandHeight;
+ return mShowingPublic ? mRowMinHeight : mMaxExpandHeight;
}
/**
@@ -221,30 +221,35 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
@Override
public boolean isContentExpandable() {
- return mPrivateLayout.isContentExpandable();
+ NotificationContentView showingLayout = getShowingLayout();
+ return showingLayout.isContentExpandable();
}
@Override
public void setActualHeight(int height, boolean notifyListeners) {
mPrivateLayout.setActualHeight(height);
+ mPublicLayout.setActualHeight(height);
invalidate();
super.setActualHeight(height, notifyListeners);
}
@Override
public int getMaxHeight() {
- return mPrivateLayout.getMaxHeight();
+ NotificationContentView showingLayout = getShowingLayout();
+ return showingLayout.getMaxHeight();
}
@Override
public int getMinHeight() {
- return mPrivateLayout.getMinHeight();
+ NotificationContentView showingLayout = getShowingLayout();
+ return showingLayout.getMinHeight();
}
@Override
public void setClipTopAmount(int clipTopAmount) {
super.setClipTopAmount(clipTopAmount);
mPrivateLayout.setClipTopAmount(clipTopAmount);
+ mPublicLayout.setClipTopAmount(clipTopAmount);
}
public boolean isBelowSpeedBump() {
@@ -256,6 +261,16 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
}
public void notifyContentUpdated() {
+ mPublicLayout.notifyContentUpdated();
mPrivateLayout.notifyContentUpdated();
}
+
+ public boolean isShowingLayoutLayouted() {
+ NotificationContentView showingLayout = getShowingLayout();
+ return showingLayout.getWidth() != 0;
+ }
+
+ private NotificationContentView getShowingLayout() {
+ return mShowingPublic ? mPublicLayout : mPrivateLayout;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java b/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java
index 4233ab8c300d..bfa74faf80de 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.os.Process;
import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -58,17 +59,18 @@ public class InterceptedNotifications {
updateSyntheticNotification();
}
- public boolean tryIntercept(StatusBarNotification notification, Ranking ranking) {
- if (ranking == null) return false;
+ public boolean tryIntercept(StatusBarNotification notification, RankingMap rankingMap) {
+ if (rankingMap == null) return false;
if (shouldDisplayIntercepted()) return false;
if (mReleased.contains(notification.getKey())) return false;
- if (!ranking.isInterceptedByDoNotDisturb(notification.getKey())) return false;
+ Ranking ranking = rankingMap.getRanking(notification.getKey());
+ if (!ranking.isInterceptedByDoNotDisturb()) return false;
mIntercepted.put(notification.getKey(), notification);
updateSyntheticNotification();
return true;
}
- public void retryIntercepts(Ranking ranking) {
+ public void retryIntercepts(RankingMap ranking) {
if (ranking == null) return;
final int N = mIntercepted.size();
@@ -111,7 +113,7 @@ public class InterceptedNotifications {
return;
}
final Notification n = new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_qs_zen_on)
+ .setSmallIcon(R.drawable.ic_notify_zen)
.setContentTitle(mContext.getResources().getQuantityString(
R.plurals.zen_mode_notification_title,
mIntercepted.size(), mIntercepted.size()))
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index f9baecbf6e69..5cde9792aa00 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -106,7 +106,7 @@ public class NotificationContentView extends FrameLayout {
private void selectLayout() {
if (mActualHeight <= mSmallHeight || mExpandedChild == null) {
- if (mContractedChild.getVisibility() != View.VISIBLE) {
+ if (mContractedChild != null && mContractedChild.getVisibility() != View.VISIBLE) {
mContractedChild.setVisibility(View.VISIBLE);
}
if (mExpandedChild != null && mExpandedChild.getVisibility() != View.INVISIBLE) {
@@ -116,7 +116,7 @@ public class NotificationContentView extends FrameLayout {
if (mExpandedChild.getVisibility() != View.VISIBLE) {
mExpandedChild.setVisibility(View.VISIBLE);
}
- if (mContractedChild.getVisibility() != View.INVISIBLE) {
+ if (mContractedChild != null && mContractedChild.getVisibility() != View.INVISIBLE) {
mContractedChild.setVisibility(View.INVISIBLE);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
index d829ac0af5d7..c313c58c6377 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar;
import android.app.Notification;
import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.view.View;
@@ -40,6 +41,9 @@ public class NotificationData {
public View expandedPublic; // for insecure lockscreens
public View expandedBig;
private boolean interruption;
+ public boolean autoRedacted; // whether the redacted notification was generated by us
+ public boolean legacy; // whether the notification has a legacy, dark background
+
public Entry() {}
public Entry(StatusBarNotification n, StatusBarIconView ic) {
this.key = n.getKey();
@@ -67,12 +71,16 @@ public class NotificationData {
}
private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
- private Ranking mRanking;
+ private RankingMap mRanking;
private final Comparator<Entry> mRankingComparator = new Comparator<Entry>() {
@Override
public int compare(Entry a, Entry b) {
if (mRanking != null) {
- return mRanking.getRank(a.key) - mRanking.getRank(b.key);
+ Ranking aRanking = mRanking.getRanking(a.key);
+ Ranking bRanking = mRanking.getRanking(b.key);
+ int aRank = aRanking != null ? aRanking.getRank() : -1;
+ int bRank = bRanking != null ? bRanking.getRank() : -1;
+ return aRank - bRank;
}
final StatusBarNotification na = a.notification;
@@ -105,12 +113,12 @@ public class NotificationData {
return null;
}
- public void add(Entry entry, Ranking ranking) {
+ public void add(Entry entry, RankingMap ranking) {
mEntries.add(entry);
updateRankingAndSort(ranking);
}
- public Entry remove(String key, Ranking ranking) {
+ public Entry remove(String key, RankingMap ranking) {
Entry e = findByKey(key);
if (e == null) {
return null;
@@ -120,7 +128,7 @@ public class NotificationData {
return e;
}
- public void updateRanking(Ranking ranking) {
+ public void updateRanking(RankingMap ranking) {
updateRankingAndSort(ranking);
}
@@ -134,12 +142,13 @@ public class NotificationData {
}
}
} else {
- return mRanking.isAmbient(key);
+ Ranking ranking = mRanking.getRanking(key);
+ return ranking != null && ranking.isAmbient();
}
return false;
}
- private void updateRankingAndSort(Ranking ranking) {
+ private void updateRankingAndSort(RankingMap ranking) {
if (ranking != null) {
mRanking = ranking;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
index 6819d9b418d6..ce5ab5af7f0e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
@@ -65,7 +65,7 @@ public class NotificationOverflowIconsView extends IconMerger {
}
private void applyColor(Notification notification, StatusBarIconView view) {
- if (notification.color != Notification.COLOR_DEFAULT) {
+ if (notification.color == Notification.COLOR_DEFAULT) {
if (mNotificationColorUtil.isGrayscale(view.getDrawable())) {
view.setColorFilter(mTintColor, PorterDuff.Mode.MULTIPLY);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotView.java
deleted file mode 100644
index 150307279732..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotView.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Outline;
-import android.graphics.Paint;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * An single dot of the {@link com.android.systemui.statusbar.SpeedBumpDotsLayout}
- */
-public class SpeedBumpDotView extends View {
-
- private final Paint mPaint = new Paint();
-
- public SpeedBumpDotView(Context context, AttributeSet attrs) {
- super(context, attrs);
- mPaint.setAntiAlias(true);
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- float radius = getWidth() / 2.0f;
- canvas.drawCircle(radius, radius, radius, mPaint);
- }
-
- @Override
- public boolean hasOverlappingRendering() {
- return false;
- }
-
- public void setColor(int color) {
- mPaint.setColor(color);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsAlgorithm.java
deleted file mode 100644
index cac6327cd970..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsAlgorithm.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar;
-
-import android.content.Context;
-import android.view.View;
-import com.android.systemui.R;
-
-/**
- * The Algorithm of the {@link com.android.systemui.statusbar.SpeedBumpDotsLayout} which can be
- * queried for {@link * com.android.systemui.statusbar.SpeedBumpDotsState}
- */
-public class SpeedBumpDotsAlgorithm {
-
- private final float mDotRadius;
-
- public SpeedBumpDotsAlgorithm(Context context) {
- mDotRadius = context.getResources().getDimensionPixelSize(R.dimen.speed_bump_dots_height)
- / 2.0f;
- }
-
- public void getState(SpeedBumpDotsState resultState) {
-
- // First reset the current state and ensure that every View has a ViewState
- resultState.resetViewStates();
-
- SpeedBumpDotsLayout hostView = resultState.getHostView();
- boolean currentlyVisible = hostView.isCurrentlyVisible();
- resultState.setActiveState(currentlyVisible
- ? SpeedBumpDotsState.SHOWN
- : SpeedBumpDotsState.HIDDEN);
- int hostWidth = hostView.getWidth();
- float layoutWidth = hostWidth - 2 * mDotRadius;
- int childCount = hostView.getChildCount();
- float paddingBetween = layoutWidth / (childCount - 1);
- float centerY = hostView.getHeight() / 2.0f;
- for (int i = 0; i < childCount; i++) {
- View child = hostView.getChildAt(i);
- SpeedBumpDotsState.ViewState viewState = resultState.getViewStateForView(child);
- if (currentlyVisible) {
- float xTranslation = i * paddingBetween;
- viewState.xTranslation = xTranslation;
- viewState.yTranslation = calculateYTranslation(hostView, centerY, xTranslation,
- layoutWidth);
- } else {
- viewState.xTranslation = layoutWidth / 2;
- viewState.yTranslation = centerY - mDotRadius;
- }
- viewState.alpha = currentlyVisible ? 1.0f : 0.0f;
- viewState.scale = currentlyVisible ? 1.0f : 0.5f;
- }
- }
-
- private float calculateYTranslation(SpeedBumpDotsLayout hostView, float centerY,
- float xTranslation, float layoutWidth) {
- float t = hostView.getAnimationProgress();
- if (t == 0.0f || t == 1.0f) {
- return centerY - mDotRadius;
- }
- float damping = (0.5f -Math.abs(0.5f - t)) * 1.3f;
- float partialOffset = xTranslation / layoutWidth;
- float indentFactor = (float) (Math.sin((t + partialOffset * 1.5f) * - Math.PI) * damping);
- return (1.0f - indentFactor) * centerY - mDotRadius;
- }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsLayout.java
deleted file mode 100644
index ddf5215c4ca6..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsLayout.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar;
-
-import android.animation.TimeAnimator;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import com.android.systemui.R;
-
-/**
- * A layout with a certain number of dots which are integrated in the
- * {@link com.android.systemui.statusbar.SpeedBumpView}
- */
-public class SpeedBumpDotsLayout extends ViewGroup {
-
- private static final float DOT_CLICK_ANIMATION_LENGTH = 300;
- private final int mDotSize;
- private final SpeedBumpDotsAlgorithm mAlgorithm = new SpeedBumpDotsAlgorithm(getContext());
- private final SpeedBumpDotsState mCurrentState = new SpeedBumpDotsState(this);
- private boolean mIsCurrentlyVisible = true;
- private final ValueAnimator mClickAnimator;
- private float mAnimationProgress;
- private ValueAnimator.AnimatorUpdateListener mClickUpdateListener
- = new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- mAnimationProgress = animation.getAnimatedFraction();
- updateChildren();
- }
- };
-
- public SpeedBumpDotsLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- mDotSize = getResources().getDimensionPixelSize(R.dimen.speed_bump_dots_height);
- createDots(context, attrs);
- mClickAnimator = TimeAnimator.ofFloat(0, DOT_CLICK_ANIMATION_LENGTH);
- mClickAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
- mClickAnimator.addUpdateListener(mClickUpdateListener);
- }
-
- private void createDots(Context context, AttributeSet attrs) {
- SpeedBumpDotView blueDot = new SpeedBumpDotView(context, attrs);
- blueDot.setColor(getResources().getColor(R.color.speed_bump_dot_blue));
- addView(blueDot);
-
- SpeedBumpDotView redDot = new SpeedBumpDotView(context, attrs);
- redDot.setColor(getResources().getColor(R.color.speed_bump_dot_red));
- addView(redDot);
-
- SpeedBumpDotView yellowDot = new SpeedBumpDotView(context, attrs);
- yellowDot.setColor(getResources().getColor(R.color.speed_bump_dot_yellow));
- addView(yellowDot);
-
- SpeedBumpDotView greenDot = new SpeedBumpDotView(context, attrs);
- greenDot.setColor(getResources().getColor(R.color.speed_bump_dot_green));
- addView(greenDot);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- int childWidthSpec = MeasureSpec.makeMeasureSpec(mDotSize,
- MeasureSpec.getMode(widthMeasureSpec));
- int childHeightSpec = MeasureSpec.makeMeasureSpec(mDotSize,
- MeasureSpec.getMode(heightMeasureSpec));
- measureChildren(childWidthSpec, childHeightSpec);
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- View child = getChildAt(i);
- child.layout(0, 0, mDotSize, mDotSize);
- }
- if (changed) {
- updateChildren();
- }
- }
-
- private void updateChildren() {
- mAlgorithm.getState(mCurrentState);
- mCurrentState.apply();
- }
-
- public void performVisibilityAnimation(boolean visible) {
- if (mClickAnimator.isRunning()) {
- mClickAnimator.cancel();
- }
- mIsCurrentlyVisible = visible;
- mAlgorithm.getState(mCurrentState);
- mCurrentState.animateToState();
- }
-
- public void setInvisible() {
- mIsCurrentlyVisible = false;
- mAlgorithm.getState(mCurrentState);
- mCurrentState.apply();
- }
-
- public boolean isCurrentlyVisible() {
- return mIsCurrentlyVisible;
- }
-
- public void performDotClickAnimation() {
- if (mClickAnimator.isRunning()) {
- // don't perform an animation if it's running already
- return;
- }
- mClickAnimator.start();
- }
-
-
- public float getAnimationProgress() {
- return mAnimationProgress;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsState.java b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsState.java
deleted file mode 100644
index 4febab1899af..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpDotsState.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar;
-
-import android.view.View;
-import android.view.ViewPropertyAnimator;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A state of a {@link com.android.systemui.statusbar.SpeedBumpDotsLayout}
- */
-public class SpeedBumpDotsState {
-
- public static final int HIDDEN = 1;
- public static final int SHOWN = 2;
- private static final int VISIBILITY_ANIMATION_DELAY_PER_ELEMENT = 80;
-
- private final SpeedBumpDotsLayout mHostView;
- private final HashMap<View, ViewState> mStateMap = new HashMap<View, ViewState>();
- private final Interpolator mFastOutSlowInInterpolator;
- private int mActiveState = 0;
-
- public SpeedBumpDotsState(SpeedBumpDotsLayout hostLayout) {
- mHostView = hostLayout;
- mFastOutSlowInInterpolator = AnimationUtils
- .loadInterpolator(hostLayout.getContext(),
- android.R.interpolator.fast_out_slow_in);
- }
-
- public SpeedBumpDotsLayout getHostView() {
- return mHostView;
- }
-
- public void resetViewStates() {
- int numChildren = mHostView.getChildCount();
- for (int i = 0; i < numChildren; i++) {
- View child = mHostView.getChildAt(i);
- ViewState viewState = mStateMap.get(child);
- if (viewState == null) {
- viewState = new ViewState();
- mStateMap.put(child, viewState);
- }
- }
- }
-
- public ViewState getViewStateForView(View requestedView) {
- return mStateMap.get(requestedView);
- }
-
- public void apply() {
- int childCount = mHostView.getChildCount();
- for (int i = 0; i < childCount; i++) {
- View child = mHostView.getChildAt(i);
- ViewState viewState = mStateMap.get(child);
-
- child.setTranslationX(viewState.xTranslation);
- child.setTranslationY(viewState.yTranslation);
- child.setScaleX(viewState.scale);
- child.setScaleY(viewState.scale);
- child.setAlpha(viewState.alpha);
- }
- }
-
- public void animateToState() {
- int childCount = mHostView.getChildCount();
- int middleIndex = (childCount - 1) / 2;
- long delayPerElement = VISIBILITY_ANIMATION_DELAY_PER_ELEMENT;
- boolean isAppearing = getActiveState() == SHOWN;
- boolean isDisappearing = getActiveState() == HIDDEN;
- for (int i = 0; i < childCount; i++) {
- int delayIndex;
- if (i <= middleIndex) {
- delayIndex = i * 2;
- } else {
- int distToMiddle = i - middleIndex;
- delayIndex = (childCount - 1) - (distToMiddle - 1) * 2;
- }
- long startDelay = 0;
- if (isAppearing || isDisappearing) {
- if (isDisappearing) {
- delayIndex = childCount - 1 - delayIndex;
- }
- startDelay = delayIndex * delayPerElement;
- }
- View child = mHostView.getChildAt(i);
- ViewState viewState = mStateMap.get(child);
- child.animate().setInterpolator(mFastOutSlowInInterpolator)
- .setStartDelay(startDelay)
- .alpha(viewState.alpha)
- .translationX(viewState.xTranslation)
- .translationY(viewState.yTranslation)
- .scaleX(viewState.scale).scaleY(viewState.scale);
- }
- }
-
- public int getActiveState() {
- return mActiveState;
- }
-
- public void setActiveState(int mActiveState) {
- this.mActiveState = mActiveState;
- }
-
- public static class ViewState {
- float xTranslation;
- float yTranslation;
- float alpha;
- float scale;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpView.java
index 689d0e9c6cfc..f80f0fdf1c7e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SpeedBumpView.java
@@ -16,71 +16,26 @@
package com.android.systemui.statusbar;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
import android.content.Context;
-import android.graphics.Outline;
import android.util.AttributeSet;
-import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
-import android.widget.TextView;
import com.android.systemui.R;
/**
* The view representing the separation between important and less important notifications
*/
-public class SpeedBumpView extends ExpandableView implements View.OnClickListener {
+public class SpeedBumpView extends ExpandableView {
- private final int mCollapsedHeight;
- private final int mDotsHeight;
- private final int mTextPaddingInset;
- private SpeedBumpDotsLayout mDots;
- private AlphaOptimizedView mLineLeft;
- private AlphaOptimizedView mLineRight;
- private boolean mIsExpanded;
- private boolean mDividerVisible = true;
- private ValueAnimator mCurrentAnimator;
+ private final int mSpeedBumpHeight;
+ private AlphaOptimizedView mLine;
+ private boolean mIsVisible = true;
private final Interpolator mFastOutSlowInInterpolator;
- private float mCenterX;
- private TextView mExplanationText;
- private boolean mExplanationTextVisible = false;
- private AnimatorListenerAdapter mHideExplanationListener = new AnimatorListenerAdapter() {
- private boolean mCancelled;
-
- @Override
- public void onAnimationEnd(Animator animation) {
- if (!mCancelled) {
- mExplanationText.setVisibility(View.INVISIBLE);
- }
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- mCancelled = true;
- }
-
- @Override
- public void onAnimationStart(Animator animation) {
- mCancelled = false;
- }
- };
- private Animator.AnimatorListener mAnimationFinishedListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mCurrentAnimator = null;
- }
- };
public SpeedBumpView(Context context, AttributeSet attrs) {
super(context, attrs);
- mCollapsedHeight = getResources()
- .getDimensionPixelSize(R.dimen.speed_bump_height_collapsed);
- mTextPaddingInset = getResources().getDimensionPixelSize(
- R.dimen.speed_bump_text_padding_inset);
- mDotsHeight = getResources().getDimensionPixelSize(R.dimen.speed_bump_dots_height);
- setOnClickListener(this);
+ mSpeedBumpHeight = getResources()
+ .getDimensionPixelSize(R.dimen.speed_bump_height);
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(getContext(),
android.R.interpolator.fast_out_slow_in);
}
@@ -88,111 +43,41 @@ public class SpeedBumpView extends ExpandableView implements View.OnClickListene
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mDots = (SpeedBumpDotsLayout) findViewById(R.id.speed_bump_dots_layout);
- mLineLeft = (AlphaOptimizedView) findViewById(R.id.speedbump_line_left);
- mLineRight = (AlphaOptimizedView) findViewById(R.id.speedbump_line_right);
- mExplanationText = (TextView) findViewById(R.id.speed_bump_text);
- resetExplanationText();
-
+ mLine = (AlphaOptimizedView) findViewById(R.id.speedbump_line);
}
@Override
protected int getInitialHeight() {
- return mCollapsedHeight;
+ return mSpeedBumpHeight;
}
@Override
public int getIntrinsicHeight() {
- if (mCurrentAnimator != null) {
- // expand animation is running
- return getActualHeight();
- }
- return mIsExpanded ? getHeight() : mCollapsedHeight;
+ return mSpeedBumpHeight;
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- Outline outline = new Outline();
- mCenterX = getWidth() / 2;
- float centerY = getHeight() / 2;
- // TODO: hide outline better
- // Temporary workaround to hide outline on a transparent view
- int outlineLeft = (int) (mCenterX - getResources().getDisplayMetrics().densityDpi * 8);
- int outlineTop = (int) (centerY - mDotsHeight / 2);
- outline.setOval(outlineLeft, outlineTop, outlineLeft + mDotsHeight,
- outlineTop + mDotsHeight);
- setOutline(outline);
- mLineLeft.setPivotX(mLineLeft.getWidth());
- mLineLeft.setPivotY(mLineLeft.getHeight() / 2);
- mLineRight.setPivotX(0);
- mLineRight.setPivotY(mLineRight.getHeight() / 2);
+ mLine.setPivotX(mLine.getWidth() / 2);
+ mLine.setPivotY(mLine.getHeight() / 2);
+ setOutline(null);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureChildren(widthMeasureSpec, heightMeasureSpec);
- int height = mCollapsedHeight + mExplanationText.getMeasuredHeight() - mTextPaddingInset;
+ int height = mSpeedBumpHeight;
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), height);
}
@Override
- public void onClick(View v) {
- if (mCurrentAnimator != null) {
- return;
- }
- int startValue = mIsExpanded ? getMaxHeight() : mCollapsedHeight;
- int endValue = mIsExpanded ? mCollapsedHeight : getMaxHeight();
- mCurrentAnimator = ValueAnimator.ofInt(startValue, endValue);
- mCurrentAnimator.setInterpolator(mFastOutSlowInInterpolator);
- mCurrentAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- setActualHeight((int) animation.getAnimatedValue());
- }
- });
- mCurrentAnimator.addListener(mAnimationFinishedListener);
- mCurrentAnimator.start();
- mIsExpanded = !mIsExpanded;
- mDots.performDotClickAnimation();
- animateExplanationTextInternal(mIsExpanded);
- }
-
- private void animateExplanationTextInternal(boolean visible) {
- if (mExplanationTextVisible != visible) {
- float translationY = 0.0f;
- float scale = 0.5f;
- float alpha = 0.0f;
- boolean needsHideListener = true;
- if (visible) {
- mExplanationText.setVisibility(VISIBLE);
- translationY = mDots.getBottom() - mTextPaddingInset;
- scale = 1.0f;
- alpha = 1.0f;
- needsHideListener = false;
- }
- mExplanationText.animate().setInterpolator(mFastOutSlowInInterpolator)
- .alpha(alpha)
- .scaleX(scale)
- .scaleY(scale)
- .translationY(translationY)
- .setListener(needsHideListener ? mHideExplanationListener : null);
- mExplanationTextVisible = visible;
- }
- }
-
- @Override
public boolean isTransparent() {
return true;
}
public void performVisibilityAnimation(boolean nowVisible) {
animateDivider(nowVisible, null /* onFinishedRunnable */);
-
- // Animate explanation Text
- if (mIsExpanded) {
- animateExplanationTextInternal(nowVisible);
- }
}
/**
@@ -203,28 +88,16 @@ public class SpeedBumpView extends ExpandableView implements View.OnClickListene
* finished.
*/
public void animateDivider(boolean nowVisible, Runnable onFinishedRunnable) {
- if (nowVisible != mDividerVisible) {
+ if (nowVisible != mIsVisible) {
// Animate dividers
float endValue = nowVisible ? 1.0f : 0.0f;
- float endTranslationXLeft = nowVisible ? 0.0f : mCenterX - mLineLeft.getRight();
- float endTranslationXRight = nowVisible ? 0.0f : mCenterX - mLineRight.getLeft();
- mLineLeft.animate()
+ mLine.animate()
.alpha(endValue)
.scaleX(endValue)
.scaleY(endValue)
- .translationX(endTranslationXLeft)
.setInterpolator(mFastOutSlowInInterpolator)
.withEndAction(onFinishedRunnable);
- mLineRight.animate()
- .alpha(endValue)
- .scaleX(endValue)
- .scaleY(endValue)
- .translationX(endTranslationXRight)
- .setInterpolator(mFastOutSlowInInterpolator);
-
- // Animate dots
- mDots.performVisibilityAnimation(nowVisible);
- mDividerVisible = nowVisible;
+ mIsVisible = nowVisible;
} else {
if (onFinishedRunnable != null) {
onFinishedRunnable.run();
@@ -233,34 +106,10 @@ public class SpeedBumpView extends ExpandableView implements View.OnClickListene
}
public void setInvisible() {
- float endTranslationXLeft = mCenterX - mLineLeft.getRight();
- float endTranslationXRight = mCenterX - mLineRight.getLeft();
- mLineLeft.setAlpha(0.0f);
- mLineLeft.setScaleX(0.0f);
- mLineLeft.setScaleY(0.0f);
- mLineLeft.setTranslationX(endTranslationXLeft);
- mLineRight.setAlpha(0.0f);
- mLineRight.setScaleX(0.0f);
- mLineRight.setScaleY(0.0f);
- mLineRight.setTranslationX(endTranslationXRight);
- mDots.setInvisible();
- resetExplanationText();
-
- mDividerVisible = false;
- }
-
- public void collapse() {
- if (mIsExpanded) {
- setActualHeight(mCollapsedHeight);
- mIsExpanded = false;
- }
- resetExplanationText();
- }
-
- public void animateExplanationText(boolean nowVisible) {
- if (mIsExpanded) {
- animateExplanationTextInternal(nowVisible);
- }
+ mLine.setAlpha(0.0f);
+ mLine.setScaleX(0.0f);
+ mLine.setScaleY(0.0f);
+ mIsVisible = false;
}
@Override
@@ -272,17 +121,4 @@ public class SpeedBumpView extends ExpandableView implements View.OnClickListene
public void performAddAnimation(long delay) {
performVisibilityAnimation(true);
}
-
- private void resetExplanationText() {
- mExplanationText.setTranslationY(0);
- mExplanationText.setVisibility(INVISIBLE);
- mExplanationText.setAlpha(0.0f);
- mExplanationText.setScaleX(0.5f);
- mExplanationText.setScaleY(0.5f);
- mExplanationTextVisible = false;
- }
-
- public boolean isExpanded() {
- return mIsExpanded;
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPageSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPageSwipeHelper.java
index 086a266c443a..e312d5850fb1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPageSwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPageSwipeHelper.java
@@ -423,6 +423,7 @@ public class KeyguardPageSwipeHelper {
return;
}
if (!animate) {
+ view.animate().cancel();
view.setAlpha(alpha);
view.setScaleX(scale);
view.setScaleY(scale);
@@ -465,6 +466,13 @@ public class KeyguardPageSwipeHelper {
}
public void reset() {
+ if (mSwipeAnimator != null) {
+ mSwipeAnimator.cancel();
+ }
+ ArrayList<View> targetViews = mCallback.getTranslationViews();
+ for (View view : targetViews) {
+ view.animate().cancel();
+ }
setTranslation(0.0f, true);
mSwipingInProgress = false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 772d0e7e9a3b..1f3098d94d41 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -27,6 +27,7 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
+import android.view.ViewTreeObserver;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
@@ -67,6 +68,11 @@ public abstract class PanelView extends FrameLayout {
private VelocityTrackerInterface mVelocityTracker;
private FlingAnimationUtils mFlingAnimationUtils;
+ /**
+ * Whether an instant expand request is currently pending and we are just waiting for layout.
+ */
+ private boolean mInstantExpanding;
+
PanelBar mBar;
protected int mMaxPanelHeight = -1;
@@ -128,6 +134,9 @@ public abstract class PanelView extends FrameLayout {
@Override
public boolean onTouchEvent(MotionEvent event) {
+ if (mInstantExpanding) {
+ return false;
+ }
/*
* We capture touch events here and update the expand height here in case according to
@@ -263,6 +272,9 @@ public abstract class PanelView extends FrameLayout {
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
+ if (mInstantExpanding) {
+ return false;
+ }
/*
* If the user drags anywhere inside the panel we intercept it if he moves his finger
@@ -556,6 +568,41 @@ public abstract class PanelView extends FrameLayout {
}
}
+ public void instantExpand() {
+ mInstantExpanding = true;
+ abortAnimations();
+ if (mTracking) {
+ onTrackingStopped(true /* expands */); // The panel is expanded after this call.
+ onExpandingFinished();
+ }
+ setVisibility(VISIBLE);
+
+ // Wait for window manager to pickup the change, so we know the maximum height of the panel
+ // then.
+ getViewTreeObserver().addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ if (mStatusBar.getStatusBarWindow().getHeight()
+ != mStatusBar.getStatusBarHeight()) {
+ getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ setExpandedFraction(1f);
+ mInstantExpanding = false;
+ }
+ }
+ });
+
+ // Make sure a layout really happens.
+ requestLayout();
+ }
+
+ private void abortAnimations() {
+ cancelPeek();
+ if (mHeightAnimator != null) {
+ mHeightAnimator.cancel();
+ }
+ }
+
protected void startUnlockHintAnimation() {
// We don't need to hint the user if an animation is already running or the user is changing
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 1dfb8fa4befb..d413f63297b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -64,7 +64,7 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
-import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.util.ArraySet;
import android.util.DisplayMetrics;
@@ -77,15 +77,19 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
+import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewPropertyAnimator;
+import android.view.ViewStub;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.PathInterpolator;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -99,6 +103,7 @@ import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.qs.CircularClipper;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
+import com.android.systemui.statusbar.ActivatableNotificationView;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.DragDownHelper;
@@ -274,10 +279,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// the date view
DateView mDateView;
- // for heads up notifications
- private HeadsUpNotificationView mHeadsUpNotificationView;
- private int mHeadsUpNotificationDecay;
-
// on-screen navigation buttons
private NavigationBarView mNavigationBarView = null;
private int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
@@ -286,6 +287,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
int mTrackingPosition; // the position of the top of the tracking view.
// ticker
+ private boolean mTickerEnabled;
private Ticker mTicker;
private View mTickerView;
private boolean mTicking;
@@ -362,7 +364,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (!mUseHeadsUp) {
Log.d(TAG, "dismissing any existing heads up notification on disable event");
setHeadsUpVisibility(false);
- mHeadsUpNotificationView.setNotification(null);
+ mHeadsUpNotificationView.release();
removeHeadsUpView();
} else {
addHeadsUpView();
@@ -399,6 +401,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private boolean mSettingsClosing;
private boolean mVisible;
+ private Interpolator mAlphaOut = new PathInterpolator(0f, 0.4f, 1f, 1f);
+ private Interpolator mAlphaIn = new PathInterpolator(0f, 0f, 0.8f, 1f);
+
private final OnChildLocationsChangedListener mOnChildLocationsChangedListener =
new OnChildLocationsChangedListener() {
@Override
@@ -407,6 +412,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
};
+ private int mDisabledUnmodified;
+
public void setOnFlipRunnable(Runnable onFlipRunnable) {
mOnFlipRunnable = onFlipRunnable;
}
@@ -636,7 +643,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mMoreIcon = mStatusBarView.findViewById(R.id.moreIcon);
mNotificationIcons.setOverflowIndicator(mMoreIcon);
mStatusBarContents = (LinearLayout)mStatusBarView.findViewById(R.id.status_bar_contents);
- mTickerView = mStatusBarView.findViewById(R.id.ticker);
mStackScroller = (NotificationStackScrollLayout) mStatusBarWindow.findViewById(
R.id.notification_stack_scroller);
@@ -676,14 +682,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mDateTimeView.setEnabled(true);
}
- mNotificationPanel.setSystemUiVisibility(
- View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS |
- View.STATUS_BAR_DISABLE_CLOCK);
+ mTickerEnabled = res.getBoolean(R.bool.enable_ticker);
+ if (mTickerEnabled) {
+ final ViewStub tickerStub = (ViewStub) mStatusBarView.findViewById(R.id.ticker_stub);
+ if (tickerStub != null) {
+ mTickerView = tickerStub.inflate();
+ mTicker = new MyTicker(context, mStatusBarView);
- mTicker = new MyTicker(context, mStatusBarView);
-
- TickerView tickerView = (TickerView)mStatusBarView.findViewById(R.id.tickerText);
- tickerView.mTicker = mTicker;
+ TickerView tickerView = (TickerView) mStatusBarView.findViewById(R.id.tickerText);
+ tickerView.mTicker = mTicker;
+ }
+ }
mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
@@ -757,7 +766,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
@Override
public ValueAnimator createRevealAnimator(View v, int centerX, int centerY,
float startRadius, float endRadius) {
- return v.createRevealAnimator(centerX, centerY, startRadius, endRadius);
+ return ViewAnimationUtils.createCircularReveal(v, centerX, centerY,
+ startRadius, endRadius);
}
});
final QSTileHost qsh = new QSTileHost(mContext, this,
@@ -818,6 +828,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
return mStatusBarView;
}
+ public StatusBarWindowView getStatusBarWindow() {
+ return mStatusBarWindow;
+ }
+
@Override
protected WindowManager.LayoutParams getSearchLayoutParams(LayoutParams layoutParams) {
boolean opaque = false;
@@ -1050,7 +1064,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
@Override
- public void addNotificationInternal(StatusBarNotification notification, Ranking ranking) {
+ public void addNotificationInternal(StatusBarNotification notification, RankingMap ranking) {
if (DEBUG) Log.d(TAG, "addNotification key=" + notification.getKey());
if (mZenMode != Global.ZEN_MODE_OFF && mIntercepted.tryIntercept(notification, ranking)) {
// Forward the ranking so we can sort the new notification.
@@ -1061,31 +1075,28 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
displayNotification(notification, ranking);
}
- public void displayNotification(StatusBarNotification notification,
- Ranking ranking) {
- Entry shadeEntry = createNotificationViews(notification);
- if (shadeEntry == null) {
- return;
- }
+ public void displayNotification(StatusBarNotification notification, RankingMap ranking) {
if (mUseHeadsUp && shouldInterrupt(notification)) {
if (DEBUG) Log.d(TAG, "launching notification in heads up mode");
Entry interruptionCandidate = new Entry(notification, null);
ViewGroup holder = mHeadsUpNotificationView.getHolder();
if (inflateViewsForHeadsUp(interruptionCandidate, holder)) {
mInterruptingNotificationTime = System.currentTimeMillis();
- mInterruptingNotificationEntry = interruptionCandidate;
- shadeEntry.setInterruption();
// 1. Populate mHeadsUpNotificationView
- mHeadsUpNotificationView.setNotification(mInterruptingNotificationEntry);
-
- // 2. Animate mHeadsUpNotificationView in
- mHandler.sendEmptyMessage(MSG_SHOW_HEADS_UP);
+ mHeadsUpNotificationView.showNotification(interruptionCandidate);
- // 3. Set alarm to age the notification off
- resetHeadsUpDecayTimer();
+ // do not show the notification in the shade, yet.
+ return;
}
- } else if (notification.getNotification().fullScreenIntent != null) {
+ }
+
+ Entry shadeEntry = createNotificationViews(notification);
+ if (shadeEntry == null) {
+ return;
+ }
+
+ if (notification.getNotification().fullScreenIntent != null) {
// Stop screensaver if the notification has a full-screen intent.
// (like an incoming phone call)
awakenDreams();
@@ -1100,7 +1111,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// usual case: status bar visible & not immersive
// show the ticker if there isn't already a heads up
- if (mInterruptingNotificationEntry == null) {
+ if (mHeadsUpNotificationView.getEntry() == null) {
tick(notification, true);
}
}
@@ -1110,46 +1121,76 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
}
+ public void displayNotificationFromHeadsUp(StatusBarNotification notification) {
+ NotificationData.Entry shadeEntry = createNotificationViews(notification);
+ if (shadeEntry == null) {
+ return;
+ }
+ shadeEntry.setInterruption();
+
+ addNotificationViews(shadeEntry, null);
+ // Recalculate the position of the sliding windows and the titles.
+ setAreThereNotifications();
+ updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
+ }
+
@Override
public void resetHeadsUpDecayTimer() {
- mHandler.removeMessages(MSG_HIDE_HEADS_UP);
+ mHandler.removeMessages(MSG_DECAY_HEADS_UP);
if (mUseHeadsUp && mHeadsUpNotificationDecay > 0
&& mHeadsUpNotificationView.isClearable()) {
- mHandler.sendEmptyMessageDelayed(MSG_HIDE_HEADS_UP, mHeadsUpNotificationDecay);
+ mHandler.sendEmptyMessageDelayed(MSG_DECAY_HEADS_UP, mHeadsUpNotificationDecay);
}
}
@Override
- public void updateNotificationInternal(StatusBarNotification notification, Ranking ranking) {
+ public void scheduleHeadsUpOpen() {
+ mHandler.sendEmptyMessage(MSG_SHOW_HEADS_UP);
+ }
+
+ @Override
+ public void scheduleHeadsUpClose() {
+ mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+ }
+
+ @Override
+ public void scheduleHeadsUpEscalation() {
+ mHandler.sendEmptyMessage(MSG_ESCALATE_HEADS_UP);
+ }
+
+ @Override
+ public void updateNotificationInternal(StatusBarNotification notification, RankingMap ranking) {
super.updateNotificationInternal(notification, ranking);
// if we're here, then the notification is already in the shade
mIntercepted.remove(notification.getKey());
}
@Override
- protected void updateRankingInternal(Ranking ranking) {
+ protected void updateRankingInternal(RankingMap ranking) {
mNotificationData.updateRanking(ranking);
mIntercepted.retryIntercepts(ranking);
updateNotifications();
}
@Override
- public void removeNotificationInternal(String key, Ranking ranking) {
+ public void removeNotificationInternal(String key, RankingMap ranking) {
+ if (ENABLE_HEADS_UP && mHeadsUpNotificationView.getEntry() != null
+ && key.equals(mHeadsUpNotificationView.getEntry().notification.getKey())) {
+ mHeadsUpNotificationView.clear();
+ }
+
StatusBarNotification old = removeNotificationViews(key, ranking);
if (SPEW) Log.d(TAG, "removeNotification key=" + key + " old=" + old);
if (old != null) {
// Cancel the ticker if it's still running
- mTicker.removeEntry(old);
+ if (mTickerEnabled) {
+ mTicker.removeEntry(old);
+ }
// Recalculate the position of the sliding windows and the titles.
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
- if (ENABLE_HEADS_UP && mInterruptingNotificationEntry != null
- && old == mInterruptingNotificationEntry.notification) {
- mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
- }
-
if (CLOSE_PANEL_WHEN_EMPTIED && mNotificationData.size() == 0
&& !mNotificationPanel.isTracking() && mState != StatusBarState.KEYGUARD) {
animateCollapsePanels();
@@ -1185,15 +1226,26 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
Entry ent = mNotificationData.get(i);
if (!(provisioned || showNotificationEvenIfUnprovisioned(ent.notification))) continue;
- // TODO How do we want to badge notifcations from profiles.
if (!notificationIsForCurrentProfiles(ent.notification)) continue;
final int vis = ent.notification.getNotification().visibility;
if (vis != Notification.VISIBILITY_SECRET) {
// when isLockscreenPublicMode() we show the public form of VISIBILITY_PRIVATE notifications
- ent.row.setShowingPublic(isLockscreenPublicMode()
+ boolean showingPublic = isLockscreenPublicMode()
&& vis == Notification.VISIBILITY_PRIVATE
- && !userAllowsPrivateNotificationsInPublic(ent.notification.getUserId()));
+ && !userAllowsPrivateNotificationsInPublic(ent.notification.getUserId());
+ ent.row.setShowingPublic(showingPublic);
+ if (ent.autoRedacted && ent.legacy) {
+ if (showingPublic) {
+ ent.row.setBackgroundResourceIds(
+ com.android.internal.R.drawable.notification_material_bg,
+ com.android.internal.R.drawable.notification_material_bg_dim);
+ } else {
+ ent.row.setBackgroundResourceIds(
+ com.android.internal.R.drawable.notification_bg,
+ com.android.internal.R.drawable.notification_bg_dim);
+ }
+ }
toShow.add(ent.row);
}
}
@@ -1414,10 +1466,20 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
}
+ private int adjustDisableFlags(int state) {
+ if (mExpandedVisible) {
+ state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
+ state |= StatusBarManager.DISABLE_SYSTEM_INFO;
+ }
+ return state;
+ }
+
/**
* State is one or more of the DISABLE constants from StatusBarManager.
*/
public void disable(int state) {
+ mDisabledUnmodified = state;
+ state = adjustDisableFlags(state);
final int old = mDisabled;
final int diff = state ^ old;
mDisabled = state;
@@ -1455,20 +1517,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if ((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
mSystemIconArea.animate()
.alpha(0f)
- .translationY(mNaturalBarHeight*0.5f)
- .setDuration(175)
- .setInterpolator(new DecelerateInterpolator(1.5f))
- .setListener(mMakeIconsInvisible)
- .start();
+ .withLayer()
+ .setDuration(160)
+ .setInterpolator(mAlphaIn)
+ .setListener(mMakeIconsInvisible);
} else {
mSystemIconArea.setVisibility(View.VISIBLE);
mSystemIconArea.animate()
.alpha(1f)
- .translationY(0)
- .setStartDelay(0)
- .setInterpolator(new DecelerateInterpolator(1.5f))
- .setDuration(175)
- .start();
+ .withLayer()
+ .setInterpolator(mAlphaOut)
+ .setDuration(320);
}
}
@@ -1504,20 +1563,18 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mNotificationIcons.animate()
.alpha(0f)
- .translationY(mNaturalBarHeight*0.5f)
- .setDuration(175)
- .setInterpolator(new DecelerateInterpolator(1.5f))
+ .withLayer()
+ .setDuration(160)
+ .setInterpolator(mAlphaIn)
.setListener(mMakeIconsInvisible)
.start();
} else {
mNotificationIcons.setVisibility(View.VISIBLE);
mNotificationIcons.animate()
.alpha(1f)
- .translationY(0)
- .setStartDelay(0)
- .setInterpolator(new DecelerateInterpolator(1.5f))
- .setDuration(175)
- .start();
+ .withLayer()
+ .setInterpolator(mAlphaOut)
+ .setDuration(320);
}
}
}
@@ -1555,7 +1612,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
case MSG_SHOW_HEADS_UP:
setHeadsUpVisibility(true);
break;
+ case MSG_DECAY_HEADS_UP:
+ mHeadsUpNotificationView.release();
+ setHeadsUpVisibility(false);
+ break;
case MSG_HIDE_HEADS_UP:
+ mHeadsUpNotificationView.release();
setHeadsUpVisibility(false);
break;
case MSG_ESCALATE_HEADS_UP:
@@ -1568,8 +1630,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
/** if the interrupting notification had a fullscreen intent, fire it now. */
private void escalateHeadsUp() {
- if (mInterruptingNotificationEntry != null) {
- final StatusBarNotification sbn = mInterruptingNotificationEntry.notification;
+ if (mHeadsUpNotificationView.getEntry() != null) {
+ final StatusBarNotification sbn = mHeadsUpNotificationView.getEntry().notification;
+ mHeadsUpNotificationView.release();
final Notification notification = sbn.getNotification();
if (notification.fullScreenIntent != null) {
if (DEBUG)
@@ -1617,7 +1680,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mStatusBarWindowManager.setStatusBarExpanded(true);
visibilityChanged(true);
-
+ disable(mDisabledUnmodified);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@@ -1768,10 +1831,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mStatusBarView.collapseAllPanels(true);
}
- void makeExpandedInvisibleSoon() {
- mHandler.postDelayed(new Runnable() { public void run() { makeExpandedInvisible(); }}, 50);
- }
-
void makeExpandedInvisible() {
if (SPEW) Log.d(TAG, "makeExpandedInvisible: mExpandedVisible=" + mExpandedVisible
+ " mExpandedVisible=" + mExpandedVisible);
@@ -1815,7 +1874,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
-
+ disable(mDisabledUnmodified);
showBouncer();
}
@@ -2113,6 +2172,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
@Override
protected void tick(StatusBarNotification n, boolean firstTime) {
+ if (!mTickerEnabled) return;
+
// no ticking in lights-out mode
if (!areLightsOn()) return;
@@ -2129,7 +2190,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (n.getNotification().tickerText != null && mStatusBarWindow != null
&& mStatusBarWindow.getWindowToken() != null) {
if (0 == (mDisabled & (StatusBarManager.DISABLE_NOTIFICATION_ICONS
- | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) {
+ | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) {
mTicker.addEntry(n);
}
}
@@ -2138,10 +2199,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private class MyTicker extends Ticker {
MyTicker(Context context, View sb) {
super(context, sb);
+ if (!mTickerEnabled) {
+ Log.w(TAG, "MyTicker instantiated with mTickerEnabled=false", new Throwable());
+ }
}
@Override
public void tickerStarting() {
+ if (!mTickerEnabled) return;
mTicking = true;
mStatusBarContents.setVisibility(View.GONE);
mTickerView.setVisibility(View.VISIBLE);
@@ -2151,6 +2216,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
@Override
public void tickerDone() {
+ if (!mTickerEnabled) return;
mStatusBarContents.setVisibility(View.VISIBLE);
mTickerView.setVisibility(View.GONE);
mStatusBarContents.startAnimation(loadAnim(com.android.internal.R.anim.push_down_in, null));
@@ -2159,6 +2225,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
public void tickerHalting() {
+ if (!mTickerEnabled) return;
if (mStatusBarContents.getVisibility() != View.VISIBLE) {
mStatusBarContents.setVisibility(View.VISIBLE);
mStatusBarContents
@@ -2197,11 +2264,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
pw.println("Current Status Bar state:");
pw.println(" mExpandedVisible=" + mExpandedVisible
+ ", mTrackingPosition=" + mTrackingPosition);
- pw.println(" mTicking=" + mTicking);
+ pw.println(" mTickerEnabled=" + mTickerEnabled);
+ if (mTickerEnabled) {
+ pw.println(" mTicking=" + mTicking);
+ pw.println(" mTickerView: " + viewInfo(mTickerView));
+ }
pw.println(" mTracking=" + mTracking);
pw.println(" mDisplayMetrics=" + mDisplayMetrics);
pw.println(" mStackScroller: " + viewInfo(mStackScroller));
- pw.println(" mTickerView: " + viewInfo(mTickerView));
pw.println(" mStackScroller: " + viewInfo(mStackScroller)
+ " scroll " + mStackScroller.getScrollX()
+ "," + mStackScroller.getScrollY());
@@ -2217,7 +2287,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
pw.print(" mUseHeadsUp=");
pw.println(mUseHeadsUp);
pw.print(" interrupting package: ");
- pw.println(hunStateToString(mInterruptingNotificationEntry));
+ pw.println(hunStateToString(mHeadsUpNotificationView.getEntry()));
dumpBarTransitions(pw, "mStatusBarView", mStatusBarView.getBarTransitions());
if (mNavigationBarView != null) {
pw.print(" mNavigationBarWindowState=");
@@ -2491,26 +2561,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (!ENABLE_HEADS_UP) return;
if (DEBUG) Log.v(TAG, (vis ? "showing" : "hiding") + " heads up window");
mHeadsUpNotificationView.setVisibility(vis ? View.VISIBLE : View.GONE);
- if (!vis) {
- if (DEBUG) Log.d(TAG, "setting heads up entry to null");
- mInterruptingNotificationEntry = null;
- }
}
public void onHeadsUpDismissed() {
- if (mInterruptingNotificationEntry == null) return;
- mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
- if (mHeadsUpNotificationView.isClearable()) {
- try {
- mBarService.onNotificationClear(
- mInterruptingNotificationEntry.notification.getPackageName(),
- mInterruptingNotificationEntry.notification.getTag(),
- mInterruptingNotificationEntry.notification.getId(),
- mInterruptingNotificationEntry.notification.getUserId());
- } catch (android.os.RemoteException ex) {
- // oh well
- }
- }
+ mHeadsUpNotificationView.dismiss();
}
/**
@@ -2671,7 +2725,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
@Override
protected void haltTicker() {
- mTicker.halt();
+ if (mTickerEnabled) {
+ mTicker.halt();
+ }
}
@Override
@@ -2877,7 +2933,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mNotificationPanel.setKeyguardShowing(false);
mScrimController.setKeyguardShowing(false);
}
-
updateStackScrollerState();
updatePublicMode();
updateNotifications();
@@ -2893,6 +2948,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
? View.INVISIBLE : View.VISIBLE);
mStackScroller.setScrollingEnabled(!onKeyguard);
mStackScroller.setExpandingEnabled(!onKeyguard);
+ ActivatableNotificationView activatedChild = mStackScroller.getActivatedChild();
+ mStackScroller.setActivatedChild(null);
+ if (activatedChild != null) {
+ activatedChild.makeInactive(false /* animate */);
+ }
}
public void userActivity() {
@@ -2926,22 +2986,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private void instantExpandNotificationsPanel() {
- // Make our window larger and the panel visible.
+ // Make our window larger and the panel expanded.
makeExpandedVisible(true);
- mNotificationPanel.setVisibility(View.VISIBLE);
-
- // Wait for window manager to pickup the change, so we know the maximum height of the panel
- // then.
- mNotificationPanel.getViewTreeObserver().addOnGlobalLayoutListener(
- new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- if (mStatusBarWindow.getHeight() != getStatusBarHeight()) {
- mNotificationPanel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- mNotificationPanel.setExpandedFraction(1);
- }
- }
- });
+ mNotificationPanel.instantExpand();
}
private void instantCollapseNotificationPanel() {
@@ -2949,9 +2996,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
@Override
- public void onActivated(View view) {
+ public void onActivated(ActivatableNotificationView view) {
userActivity();
mKeyguardIndicationController.showTransientIndication(R.string.notification_tap_again);
+ ActivatableNotificationView previousView = mStackScroller.getActivatedChild();
+ if (previousView != null) {
+ previousView.makeInactive(true /* animate */);
+ }
mStackScroller.setActivatedChild(view);
}
@@ -2964,7 +3015,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
@Override
- public void onActivationReset(View view) {
+ public void onActivationReset(ActivatableNotificationView view) {
if (view == mStackScroller.getActivatedChild()) {
mKeyguardIndicationController.hideTransientIndication();
mStackScroller.setActivatedChild(null);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index 910d88ca5707..3a17177720d5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -111,8 +111,7 @@ public class PhoneStatusBarView extends PanelBar {
@Override
public void onAllPanelsCollapsed() {
super.onAllPanelsCollapsed();
- // give animations time to settle
- mBar.makeExpandedInvisibleSoon();
+ mBar.makeExpandedInvisible();
mLastFullyOpenedPanel = null;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
index 13d3291e43e5..78377693a3d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
@@ -64,6 +64,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private int mKeyguardWidth = ViewGroup.LayoutParams.MATCH_PARENT;
private int mNormalWidth;
+ private int mPadding;
+ private int mMultiUserExpandedMargin;
private ActivityStarter mActivityStarter;
private BrightnessController mBrightnessController;
@@ -112,6 +114,10 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mKeyguardHeight = getResources().getDimensionPixelSize(
R.dimen.status_bar_header_height_keyguard);
mNormalWidth = getLayoutParams().width;
+ mPadding = getResources().getDimensionPixelSize(R.dimen.notification_side_padding);
+ mMultiUserExpandedMargin =
+ getResources().getDimensionPixelSize(R.dimen.multi_user_switch_expanded_margin);
+
}
public void setActivityStarter(ActivityStarter activityStarter) {
@@ -138,6 +144,9 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
updateBrightnessControllerState();
updateZTranslation();
updateClickTargets();
+ updateWidth();
+ updatePadding();
+ updateMultiUserSwitch();
if (mQSPanel != null) {
mQSPanel.setExpanded(expanded && !overscrolled);
}
@@ -173,7 +182,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
}
private void updateWidth() {
- int width = mKeyguardShowing ? mKeyguardWidth : mNormalWidth;
+ int width = (mKeyguardShowing && !mExpanded) ? mKeyguardWidth : mNormalWidth;
ViewGroup.LayoutParams lp = getLayoutParams();
if (width != lp.width) {
lp.width = width;
@@ -228,6 +237,21 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
}
}
+ private void updatePadding() {
+ boolean padded = !mKeyguardShowing || mExpanded;
+ int padding = padded ? mPadding : 0;
+ setPaddingRelative(padding, 0, padding, 0);
+ }
+
+ private void updateMultiUserSwitch() {
+ int marginEnd = !mKeyguardShowing || mExpanded ? mMultiUserExpandedMargin : 0;
+ MarginLayoutParams lp = (MarginLayoutParams) mMultiUserSwitch.getLayoutParams();
+ if (marginEnd != lp.getMarginEnd()) {
+ lp.setMarginEnd(marginEnd);
+ mMultiUserSwitch.setLayoutParams(lp);
+ }
+ }
+
public void setExpansion(float height) {
height = (height - mCollapsedHeight) * EXPANSION_RUBBERBAND_FACTOR + mCollapsedHeight;
if (height < mCollapsedHeight) {
@@ -273,6 +297,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
updateWidth();
updateVisibilities();
updateZTranslation();
+ updatePadding();
+ updateMultiUserSwitch();
}
public void setUserInfoController(UserInfoController userInfoController) {
@@ -307,4 +333,9 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mBrightnessContainer.animate().alpha(showingDetail ? 0 : 1).withLayer().start();
}
};
+
+ @Override
+ public boolean shouldDelayChildPressedState() {
+ return true;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java
index 8aa3837ea2ad..bf1375134fff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java
@@ -32,7 +32,7 @@ public class TickerView extends TextSwitcher
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
- mTicker.reflowText();
+ if (mTicker != null) mTicker.reflowText();
}
public void setTicker(Ticker t) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
index 117bf61ccf57..379b509d1083 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
@@ -45,6 +45,7 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
+ filter.addAction(BluetoothDevice.ACTION_ALIAS_CHANGED);
context.registerReceiver(this, filter);
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -104,8 +105,8 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto
@Override
public String getLastDeviceName() {
- return mLastDevice != null ? mLastDevice.getName()
- : mBondedDevices.size() == 1 ? mBondedDevices.iterator().next().getName()
+ return mLastDevice != null ? mLastDevice.getAliasName()
+ : mBondedDevices.size() == 1 ? mBondedDevices.iterator().next().getAliasName()
: null;
}
@@ -122,6 +123,9 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto
== BluetoothAdapter.STATE_CONNECTING;
mLastDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
}
+ if (action.equals(BluetoothDevice.ACTION_ALIAS_CHANGED)) {
+ mLastDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ }
fireCallbacks();
updateBondedBluetoothDevices();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
index df01c12c2098..d778ccb4b7cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
@@ -33,9 +33,9 @@ import com.android.systemui.ExpandHelper;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
import com.android.systemui.SwipeHelper;
-import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.NotificationData;
+import com.android.systemui.statusbar.phone.PhoneStatusBar;
public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.Callback, ExpandHelper.Callback,
ViewTreeObserver.OnComputeInternalInsetsListener {
@@ -51,7 +51,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
private SwipeHelper mSwipeHelper;
private EdgeSwipeHelper mEdgeSwipeHelper;
- private BaseStatusBar mBar;
+ private PhoneStatusBar mBar;
private ExpandHelper mExpandHelper;
private long mStartTouchTime;
@@ -69,7 +69,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
if (DEBUG) Log.v(TAG, "create() " + mTouchSensitivityDelay);
}
- public void setBar(BaseStatusBar bar) {
+ public void setBar(PhoneStatusBar bar) {
mBar = bar;
}
@@ -77,7 +77,10 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
return mContentHolder;
}
- public boolean setNotification(NotificationData.Entry headsUp) {
+ public boolean showNotification(NotificationData.Entry headsUp) {
+ // bump any previous heads up back to the shade
+ release();
+
mHeadsUp = headsUp;
if (mContentHolder != null) {
mContentHolder.removeAllViews();
@@ -97,10 +100,46 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
mSwipeHelper.snapChild(mContentHolder, 1f);
mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay;
+
+ // 2. Animate mHeadsUpNotificationView in
+ mBar.scheduleHeadsUpOpen();
+
+ // 3. Set alarm to age the notification off
+ mBar.resetHeadsUpDecayTimer();
}
return true;
}
+ /** Discard the Heads Up notification. */
+ public void clear() {
+ mHeadsUp = null;
+ mBar.scheduleHeadsUpClose();
+ }
+
+ /** Respond to dismissal of the Heads Up window. */
+ public void dismiss() {
+ if (mHeadsUp == null) return;
+ if (mHeadsUp.notification.isClearable()) {
+ mBar.onNotificationClear(mHeadsUp.notification);
+ } else {
+ release();
+ }
+ mHeadsUp = null;
+ mBar.scheduleHeadsUpClose();
+ }
+
+ /** Push any current Heads Up notification down into the shade. */
+ public void release() {
+ if (mHeadsUp != null) {
+ mBar.displayNotificationFromHeadsUp(mHeadsUp.notification);
+ }
+ mHeadsUp = null;
+ }
+
+ public NotificationData.Entry getEntry() {
+ return mHeadsUp;
+ }
+
public boolean isClearable() {
return mHeadsUp == null || mHeadsUp.notification.isClearable();
}
@@ -125,7 +164,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
if (mHeadsUp != null) {
// whoops, we're on already!
- setNotification(mHeadsUp);
+ showNotification(mHeadsUp);
}
getViewTreeObserver().addOnComputeInternalInsetsListener(this);
@@ -282,6 +321,10 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.
mTmpTwoArray[1] + mContentHolder.getHeight());
}
+ public void escalate() {
+ mBar.scheduleHeadsUpEscalation();
+ }
+
private class EdgeSwipeHelper implements Gefingerpoken {
private static final boolean DEBUG_EDGE_SWIPE = false;
private final float mTouchSlop;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index dc8f315b9713..1f6886055d92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -30,7 +30,7 @@ public interface NetworkController {
void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
String mobileSignalContentDescriptionId, int dataTypeIconId,
boolean activityIn, boolean activityOut,
- String dataTypeContentDescriptionId, String description);
+ String dataTypeContentDescriptionId, String description, boolean noSim);
void onAirplaneModeChanged(boolean enabled);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 56402a5d9b8e..254a0e8453bf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -87,6 +87,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
int mQSDataTypeIconId;
int mAirplaneIconId;
boolean mDataActive;
+ boolean mNoSim;
int mLastSignalLevel;
boolean mShowPhoneRSSIForData = false;
boolean mShowAtLeastThreeGees = false;
@@ -349,18 +350,18 @@ public class NetworkControllerImpl extends BroadcastReceiver
if (isEmergencyOnly()) {
cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId,
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
- mContentDescriptionDataType, null);
+ mContentDescriptionDataType, null, mNoSim);
} else {
if (mIsWimaxEnabled && mWimaxConnected) {
// Wimax is special
cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId,
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
- mContentDescriptionDataType, mNetworkName);
+ mContentDescriptionDataType, mNetworkName, mNoSim);
} else {
// Normal mobile data
cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
- mContentDescriptionDataType, mNetworkName);
+ mContentDescriptionDataType, mNetworkName, mNoSim);
}
}
cb.onAirplaneModeChanged(mAirplaneMode);
@@ -736,6 +737,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
// GSM case, we have to check also the sim state
if (mSimState == IccCardConstants.State.READY ||
mSimState == IccCardConstants.State.UNKNOWN) {
+ mNoSim = false;
if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
switch (mDataActivity) {
case TelephonyManager.DATA_ACTIVITY_IN:
@@ -758,6 +760,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
} else {
iconId = R.drawable.stat_sys_no_sim;
+ mNoSim = true;
visible = false; // no SIM? no data
}
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
index b21e12caf288..6d92b058b598 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.stack;
import android.view.View;
+import com.android.systemui.statusbar.ActivatableNotificationView;
import java.util.ArrayList;
@@ -27,7 +28,7 @@ public class AmbientState {
private ArrayList<View> mDraggedViews = new ArrayList<View>();
private int mScrollY;
private boolean mDimmed;
- private View mActivatedChild;
+ private ActivatableNotificationView mActivatedChild;
private float mOverScrollTopAmount;
private float mOverScrollBottomAmount;
private int mSpeedBumpIndex = -1;
@@ -64,7 +65,7 @@ public class AmbientState {
* In dimmed mode, a child can be activated, which happens on the first tap of the double-tap
* interaction. This child is then scaled normally and its background is fully opaque.
*/
- public void setActivatedChild(View activatedChild) {
+ public void setActivatedChild(ActivatableNotificationView activatedChild) {
mActivatedChild = activatedChild;
}
@@ -72,7 +73,7 @@ public class AmbientState {
return mDimmed;
}
- public View getActivatedChild() {
+ public ActivatableNotificationView getActivatedChild() {
return mActivatedChild;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 4d862139b5e3..94472a37af4d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -33,6 +33,7 @@ import android.widget.OverScroller;
import com.android.systemui.ExpandHelper;
import com.android.systemui.R;
import com.android.systemui.SwipeHelper;
+import com.android.systemui.statusbar.ActivatableNotificationView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.SpeedBumpView;
@@ -264,6 +265,13 @@ public class NotificationStackScrollLayout extends ViewGroup
: mPaddingBetweenElementsNormal;
mBottomStackSlowDownHeight = mStackScrollAlgorithm.getBottomStackSlowDownLength();
updateContentHeight();
+ notifyHeightChangeListener(null);
+ }
+
+ private void notifyHeightChangeListener(ExpandableView view) {
+ if (mOnHeightChangedListener != null) {
+ mOnHeightChangedListener.onHeightChanged(view);
+ }
}
@Override
@@ -402,9 +410,7 @@ public class NotificationStackScrollLayout extends ViewGroup
mNeedsAnimation = true;
}
requestChildrenUpdate();
- if (mOnHeightChangedListener != null) {
- mOnHeightChangedListener.onHeightChanged(null);
- }
+ notifyHeightChangeListener(null);
}
}
@@ -1717,7 +1723,6 @@ public class NotificationStackScrollLayout extends ViewGroup
mStackScrollAlgorithm.setIsExpanded(isExpanded);
if (!isExpanded) {
mOwnScrollY = 0;
- mSpeedBumpView.collapse();
}
}
@@ -1725,9 +1730,7 @@ public class NotificationStackScrollLayout extends ViewGroup
public void onHeightChanged(ExpandableView view) {
updateContentHeight();
updateScrollPositionIfNecessary();
- if (mOnHeightChangedListener != null) {
- mOnHeightChangedListener.onHeightChanged(view);
- }
+ notifyHeightChangeListener(view);
requestChildrenUpdate();
}
@@ -1757,7 +1760,7 @@ public class NotificationStackScrollLayout extends ViewGroup
/**
* See {@link AmbientState#setActivatedChild}.
*/
- public void setActivatedChild(View activatedChild) {
+ public void setActivatedChild(ActivatableNotificationView activatedChild) {
mAmbientState.setActivatedChild(activatedChild);
if (mAnimationsEnabled) {
mActivateNeedsAnimation = true;
@@ -1766,7 +1769,7 @@ public class NotificationStackScrollLayout extends ViewGroup
requestChildrenUpdate();
}
- public View getActivatedChild() {
+ public ActivatableNotificationView getActivatedChild() {
return mAmbientState.getActivatedChild();
}
@@ -1788,7 +1791,6 @@ public class NotificationStackScrollLayout extends ViewGroup
int newVisibility = visible ? VISIBLE : GONE;
mSpeedBumpView.setVisibility(newVisibility);
if (visible) {
- mSpeedBumpView.collapse();
// Make invisible to ensure that the appear animation is played.
mSpeedBumpView.setInvisible();
if (!mIsExpansionChanging) {
@@ -1832,6 +1834,11 @@ public class NotificationStackScrollLayout extends ViewGroup
return super.dispatchTouchEvent(ev);
}
+ @Override
+ public boolean shouldDelayChildPressedState() {
+ return true;
+ }
+
/**
* A listener that is notified when some child locations might have changed.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index a48cab8441df..d6ff4fc1339d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -113,7 +113,7 @@ public class StackScrollAlgorithm {
mBottomStackSlowDownLength = context.getResources()
.getDimensionPixelSize(R.dimen.bottom_stack_slow_down_length);
mRoundedRectCornerRadius = context.getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_quantum_rounded_rect_radius);
+ com.android.internal.R.dimen.notification_material_rounded_rect_radius);
}
@@ -228,11 +228,16 @@ public class StackScrollAlgorithm {
View child = algorithmState.visibleChildren.get(i);
StackScrollState.ViewState childViewState = resultState.getViewStateForView(child);
childViewState.dimmed = dimmed;
- childViewState.scale = !dimmed || activatedChild == child
+ boolean isActivatedChild = activatedChild == child;
+ childViewState.scale = !dimmed || isActivatedChild
? 1.0f
: DIMMED_SCALE;
- if (dimmed && activatedChild != null && child != activatedChild) {
- childViewState.alpha *= ACTIVATED_INVERSE_ALPHA;
+ if (dimmed && activatedChild != null) {
+ if (!isActivatedChild) {
+ childViewState.alpha *= ACTIVATED_INVERSE_ALPHA;
+ } else {
+ childViewState.zTranslation += 2.0f * mZDistanceBetweenElements;
+ }
}
}
}
@@ -657,7 +662,7 @@ public class StackScrollAlgorithm {
} else {
// We are expanding the shade, expand it to its full height.
- if (mFirstChildWhileExpanding.getWidth() == 0) {
+ if (!isMaxSizeInitialized(mFirstChildWhileExpanding)) {
// This child was not layouted yet, wait for a layout pass
mFirstChildWhileExpanding
@@ -684,6 +689,14 @@ public class StackScrollAlgorithm {
}
}
+ private boolean isMaxSizeInitialized(ExpandableView child) {
+ if (child instanceof ExpandableNotificationRow) {
+ ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+ return row.isShowingLayoutLayouted();
+ }
+ return child == null || child.getWidth() != 0;
+ }
+
private View findFirstVisibleChild(ViewGroup container) {
int childCount = container.getChildCount();
for (int i = 0; i < childCount; i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
index 94cb16da39f6..1ad4accb20f6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
@@ -160,9 +160,8 @@ public class StackScrollState {
}
if(child instanceof SpeedBumpView) {
- float speedBumpEnd = newYTranslation + newHeight;
- performSpeedBumpAnimation(i, (SpeedBumpView) child, speedBumpEnd,
- newYTranslation);
+ float lineEnd = newYTranslation + newHeight / 2;
+ performSpeedBumpAnimation(i, (SpeedBumpView) child, lineEnd);
}
}
}
@@ -183,20 +182,12 @@ public class StackScrollState {
child.setClipBounds(mClipRect);
}
- private void performSpeedBumpAnimation(int i, SpeedBumpView speedBump, float speedBumpEnd,
- float speedBumpStart) {
+ private void performSpeedBumpAnimation(int i, SpeedBumpView speedBump, float speedBumpEnd) {
View nextChild = getNextChildNotGone(i);
if (nextChild != null) {
ViewState nextState = getViewStateForView(nextChild);
- boolean startIsAboveNext = nextState.yTranslation > speedBumpStart;
+ boolean startIsAboveNext = nextState.yTranslation > speedBumpEnd;
speedBump.animateDivider(startIsAboveNext, null /* onFinishedRunnable */);
-
- // handle expanded case
- if (speedBump.isExpanded()) {
- boolean endIsAboveNext = nextState.yTranslation > speedBumpEnd;
- speedBump.animateExplanationText(endIsAboveNext);
- }
-
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
index faea8de51bb8..9260aaca76fe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -17,14 +17,14 @@
package com.android.systemui.statusbar.tv;
import android.os.IBinder;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.NotificationListenerService.Ranking;
+import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.statusbar.ActivatableNotificationView;
import com.android.systemui.statusbar.BaseStatusBar;
/*
@@ -51,11 +51,11 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
- public void addNotificationInternal(StatusBarNotification notification, Ranking ranking) {
+ public void addNotificationInternal(StatusBarNotification notification, RankingMap ranking) {
}
@Override
- protected void updateRankingInternal(Ranking ranking) {
+ protected void updateRankingInternal(RankingMap ranking) {
}
@Override
@@ -63,7 +63,7 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
- public void removeNotificationInternal(String key, Ranking ranking) {
+ public void removeNotificationInternal(String key, RankingMap ranking) {
}
@Override
@@ -147,6 +147,18 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
+ public void scheduleHeadsUpOpen() {
+ }
+
+ @Override
+ public void scheduleHeadsUpEscalation() {
+ }
+
+ @Override
+ public void scheduleHeadsUpClose() {
+ }
+
+ @Override
protected int getMaxKeyguardNotifications() {
return 0;
}
@@ -164,10 +176,10 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
- public void onActivated(View view) {
+ public void onActivated(ActivatableNotificationView view) {
}
@Override
- public void onActivationReset(View view) {
+ public void onActivationReset(ActivatableNotificationView view) {
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
index 80a14b3511f3..1cab7ea426bf 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
@@ -333,6 +333,7 @@ public class VolumePanel extends Handler {
public void onDismiss(DialogInterface dialog) {
mActiveStreamType = -1;
mAudioManager.forceVolumeControlStream(mActiveStreamType);
+ collapse();
}
});
@@ -651,12 +652,8 @@ public class VolumePanel extends Handler {
mExpandDivider.setVisibility(show ? View.VISIBLE : View.GONE);
mExpandButton.setImageResource(zen ? com.android.systemui.R.drawable.ic_vol_zen_on
: com.android.systemui.R.drawable.ic_vol_zen_off);
- if (show) {
- if (zen) {
- expand();
- } else {
- collapse();
- }
+ if (show && !zen) {
+ collapse();
}
} else {
mExpandButton.setVisibility(View.GONE);
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index 1000352f6933..798e7fa43228 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -323,10 +323,6 @@ public class ZenModePanel extends LinearLayout {
button1.setVisibility(View.GONE);
button2.setVisibility(View.GONE);
}
- if (mExitConditionId != null && mExitConditionId.equals(tag.conditionId)) {
- if (DEBUG) Log.d(mTag, "Auto-selecting row with mExitConditionId=" + mExitConditionId);
- tag.rb.setChecked(true);
- }
}
private void onClickTimeButton(View row, ConditionTag tag, boolean up) {
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java
index 2222d2c61c97..c748c1b9f5fd 100644
--- a/rs/java/android/renderscript/RenderScript.java
+++ b/rs/java/android/renderscript/RenderScript.java
@@ -64,23 +64,23 @@ public class RenderScript {
static Method registerNativeFree;
/*
- * Context creation flag which specifies a normal context.
+ * Context creation flag that specifies a normal context.
*/
- public static final long CREATE_FLAG_NONE = 0x0000;
+ public static final int CREATE_FLAG_NONE = 0x0000;
/*
* Context creation flag which specifies a context optimized for low
* latency over peak performance. This is a hint and may have no effect
* on some implementations.
*/
- public static final long CREATE_FLAG_LOW_LATENCY = 0x0002;
+ public static final int CREATE_FLAG_LOW_LATENCY = 0x0002;
/*
* Context creation flag which specifies a context optimized for long
* battery life over peak performance. This is a hint and may have no effect
* on some implementations.
*/
- public static final long CREATE_FLAG_LOW_POWER = 0x0004;
+ public static final int CREATE_FLAG_LOW_POWER = 0x0004;
static {
sInitialized = false;
@@ -1174,7 +1174,7 @@ public class RenderScript {
* @param ctx The context.
* @return RenderScript
*/
- public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, long flags) {
+ public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, int flags) {
if (!sInitialized) {
Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
return null;
@@ -1187,7 +1187,7 @@ public class RenderScript {
RenderScript rs = new RenderScript(ctx);
rs.mDev = rs.nDeviceCreate();
- rs.mContext = rs.nContextCreate(rs.mDev, (int)flags, sdkVersion, ct.mID);
+ rs.mContext = rs.nContextCreate(rs.mDev, flags, sdkVersion, ct.mID);
rs.mContextType = ct;
if (rs.mContext == 0) {
throw new RSDriverException("Failed to create RS context.");
@@ -1229,7 +1229,7 @@ public class RenderScript {
* @param flags The OR of the CREATE_FLAG_* options desired
* @return RenderScript
*/
- public static RenderScript create(Context ctx, ContextType ct, long flags) {
+ public static RenderScript create(Context ctx, ContextType ct, int flags) {
int v = ctx.getApplicationInfo().targetSdkVersion;
return create(ctx, v, ct, flags);
}
diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java
index cb5946afacaa..aeb195fe945e 100644
--- a/services/core/java/com/android/server/BatteryService.java
+++ b/services/core/java/com/android/server/BatteryService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.database.ContentObserver;
import android.os.BatteryStats;
import com.android.internal.app.IBatteryStats;
import com.android.server.am.BatteryStatsService;
@@ -128,6 +129,8 @@ public final class BatteryService extends Binder {
private int mPlugType;
private int mLastPlugType = -1; // Extra state so we can detect first run
+ private boolean mBatteryLevelLow;
+
private long mDischargeStartTime;
private int mDischargeStartLevel;
@@ -147,8 +150,8 @@ public final class BatteryService extends Binder {
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
mLowBatteryWarningLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
- mLowBatteryCloseWarningLevel = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_lowBatteryCloseWarningLevel);
+ mLowBatteryCloseWarningLevel = mLowBatteryWarningLevel + mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryCloseWarningBump);
mShutdownBatteryTemperature = mContext.getResources().getInteger(
com.android.internal.R.integer.config_shutdownBatteryTemperature);
@@ -171,9 +174,37 @@ public final class BatteryService extends Binder {
void systemReady() {
// check our power situation now that it is safe to display the shutdown dialog.
synchronized (mLock) {
- shutdownIfNoPowerLocked();
- shutdownIfOverTempLocked();
+ ContentObserver obs = new ContentObserver(mHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ synchronized (mLock) {
+ updateBatteryWarningLevelLocked();
+ }
+ }
+ };
+ final ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
+ false, obs, UserHandle.USER_ALL);
+ updateBatteryWarningLevelLocked();
+ }
+ }
+
+ void updateBatteryWarningLevelLocked() {
+ final ContentResolver resolver = mContext.getContentResolver();
+ int defWarnLevel = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryWarningLevel);
+ mLowBatteryWarningLevel = Settings.Global.getInt(resolver,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, defWarnLevel);
+ if (mLowBatteryWarningLevel == 0) {
+ mLowBatteryWarningLevel = defWarnLevel;
+ }
+ if (mLowBatteryWarningLevel < mCriticalBatteryLevel) {
+ mLowBatteryWarningLevel = mCriticalBatteryLevel;
}
+ mLowBatteryCloseWarningLevel = mLowBatteryWarningLevel + mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_lowBatteryCloseWarningBump);
+ processValuesLocked(true);
}
/**
@@ -222,14 +253,30 @@ public final class BatteryService extends Binder {
}
/**
- * Returns true if battery level is below the first warning threshold.
+ * Returns whether we currently consider the battery level to be low.
*/
- public boolean isBatteryLow() {
+ public boolean getBatteryLevelLow() {
synchronized (mLock) {
- return mBatteryProps.batteryPresent && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel;
+ return mBatteryLevelLow;
}
}
+ public boolean shouldSendBatteryLowLocked() {
+ final boolean plugged = mPlugType != BATTERY_PLUGGED_NONE;
+ final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE;
+
+ /* The ACTION_BATTERY_LOW broadcast is sent in these situations:
+ * - is just un-plugged (previously was plugged) and battery level is
+ * less than or equal to WARNING, or
+ * - is not plugged and battery level falls to WARNING boundary
+ * (becomes <= mLowBatteryWarningLevel).
+ */
+ return !plugged
+ && mBatteryProps.batteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
+ && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel
+ && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
+ }
+
/**
* Returns a non-zero value if an unsupported charger is attached.
*/
@@ -281,14 +328,14 @@ public final class BatteryService extends Binder {
if (!mUpdatesStopped) {
mBatteryProps = props;
// Process the new values.
- processValuesLocked();
+ processValuesLocked(false);
} else {
mLastBatteryProps.set(props);
}
}
}
- private void processValuesLocked() {
+ private void processValuesLocked(boolean force) {
boolean logOutlier = false;
long dischargeDuration = 0;
@@ -331,14 +378,14 @@ public final class BatteryService extends Binder {
shutdownIfNoPowerLocked();
shutdownIfOverTempLocked();
- if (mBatteryProps.batteryStatus != mLastBatteryStatus ||
+ if (force || (mBatteryProps.batteryStatus != mLastBatteryStatus ||
mBatteryProps.batteryHealth != mLastBatteryHealth ||
mBatteryProps.batteryPresent != mLastBatteryPresent ||
mBatteryProps.batteryLevel != mLastBatteryLevel ||
mPlugType != mLastPlugType ||
mBatteryProps.batteryVoltage != mLastBatteryVoltage ||
mBatteryProps.batteryTemperature != mLastBatteryTemperature ||
- mInvalidCharger != mLastInvalidCharger) {
+ mInvalidCharger != mLastInvalidCharger)) {
if (mPlugType != mLastPlugType) {
if (mLastPlugType == BATTERY_PLUGGED_NONE) {
@@ -382,19 +429,24 @@ public final class BatteryService extends Binder {
logOutlier = true;
}
- final boolean plugged = mPlugType != BATTERY_PLUGGED_NONE;
- final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE;
-
- /* The ACTION_BATTERY_LOW broadcast is sent in these situations:
- * - is just un-plugged (previously was plugged) and battery level is
- * less than or equal to WARNING, or
- * - is not plugged and battery level falls to WARNING boundary
- * (becomes <= mLowBatteryWarningLevel).
- */
- final boolean sendBatteryLow = !plugged
- && mBatteryProps.batteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
- && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel
- && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
+ if (!mBatteryLevelLow) {
+ // Should we now switch in to low battery mode?
+ if (mPlugType == BATTERY_PLUGGED_NONE
+ && mBatteryProps.batteryLevel <= mLowBatteryWarningLevel) {
+ mBatteryLevelLow = true;
+ }
+ } else {
+ // Should we now switch out of low battery mode?
+ if (mPlugType != BATTERY_PLUGGED_NONE) {
+ mBatteryLevelLow = false;
+ } else if (mBatteryProps.batteryLevel >= mLowBatteryCloseWarningLevel) {
+ mBatteryLevelLow = false;
+ } else if (force && mBatteryProps.batteryLevel >= mLowBatteryWarningLevel) {
+ // If being forced, the previous state doesn't matter, we will just
+ // absolutely check to see if we are now above the warning level.
+ mBatteryLevelLow = false;
+ }
+ }
sendIntentLocked();
@@ -422,7 +474,7 @@ public final class BatteryService extends Binder {
});
}
- if (sendBatteryLow) {
+ if (shouldSendBatteryLowLocked()) {
mSentLowBatteryBroadcast = true;
mHandler.post(new Runnable() {
@Override
@@ -644,7 +696,7 @@ public final class BatteryService extends Binder {
long ident = Binder.clearCallingIdentity();
try {
mUpdatesStopped = true;
- processValuesLocked();
+ processValuesLocked(false);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -658,7 +710,7 @@ public final class BatteryService extends Binder {
if (mUpdatesStopped) {
mUpdatesStopped = false;
mBatteryProps.set(mLastBatteryProps);
- processValuesLocked();
+ processValuesLocked(false);
}
} finally {
Binder.restoreCallingIdentity(ident);
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index bd4576115b75..70b9d4410c3a 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2691,7 +2691,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
dnsDiff = curLp.compareDnses(newLp);
} else if (newLp != null) {
routeDiff.added = newLp.getAllRoutes();
- dnsDiff.added = newLp.getDnses();
+ dnsDiff.added = newLp.getDnsServers();
}
boolean routesChanged = (routeDiff.removed.size() != 0 || routeDiff.added.size() != 0);
@@ -2915,7 +2915,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) {
LinkProperties p = nt.getLinkProperties();
if (p == null) return;
- Collection<InetAddress> dnses = p.getDnses();
+ Collection<InetAddress> dnses = p.getDnsServers();
int netId = nt.getNetwork().netId;
if (mNetConfigs[netType].isDefault()) {
String network = nt.getNetworkInfo().getTypeName();
@@ -5625,7 +5625,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) {
if (oldLp == null || (newLp.isIdenticalDnses(oldLp) == false)) {
- Collection<InetAddress> dnses = newLp.getDnses();
+ Collection<InetAddress> dnses = newLp.getDnsServers();
if (dnses.size() == 0 && mDefaultDns != null) {
dnses = new ArrayList();
dnses.add(mDefaultDns);
@@ -5790,7 +5790,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
isNewDefault = true;
updateActiveDefaultNetwork(newNetwork);
if (newNetwork.linkProperties != null) {
- setDefaultDnsSystemProperties(newNetwork.linkProperties.getDnses());
+ setDefaultDnsSystemProperties(
+ newNetwork.linkProperties.getDnsServers());
} else {
setDefaultDnsSystemProperties(new ArrayList<InetAddress>());
}
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index d31fb607e566..39410c267109 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -629,6 +629,11 @@ class MountService extends IMountService.Stub
sendUmsIntent(true);
mSendUmsConnectedOnBoot = false;
}
+
+ /*
+ * Start scheduling nominally-daily fstrim operations
+ */
+ MountServiceIdler.scheduleIdlePass(mContext);
}
private final BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
diff --git a/services/core/java/com/android/server/MountServiceIdler.java b/services/core/java/com/android/server/MountServiceIdler.java
index 8b1932143eab..bcb6e9ee9d68 100644
--- a/services/core/java/com/android/server/MountServiceIdler.java
+++ b/services/core/java/com/android/server/MountServiceIdler.java
@@ -16,34 +16,94 @@
package com.android.server;
-import android.app.maintenance.IdleService;
+import java.util.Calendar;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
import android.util.Slog;
-public class MountServiceIdler extends IdleService {
+public class MountServiceIdler extends JobService {
private static final String TAG = "MountServiceIdler";
+ private static ComponentName sIdleService =
+ new ComponentName(MountServiceIdler.class.getPackage().getName(),
+ MountServiceIdler.class.getName());
+
+ private static int MOUNT_JOB_ID = 808;
+
+ private boolean mStarted;
+ private JobParameters mJobParams;
private Runnable mFinishCallback = new Runnable() {
@Override
public void run() {
Slog.i(TAG, "Got mount service completion callback");
- finishIdle();
+ synchronized (mFinishCallback) {
+ if (mStarted) {
+ jobFinished(mJobParams, false);
+ mStarted = false;
+ }
+ }
+ // ... and try again tomorrow
+ scheduleIdlePass(MountServiceIdler.this);
}
};
@Override
- public boolean onIdleStart() {
+ public boolean onStartJob(JobParameters params) {
// The mount service will run an fstrim operation asynchronously
// on a designated separate thread, so we provide it with a callback
// that lets us cleanly end our idle timeslice. It's safe to call
// finishIdle() from any thread.
+ mJobParams = params;
MountService ms = MountService.sSelf;
if (ms != null) {
+ synchronized (mFinishCallback) {
+ mStarted = true;
+ }
ms.runIdleMaintenance(mFinishCallback);
}
return ms != null;
}
@Override
- public void onIdleStop() {
+ public boolean onStopJob(JobParameters params) {
+ // Once we kick off the fstrim we aren't actually interruptible; just note
+ // that we don't need to call jobFinished(), and let everything happen in
+ // the callback from the mount service.
+ synchronized (mFinishCallback) {
+ mStarted = false;
+ }
+ return false;
+ }
+
+ /**
+ * Schedule the idle job that will ping the mount service
+ */
+ public static void scheduleIdlePass(Context context) {
+ JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+
+ Calendar calendar = tomorrowMidnight();
+ final long timeToMidnight = calendar.getTimeInMillis() - System.currentTimeMillis();
+
+ JobInfo.Builder builder = new JobInfo.Builder(MOUNT_JOB_ID, sIdleService);
+ builder.setRequiresDeviceIdle(true);
+ builder.setRequiresCharging(true);
+ builder.setMinimumLatency(timeToMidnight);
+ tm.schedule(builder.build());
+ }
+
+ private static Calendar tomorrowMidnight() {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(System.currentTimeMillis());
+ calendar.set(Calendar.HOUR, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
+ return calendar;
}
}
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index 06dd3edb3015..fdaf55e4f9a4 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -28,6 +28,7 @@ import android.os.BatteryStats;
import android.os.Handler;
import android.os.IVibratorService;
import android.os.PowerManager;
+import android.os.PowerManagerInternal;
import android.os.Process;
import android.os.RemoteException;
import android.os.IBinder;
@@ -64,6 +65,7 @@ public class VibratorService extends IVibratorService.Stub
private final PowerManager.WakeLock mWakeLock;
private final IAppOpsService mAppOpsService;
private final IBatteryStats mBatteryStatsService;
+ private PowerManagerInternal mPowerManagerInternal;
private InputManager mIm;
volatile VibrateThread mThread;
@@ -169,14 +171,19 @@ public class VibratorService extends IVibratorService.Stub
mIm = (InputManager)mContext.getSystemService(Context.INPUT_SERVICE);
mSettingObserver = new SettingsObserver(mH);
+ mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
+ mPowerManagerInternal.registerLowPowerModeObserver(
+ new PowerManagerInternal.LowPowerModeListener() {
+ @Override
+ public void onLowPowerModeChanged(boolean enabled) {
+ updateInputDeviceVibrators();
+ }
+ });
+
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.VIBRATE_INPUT_DEVICES),
true, mSettingObserver, UserHandle.USER_ALL);
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE), false,
- mSettingObserver, UserHandle.USER_ALL);
-
mContext.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -448,8 +455,7 @@ public class VibratorService extends IVibratorService.Stub
} catch (SettingNotFoundException snfe) {
}
- mLowPowerMode = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.LOW_POWER_MODE, 0) != 0;
+ mLowPowerMode = mPowerManagerInternal.getLowPowerModeEnabled();
if (mVibrateInputDevicesSetting) {
if (!mInputDeviceListenerRegistered) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index fc808ec5ae5c..bd1baacc44f7 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -269,7 +269,7 @@ public final class ActivityManagerService extends ActivityManagerNative
static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
// Maximum number of recent tasks that we can remember.
- static final int MAX_RECENT_TASKS = ActivityManager.isLowRamDeviceStatic() ? 10 : 20;
+ static final int MAX_RECENT_TASKS = ActivityManager.isLowRamDeviceStatic() ? 10 : 200;
// Amount of time after a call to stopAppSwitches() during which we will
// prevent further untrusted switches from happening.
@@ -3532,6 +3532,9 @@ public final class ActivityManagerService extends ActivityManagerNative
// Remove any existing entries that are the same kind of task.
final Intent intent = task.intent;
final boolean document = intent != null && intent.isDocument();
+ final ComponentName comp = intent.getComponent();
+
+ int maxRecents = task.maxRecents - 1;
for (int i=0; i<N; i++) {
TaskRecord tr = mRecentTasks.get(i);
if (task != tr) {
@@ -3543,14 +3546,24 @@ public final class ActivityManagerService extends ActivityManagerNative
(intent == null || !intent.filterEquals(trIntent))) {
continue;
}
- if (document || trIntent != null && trIntent.isDocument()) {
- // Document tasks do not match other tasks.
+ final boolean trIsDocument = trIntent != null && trIntent.isDocument();
+ if (document && trIsDocument) {
+ // These are the same document activity (not necessarily the same doc).
+ if (maxRecents > 0) {
+ --maxRecents;
+ continue;
+ }
+ // Hit the maximum number of documents for this task. Fall through
+ // and remove this document from recents.
+ } else if (document || trIsDocument) {
+ // Only one of these is a document. Not the droid we're looking for.
continue;
}
}
// Either task and tr are the same or, their affinities match or their intents match
- // and neither of them is a document.
+ // and neither of them is a document, or they are documents using the same activity
+ // and their maxRecents has been reached.
tr.disposeThumbnail();
mRecentTasks.remove(i);
i--;
@@ -3560,6 +3573,7 @@ public final class ActivityManagerService extends ActivityManagerNative
// specified, then replace it with the existing recent task.
task = tr;
}
+ mTaskPersister.notify(tr, false);
}
if (N >= MAX_RECENT_TASKS) {
mRecentTasks.remove(N-1).disposeThumbnail();
@@ -6016,6 +6030,9 @@ public final class ActivityManagerService extends ActivityManagerNative
IPackageManager pm, ProviderInfo pi, GrantUri grantUri, int uid, final int modeFlags) {
if (DEBUG_URI_PERMISSION) Slog.v(TAG,
"checkHoldingPermissionsLocked: uri=" + grantUri + " uid=" + uid);
+ if (UserHandle.getUserId(uid) != grantUri.sourceUserId) {
+ return false;
+ }
if (pi.applicationInfo.uid == uid) {
return true;
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index b429b9379602..fe4937174e9f 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -906,6 +906,9 @@ final class ActivityRecord {
}
startTime = 0;
finishLaunchTickingLocked();
+ if (task != null) {
+ task.hasBeenVisible = true;
+ }
}
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 1804d039fa7a..d5a50e7d3d55 100755
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -549,14 +549,16 @@ final class ActivityStack {
if (DEBUG_TASKS) Slog.d(TAG, "Found matching affinity!");
return r;
}
- } else if (taskIntent != null && taskIntent.getComponent().equals(cls) &&
+ } else if (taskIntent != null && taskIntent.getComponent() != null &&
+ taskIntent.getComponent().compareTo(cls) == 0 &&
Objects.equals(documentData, taskDocumentData)) {
if (DEBUG_TASKS) Slog.d(TAG, "Found matching class!");
//dump();
if (DEBUG_TASKS) Slog.d(TAG, "For Intent " + intent + " bringing to top: "
+ r.intent);
return r;
- } else if (affinityIntent != null && affinityIntent.getComponent().equals(cls) &&
+ } else if (affinityIntent != null && affinityIntent.getComponent() != null &&
+ affinityIntent.getComponent().compareTo(cls) == 0 &&
Objects.equals(documentData, taskDocumentData)) {
if (DEBUG_TASKS) Slog.d(TAG, "Found matching class!");
//dump();
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 0cc53d194f8e..196e86091ed3 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -45,6 +45,7 @@ import android.app.PendingIntent;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.IActivityManager.WaitResult;
import android.app.ResultInfo;
+import android.app.StatusBarManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.IIntentSender;
@@ -73,6 +74,7 @@ import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.service.voice.IVoiceInteractionSession;
@@ -88,11 +90,13 @@ import android.view.Surface;
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.os.TransferPipe;
+import com.android.internal.statusbar.IStatusBarService;
import com.android.server.LocalServices;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
import com.android.server.am.ActivityStack.ActivityState;
import com.android.server.wm.WindowManagerService;
+
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
@@ -128,9 +132,15 @@ public final class ActivityStackSupervisor implements DisplayListener {
static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6;
static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7;
static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8;
+ static final int LOCK_TASK_START_MSG = FIRST_SUPERVISOR_STACK_MSG + 9;
+ static final int LOCK_TASK_END_MSG = FIRST_SUPERVISOR_STACK_MSG + 10;
private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay";
+ /** Status Bar Service **/
+ private IBinder mToken = new Binder();
+ private IStatusBarService mStatusBarService;
+
// For debugging to make sure the caller when acquiring/releasing our
// wake lock is the system process.
static final boolean VALIDATE_WAKE_LOCK_CALLER = false;
@@ -253,6 +263,21 @@ public final class ActivityStackSupervisor implements DisplayListener {
mLaunchingActivity.setReferenceCounted(false);
}
+ // This function returns a IStatusBarService. The value is from ServiceManager.
+ // getService and is cached.
+ private IStatusBarService getStatusBarService() {
+ synchronized (mService) {
+ if (mStatusBarService == null) {
+ mStatusBarService = IStatusBarService.Stub.asInterface(
+ ServiceManager.checkService(Context.STATUS_BAR_SERVICE));
+ if (mStatusBarService == null) {
+ Slog.w("StatusBarManager", "warning: no STATUS_BAR_SERVICE");
+ }
+ }
+ return mStatusBarService;
+ }
+ }
+
void setWindowManager(WindowManagerService wm) {
synchronized (mService) {
mWindowManager = wm;
@@ -1243,7 +1268,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
// to ensure that it is safe to do so. If the upcoming activity will also
// be part of the voice session, we can only launch it if it has explicitly
// said it supports the VOICE category, or it is a part of the calling app.
- if ((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) == 0
+ if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) == 0
&& sourceRecord.info.applicationInfo.uid != aInfo.applicationInfo.uid) {
try {
if (!AppGlobals.getPackageManager().activitySupportsIntent(intent.getComponent(),
@@ -1460,6 +1485,47 @@ public final class ActivityStackSupervisor implements DisplayListener {
int launchFlags = intent.getFlags();
+ if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0 &&
+ (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE ||
+ r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK)) {
+ // We have a conflict between the Intent and the Activity manifest, manifest wins.
+ Slog.i(TAG, "Ignoring FLAG_ACTIVITY_NEW_DOCUMENT, launchMode is " +
+ "\"singleInstance\" or \"singleTask\"");
+ launchFlags &=
+ ~(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+ } else {
+ switch (r.info.documentLaunchMode) {
+ case ActivityInfo.DOCUMENT_LAUNCH_NONE:
+ break;
+ case ActivityInfo.DOCUMENT_LAUNCH_INTO_EXISTING:
+ launchFlags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
+ break;
+ case ActivityInfo.DOCUMENT_LAUNCH_ALWAYS:
+ launchFlags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
+ break;
+ case ActivityInfo.DOCUMENT_LAUNCH_NEVER:
+ launchFlags &= ~Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
+ break;
+ }
+ }
+
+ if (r.resultTo != null && (launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
+ // For whatever reason this activity is being launched into a new
+ // task... yet the caller has requested a result back. Well, that
+ // is pretty messed up, so instead immediately send back a cancel
+ // and let the new task continue launched as normal without a
+ // dependency on its originator.
+ Slog.w(TAG, "Activity is launching as a new task, so cancelling activity result.");
+ r.resultTo.task.stack.sendActivityResultLocked(-1,
+ r.resultTo, r.resultWho, r.requestCode,
+ Activity.RESULT_CANCELED, null);
+ r.resultTo = null;
+ }
+
+ if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0 && r.resultTo == null) {
+ launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
+ }
+
// We'll invoke onUserLeaving before onPause only if the launching
// activity did not explicitly state that this is an automated launch.
mUserLeaving = (launchFlags & Intent.FLAG_ACTIVITY_NO_USER_ACTION) == 0;
@@ -1490,20 +1556,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
}
}
- switch (r.info.documentLaunchMode) {
- case ActivityInfo.DOCUMENT_LAUNCH_NONE:
- break;
- case ActivityInfo.DOCUMENT_LAUNCH_ALWAYS:
- intent.addFlags(
- Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- launchFlags = intent.getFlags();
- break;
- case ActivityInfo.DOCUMENT_LAUNCH_INTO_EXISTING:
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
- launchFlags = intent.getFlags();
- break;
- }
- final boolean newDocument = intent.isDocument();
if (sourceRecord == null) {
// This activity is not being started from another... in this
// case we -always- start a new task.
@@ -1512,11 +1564,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
"Intent.FLAG_ACTIVITY_NEW_TASK for: " + intent);
launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
}
- } else if (newDocument) {
- if (r.launchMode != ActivityInfo.LAUNCH_MULTIPLE) {
- Slog.w(TAG, "FLAG_ACTIVITY_NEW_DOCUMENT and launchMode != \"standard\"");
- r.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
- }
} else if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
// The original activity who is starting us is running as a single
// instance... this new activity it is starting must go on its
@@ -1555,18 +1602,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
sourceStack = null;
}
- if (r.resultTo != null && (launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
- // For whatever reason this activity is being launched into a new
- // task... yet the caller has requested a result back. Well, that
- // is pretty messed up, so instead immediately send back a cancel
- // and let the new task continue launched as normal without a
- // dependency on its originator.
- Slog.w(TAG, "Activity is launching as a new task, so cancelling activity result.");
- r.resultTo.task.stack.sendActivityResultLocked(-1,
- r.resultTo, r.resultWho, r.requestCode,
- Activity.RESULT_CANCELED, null);
- r.resultTo = null;
- }
+ intent.setFlags(launchFlags);
boolean addingToTask = false;
boolean movedHome = false;
@@ -1801,7 +1837,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
// Should this be considered a new task?
if (r.resultTo == null && !addingToTask
- && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
+ && (launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
if (isLockTaskModeViolation(reuseTask)) {
Slog.e(TAG, "Attempted Lock Task Mode violation r=" + r);
return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
@@ -2942,9 +2978,12 @@ public final class ActivityStackSupervisor implements DisplayListener {
}
void setLockTaskModeLocked(TaskRecord task) {
+ final Message lockTaskMsg = Message.obtain();
if (task == null) {
// Take out of lock task mode.
mLockTaskModeTask = null;
+ lockTaskMsg.what = LOCK_TASK_END_MSG;
+ mHandler.sendMessage(lockTaskMsg);
return;
}
if (isLockTaskModeViolation(task)) {
@@ -2954,6 +2993,8 @@ public final class ActivityStackSupervisor implements DisplayListener {
mLockTaskModeTask = task;
findTaskToMoveToFrontLocked(task, 0, null);
resumeTopActivitiesLocked();
+ lockTaskMsg.what = LOCK_TASK_START_MSG;
+ mHandler.sendMessage(lockTaskMsg);
}
boolean isLockTaskModeViolation(TaskRecord task) {
@@ -3050,6 +3091,32 @@ public final class ActivityStackSupervisor implements DisplayListener {
} catch (RemoteException e) {
}
}
+ case LOCK_TASK_START_MSG: {
+ // When lock task starts, we disable the status bars.
+ try {
+ if (getStatusBarService() != null) {
+ getStatusBarService().disable
+ (StatusBarManager.DISABLE_MASK ^ StatusBarManager.DISABLE_BACK,
+ mToken, mService.mContext.getPackageName());
+ }
+ } catch (RemoteException ex) {
+ throw new RuntimeException(ex);
+ }
+ break;
+ }
+ case LOCK_TASK_END_MSG: {
+ // When lock task ends, we enable the status bars.
+ try {
+ if (getStatusBarService() != null) {
+ getStatusBarService().disable
+ (StatusBarManager.DISABLE_NONE,
+ mToken, mService.mContext.getPackageName());
+ }
+ } catch (RemoteException ex) {
+ throw new RuntimeException(ex);
+ }
+ break;
+ }
}
}
}
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index 3bfaca942e24..bb289fab3f58 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -227,7 +227,7 @@ public class TaskPersister {
for (int fileNdx = 0; fileNdx < files.length; ++fileNdx) {
File file = files[fileNdx];
String filename = file.getName();
- final int taskIdEnd = filename.indexOf('_') + 1;
+ final int taskIdEnd = filename.indexOf('_');
if (taskIdEnd > 0) {
final int taskId;
try {
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index ce83ae6fb0e7..81a0b363cac1 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -73,6 +73,7 @@ final class TaskRecord extends ThumbnailHolder {
boolean rootWasReset; // True if the intent at the root of the task had
// the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag.
boolean askedCompatMode;// Have asked the user about compat mode for this task.
+ boolean hasBeenVisible; // Set if any activities in the task have been visible to the user.
String stringName; // caching of toString() result.
int userId; // user for which this task was created
@@ -96,6 +97,7 @@ final class TaskRecord extends ThumbnailHolder {
/** Takes on same value as first root activity */
boolean isPersistable = false;
+ int maxRecents;
/** Only used for persistable tasks, otherwise 0. The last time this task was moved. Used for
* determining the order when restoring. Sign indicates whether last task movement was to front
@@ -104,6 +106,7 @@ final class TaskRecord extends ThumbnailHolder {
/** True if persistable, has changed, and has not yet been persisted */
boolean needsPersisting = false;
+
/** Launch the home activity when leaving this task. Will be false for tasks that are not on
* Display.DEFAULT_DISPLAY. */
boolean mOnTopOfHome = false;
@@ -301,6 +304,8 @@ final class TaskRecord extends ThumbnailHolder {
if (mActivities.isEmpty()) {
taskType = r.mActivityType;
isPersistable = r.isPersistable();
+ // Clamp to [1, 100].
+ maxRecents = Math.min(Math.max(r.info.maxRecents, 1), 100);
} else {
// Otherwise make all added activities match this one.
r.mActivityType = taskType;
@@ -324,8 +329,12 @@ final class TaskRecord extends ThumbnailHolder {
}
boolean autoRemoveFromRecents() {
- return intent != null &&
- (intent.getFlags() & Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS) != 0;
+ // We will automatically remove the task either if it has explicitly asked for
+ // this, or it is empty and has never contained an activity that got shown to
+ // the user.
+ return (intent != null &&
+ (intent.getFlags() & Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS) != 0) ||
+ (mActivities.isEmpty() && !hasBeenVisible);
}
/**
@@ -643,8 +652,9 @@ final class TaskRecord extends ThumbnailHolder {
final int numActivities = activities.size();
for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) {
final ActivityRecord r = activities.get(activityNdx);
- if (!r.isPersistable() || (r.intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) ==
- Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) {
+ if (!r.isPersistable() || (activityNdx > 0 &&
+ (r.intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0)) {
+ // Stop at first non-persistable or first break in task (CLEAR_WHEN_TASK_RESET).
break;
}
out.startTag(null, TAG_ACTIVITY);
@@ -795,7 +805,8 @@ final class TaskRecord extends ThumbnailHolder {
}
pw.print(prefix); pw.print("lastThumbnail="); pw.print(lastThumbnail);
pw.print(" lastDescription="); pw.println(lastDescription);
- pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime);
+ pw.print(prefix); pw.print("hasBeenVisible="); pw.print(hasBeenVisible);
+ pw.print(" lastActiveTime="); pw.print(lastActiveTime);
pw.print(" (inactive for ");
pw.print((getInactiveDuration()/1000)); pw.println("s)");
}
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 92b5f521ba4f..bdf4708e99bf 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -1344,7 +1344,7 @@ public class Tethering extends BaseNetworkObserver {
if (iface != null) {
String[] dnsServers = mDefaultDnsServers;
- Collection<InetAddress> dnses = linkProperties.getDnses();
+ Collection<InetAddress> dnses = linkProperties.getDnsServers();
if (dnses != null) {
// we currently only handle IPv4
ArrayList<InetAddress> v4Dnses =
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecDevice.java
deleted file mode 100644
index baae1d99f9fc..000000000000
--- a/services/core/java/com/android/server/hdmi/HdmiCecDevice.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2014 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.hdmi;
-
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
-import android.hardware.hdmi.IHdmiCecListener;
-import android.os.Binder;
-import android.os.RemoteException;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * HdmiCecDevice class represents a CEC logical device characterized
- * by its device type. It is a superclass of those serving concrete device type.
- * Currently we're interested in playback(one of sources), display(sink) device type
- * only. The support for the other types like recorder, audio system will come later.
- *
- * <p>A physical device can contain the functions of
- * more than one logical device, in which case it should create
- * as many logical devices as necessary.
- *
- * <p>Note that if a physical device has multiple instances of a particular
- * functionality, it should advertize only one instance. For instance, if
- * a device has multiple tuners, it should only expose one for control
- * via CEC. In this case, it is up to the device itself to manage multiple tuners.
- *
- * <p>The version of HDMI-CEC protocol supported in this class is 1.3a.
- *
- * <p>Declared as package-private, accessed by HdmiCecService only.
- */
-abstract class HdmiCecDevice {
- private static final String TAG = "HdmiCecDevice";
-
- private final int mType;
-
- // List of listeners to the message/event coming to the device.
- private final List<IHdmiCecListener> mListeners = new ArrayList<IHdmiCecListener>();
- private final Binder mBinder = new Binder();
- private final HdmiCecService mService;
-
- private boolean mIsActiveSource;
-
- /**
- * Factory method that creates HdmiCecDevice instance to the device type.
- */
- public static HdmiCecDevice create(HdmiCecService service, int type) {
- if (type == HdmiCec.DEVICE_PLAYBACK) {
- return new HdmiCecDevicePlayback(service, type);
- } else if (type == HdmiCec.DEVICE_TV) {
- return new HdmiCecDeviceTv(service, type);
- }
- return null;
- }
-
- /**
- * Constructor.
- */
- public HdmiCecDevice(HdmiCecService service, int type) {
- mService = service;
- mType = type;
- mIsActiveSource = false;
- }
-
- /**
- * Called right after the class is instantiated. This method can be used to
- * implement any initialization tasks for the instance.
- */
- abstract public void initialize();
-
- /**
- * Return the binder token that identifies this instance.
- */
- public Binder getToken() {
- return mBinder;
- }
-
- /**
- * Return the service instance.
- */
- public HdmiCecService getService() {
- return mService;
- }
-
- /**
- * Return the type of this device.
- */
- public int getType() {
- return mType;
- }
-
- /**
- * Register a listener to be invoked when events occur.
- *
- * @param listener the listern that will run
- */
- public void addListener(IHdmiCecListener listener) {
- mListeners.add(listener);
- }
-
- /**
- * Remove the listener that was previously registered.
- *
- * @param listener IHdmiCecListener instance to be removed
- */
- public void removeListener(IHdmiCecListener listener) {
- mListeners.remove(listener);
- }
-
- /**
- * Indicate if the device has listeners.
- *
- * @return true if there are listener instances for this device
- */
- public boolean hasListener() {
- return !mListeners.isEmpty();
- }
-
- /**
- * Handle HDMI-CEC message coming to the device by invoking the registered
- * listeners.
- */
- public void handleMessage(int srcAddress, int dstAddress, int opcode, byte[] params) {
- if (opcode == HdmiCec.MESSAGE_ACTIVE_SOURCE) {
- mIsActiveSource = false;
- }
-
- if (mListeners.size() == 0) {
- return;
- }
- HdmiCecMessage message = new HdmiCecMessage(srcAddress, dstAddress, opcode, params);
- for (IHdmiCecListener listener : mListeners) {
- try {
- listener.onMessageReceived(message);
- } catch (RemoteException e) {
- Log.e(TAG, "listener.onMessageReceived failed.");
- }
- }
- }
-
- public void handleHotplug(boolean connected) {
- for (IHdmiCecListener listener : mListeners) {
- try {
- listener.onCableStatusChanged(connected);
- } catch (RemoteException e) {
- Log.e(TAG, "listener.onCableStatusChanged failed.");
- }
- }
- }
-
- /**
- * Return the active status of the device.
- *
- * @return true if the device is the active source among the connected
- * HDMI-CEC-enabled devices; otherwise false.
- */
- public boolean isActiveSource() {
- return mIsActiveSource;
- }
-
- /**
- * Update the active source state of the device.
- */
- public void setIsActiveSource(boolean state) {
- mIsActiveSource = state;
- }
-
- /**
- * Send &lt;Active Source&gt; command. The default implementation does nothing. Should be
- * overriden by subclass.
- */
- public void sendActiveSource(int physicalAddress) {
- logWarning("<Active Source> not valid for the device type: " + mType
- + " address:" + physicalAddress);
- }
-
- /**
- * Send &lt;Inactive Source&gt; command. The default implementation does nothing. Should be
- * overriden by subclass.
- */
- public void sendInactiveSource(int physicalAddress) {
- logWarning("<Inactive Source> not valid for the device type: " + mType
- + " address:" + physicalAddress);
- }
-
- /**
- * Send &lt;Image View On&gt; command. The default implementation does nothing. Should be
- * overriden by subclass.
- */
- public void sendImageViewOn() {
- logWarning("<Image View On> not valid for the device type: " + mType);
- }
-
- /**
- * Send &lt;Text View On&gt; command. The default implementation does nothing. Should be
- * overriden by subclass.
- */
- public void sendTextViewOn() {
- logWarning("<Text View On> not valid for the device type: " + mType);
- }
-
- /**
- * Check if the connected sink device is in powered-on state. The default implementation
- * simply returns false. Should be overriden by subclass to report the correct state.
- */
- public boolean isSinkDeviceOn() {
- logWarning("isSinkDeviceOn() not valid for the device type: " + mType);
- return false;
- }
-
- private void logWarning(String msg) {
- Log.w(TAG, msg);
- }
-}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecDevicePlayback.java
deleted file mode 100644
index f8cf11dbf92f..000000000000
--- a/services/core/java/com/android/server/hdmi/HdmiCecDevicePlayback.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2014 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.hdmi;
-
-import android.hardware.hdmi.HdmiCec;
-
-/**
- * Class for the logical device of playback type. Devices such as DVD/Blueray player
- * that support 'playback' feature are classified as playback device. It is common
- * that they don't have built-in display, therefore need to talk, stream their contents
- * to TV/display device which is connected through HDMI cable.
- *
- * <p>It closely monitors the status of display device (other devices can be of interest
- * too, but with much less priority), declares itself as 'active source' to have
- * display show its output, switch the source state as ordered by display that may be
- * talking to many other devices connected to it. It also receives commands from display
- * such as remote control signal, standby, status report, playback mode.
- *
- * <p>Declared as package-private, accessed by HdmiCecService only.
- */
-final class HdmiCecDevicePlayback extends HdmiCecDevice {
- private static final String TAG = "HdmiCecDevicePlayback";
-
- private int mSinkDevicePowerStatus;
-
- /**
- * Constructor.
- */
- public HdmiCecDevicePlayback(HdmiCecService service, int type) {
- super(service, type);
- mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_UNKNOWN;
- }
-
- @Override
- public void initialize() {
- // Playback device tries to obtain the power status of TV/display when created,
- // and maintains it all through its lifecycle. CEC spec says there is
- // a maximum 1 second response time. Therefore it should be kept in mind
- // that there can be as much amount of period of time the power status
- // of the display remains unknown after the query is sent out.
- queryTvPowerStatus();
- }
-
- private void queryTvPowerStatus() {
- getService().sendMessage(getType(), HdmiCec.ADDR_TV,
- HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS, HdmiCecService.EMPTY_PARAM);
- }
-
- @Override
- public void handleMessage(int srcAddress, int dstAddress, int opcode, byte[] params) {
- // Updates power status of display. The cases are:
- // 1) Response for the queried power status request arrives. Update the status.
- // 2) Broadcast or direct <Standby> command from TV, which is sent as TV itself is going
- // into standby mode too.
- if (opcode == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
- mSinkDevicePowerStatus = params[0];
- } else if (srcAddress == HdmiCec.ADDR_TV) {
- if (opcode == HdmiCec.MESSAGE_STANDBY) {
- mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_STANDBY;
- }
- }
- super.handleMessage(srcAddress, dstAddress, opcode, params);
- }
-
- @Override
- public void handleHotplug(boolean connected) {
- // If cable get disconnected sink device becomes unreachable. Switch the status
- // to unknown, and query the status once the cable gets connected back.
- if (!connected) {
- mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_UNKNOWN;
- } else {
- queryTvPowerStatus();
- }
- super.handleHotplug(connected);
- }
-
- @Override
- public boolean isSinkDeviceOn() {
- return mSinkDevicePowerStatus == HdmiCec.POWER_STATUS_ON;
- }
-
- @Override
- public void sendActiveSource(int physicalAddress) {
- setIsActiveSource(true);
- byte[] param = new byte[] {
- (byte) ((physicalAddress >> 8) & 0xff),
- (byte) (physicalAddress & 0xff)
- };
- getService().sendMessage(getType(), HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ACTIVE_SOURCE,
- param);
- }
-
- @Override
- public void sendInactiveSource(int physicalAddress) {
- setIsActiveSource(false);
- byte[] param = new byte[] {
- (byte) ((physicalAddress >> 8) & 0xff),
- (byte) (physicalAddress & 0xff)
- };
- getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_INACTIVE_SOURCE,
- param);
- }
-
- @Override
- public void sendImageViewOn() {
- getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_IMAGE_VIEW_ON,
- HdmiCecService.EMPTY_PARAM);
- }
-
- @Override
- public void sendTextViewOn() {
- getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_TEXT_VIEW_ON,
- HdmiCecService.EMPTY_PARAM);
- }
-}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecDeviceTv.java
deleted file mode 100644
index 09ff3ca75d6b..000000000000
--- a/services/core/java/com/android/server/hdmi/HdmiCecDeviceTv.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2014 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.hdmi;
-
-/**
- * Class for logical device of TV type.
- */
-final class HdmiCecDeviceTv extends HdmiCecDevice {
- private static final String TAG = "HdmiCecDeviceTv";
-
- /**
- * Constructor.
- */
- public HdmiCecDeviceTv(HdmiCecService service, int type) {
- super(service, type);
- }
-
- public void initialize() {
- // TODO: Do the initialization task for TV device here.
- }
-}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecService.java b/services/core/java/com/android/server/hdmi/HdmiCecService.java
deleted file mode 100644
index 98dc72fa7446..000000000000
--- a/services/core/java/com/android/server/hdmi/HdmiCecService.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2014 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.hdmi;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
-import android.hardware.hdmi.IHdmiCecListener;
-import android.hardware.hdmi.IHdmiCecService;
-import android.os.Binder;
-import android.os.Build;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.server.SystemService;
-import libcore.util.EmptyArray;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Locale;
-
-/**
- * Provides a service for sending and processing HDMI-CEC messages, and providing
- * the information on HDMI settings in general.
- */
-public final class HdmiCecService extends SystemService {
- private static final String TAG = "HdmiCecService";
-
- // Maintains the allocated logical devices. Device type, not logical address,
- // is used for key as logical address is likely to change over time while
- // device type is permanent. Type-address mapping is maintained only at
- // native level.
- private final SparseArray<HdmiCecDevice> mLogicalDevices = new SparseArray<HdmiCecDevice>();
-
- // List of IBinder.DeathRecipient instances to handle dead IHdmiCecListener
- // objects.
- private final ArrayList<ListenerRecord> mListenerRecords = new ArrayList<ListenerRecord>();
-
- // Used to synchronize the access to the service.
- private final Object mLock = new Object();
-
- // Stores the pointer to the native implementation of the service that
- // interacts with HAL.
- private long mNativePtr;
-
- private static final String PERMISSION = "android.permission.HDMI_CEC";
-
- static final byte[] EMPTY_PARAM = EmptyArray.BYTE;
-
- public HdmiCecService(Context context) {
- super(context);
- }
-
- private static native long nativeInit(HdmiCecService service);
-
- @Override
- public void onStart() {
- // Stop publishing the service. Soon to be deprecated.
- Log.w(TAG, "In transition to HdmiControlService. May not work.");
- }
-
- /**
- * Called by native when an HDMI-CEC message arrived. Invokes the registered
- * listeners to handle the message.
- */
- private void handleMessage(int srcAddress, int dstAddress, int opcode, byte[] params) {
- // TODO: Messages like <Standby> may not need be passed to listener
- // but better be handled in service by turning off the screen
- // or putting the device into suspend mode. List up such messages
- // and handle them here.
- synchronized (mLock) {
- if (dstAddress == HdmiCec.ADDR_BROADCAST) {
- for (int i = 0; i < mLogicalDevices.size(); ++i) {
- mLogicalDevices.valueAt(i).handleMessage(srcAddress, dstAddress, opcode,
- params);
- }
- } else {
- int type = HdmiCec.getTypeFromAddress(dstAddress);
- HdmiCecDevice device = mLogicalDevices.get(type);
- if (device == null) {
- Log.w(TAG, "logical device not found. type: " + type);
- return;
- }
- device.handleMessage(srcAddress, dstAddress, opcode, params);
- }
- }
- }
-
- /**
- * Called by native when internal HDMI hotplug event occurs. Invokes the registered
- * listeners to handle the event.
- */
- private void handleHotplug(boolean connected) {
- synchronized(mLock) {
- for (int i = 0; i < mLogicalDevices.size(); ++i) {
- mLogicalDevices.valueAt(i).handleHotplug(connected);
- }
- }
- }
-
- /**
- * Called by native when it needs to know whether we have an active source.
- * The native part uses the return value to respond to &lt;Request Active
- * Source &gt;.
- *
- * @return type of the device which is active; DEVICE_INACTIVE if there is
- * no active logical device in the system.
- */
- private int getActiveSource() {
- synchronized(mLock) {
- for (int i = 0; i < mLogicalDevices.size(); ++i) {
- if (mLogicalDevices.valueAt(i).isActiveSource()) {
- return mLogicalDevices.keyAt(i);
- }
- }
- }
- return HdmiCec.DEVICE_INACTIVE;
- }
-
- /**
- * Called by native when a request for the menu language of the device was
- * received. The native part uses the return value to generate the message
- * &lt;Set Menu Language&gt; in response. The language should be of
- * the 3-letter format as defined in ISO/FDIS 639-2. We use system default
- * locale.
- */
- private String getLanguage(int type) {
- return Locale.getDefault().getISO3Language();
- }
-
- private void enforceAccessPermission() {
- getContext().enforceCallingOrSelfPermission(PERMISSION, "HdmiCecService");
- }
-
- private void dumpInternal(PrintWriter pw) {
- pw.println("HdmiCecService (dumpsys hdmi_cec)");
- pw.println("");
- synchronized (mLock) {
- for (int i = 0; i < mLogicalDevices.size(); ++i) {
- HdmiCecDevice device = mLogicalDevices.valueAt(i);
- pw.println("Device: type=" + device.getType() +
- ", active=" + device.isActiveSource());
- }
- }
- }
-
- // Remove logical device of a given type.
- private void removeLogicalDeviceLocked(int type) {
- ensureValidType(type);
- mLogicalDevices.remove(type);
- nativeRemoveLogicalAddress(mNativePtr, type);
- }
-
- private static void ensureValidType(int type) {
- if (!HdmiCec.isValidType(type)) {
- throw new IllegalArgumentException("invalid type: " + type);
- }
- }
-
- // Return the logical device identified by the given binder token.
- private HdmiCecDevice getLogicalDeviceLocked(IBinder b) {
- for (int i = 0; i < mLogicalDevices.size(); ++i) {
- HdmiCecDevice device = mLogicalDevices.valueAt(i);
- if (device.getToken() == b) {
- return device;
- }
- }
- throw new IllegalArgumentException("Device not found");
- }
-
- // package-private. Used by HdmiCecDevice and its subclasses only.
- void sendMessage(int type, int address, int opcode, byte[] params) {
- nativeSendMessage(mNativePtr, type, address, opcode, params);
- }
-
- private void setOsdNameLocked(String name) {
- nativeSetOsdName(mNativePtr, name.getBytes(Charset.forName("US-ASCII")));
- }
-
- private final class ListenerRecord implements IBinder.DeathRecipient {
- private final IHdmiCecListener mListener;
- private final int mType;
-
- public ListenerRecord(IHdmiCecListener listener, int type) {
- mListener = listener;
- mType = type;
- }
-
- @Override
- public void binderDied() {
- synchronized (mLock) {
- mListenerRecords.remove(this);
- HdmiCecDevice device = mLogicalDevices.get(mType);
- if (device != null) {
- device.removeListener(mListener);
- if (!device.hasListener()) {
- removeLogicalDeviceLocked(mType);
- }
- }
- }
- }
- }
-
- private final class BinderService extends IHdmiCecService.Stub {
-
- @Override
- public IBinder allocateLogicalDevice(int type, IHdmiCecListener listener) {
- enforceAccessPermission();
- ensureValidType(type);
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
- }
- synchronized (mLock) {
- HdmiCecDevice device = mLogicalDevices.get(type);
- if (device != null) {
- Log.v(TAG, "Logical address already allocated. Adding listener only.");
- } else {
- int address = nativeAllocateLogicalAddress(mNativePtr, type);
- if (!HdmiCec.isValidAddress(address)) {
- Log.e(TAG, "Logical address was not allocated");
- return null;
- } else {
- device = HdmiCecDevice.create(HdmiCecService.this, type);
- if (device == null) {
- Log.e(TAG, "Device type not supported yet.");
- return null;
- }
- device.initialize();
- mLogicalDevices.put(type, device);
- }
- }
-
- // Adds the listener and its monitor
- ListenerRecord record = new ListenerRecord(listener, type);
- try {
- listener.asBinder().linkToDeath(record, 0);
- } catch (RemoteException e) {
- Log.w(TAG, "Listener already died");
- if (!device.hasListener()) {
- removeLogicalDeviceLocked(type);
- }
- return null;
- }
- mListenerRecords.add(record);
- device.addListener(listener);
- return device.getToken();
- }
- }
-
- @Override
- public void sendActiveSource(IBinder b) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- device.sendActiveSource(nativeGetPhysicalAddress(mNativePtr));
- }
- }
-
- @Override
- public void sendInactiveSource(IBinder b) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- device.sendInactiveSource(nativeGetPhysicalAddress(mNativePtr));
- }
- }
-
- @Override
- public void sendImageViewOn(IBinder b) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- device.sendImageViewOn();
- }
- }
-
- @Override
- public void sendTextViewOn(IBinder b) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- device.sendTextViewOn();
- }
- }
-
- public void sendGiveDevicePowerStatus(IBinder b, int address) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- nativeSendMessage(mNativePtr, device.getType(), address,
- HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS, EMPTY_PARAM);
- }
- }
-
- @Override
- public boolean isTvOn(IBinder b) {
- enforceAccessPermission();
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- return device.isSinkDeviceOn();
- }
- }
-
- @Override
- public void removeServiceListener(IBinder b, IHdmiCecListener listener) {
- enforceAccessPermission();
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
- }
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- for (ListenerRecord record : mListenerRecords) {
- if (record.mType == device.getType()
- && record.mListener.asBinder() == listener.asBinder()) {
- mListenerRecords.remove(record);
- device.removeListener(record.mListener);
- if (!device.hasListener()) {
- removeLogicalDeviceLocked(record.mType);
- }
- break;
- }
- }
- }
- }
-
- @Override
- public void sendMessage(IBinder b, HdmiCecMessage message) {
- enforceAccessPermission();
- if (message == null) {
- throw new IllegalArgumentException("message must not be null");
- }
- synchronized (mLock) {
- HdmiCecDevice device = getLogicalDeviceLocked(b);
- nativeSendMessage(mNativePtr, device.getType(), message.getDestination(),
- message.getOpcode(), message.getParams());
- }
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission denial: can't dump HdmiCecService from pid="
- + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()
- + " without permission " + android.Manifest.permission.DUMP);
- return;
- }
- final long ident = Binder.clearCallingIdentity();
- try {
- dumpInternal(pw);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
- }
-
- private static native int nativeAllocateLogicalAddress(long handler, int deviceType);
- private static native void nativeRemoveLogicalAddress(long handler, int deviceType);
- private static native void nativeSendMessage(long handler, int deviceType, int destination,
- int opcode, byte[] params);
- private static native int nativeGetPhysicalAddress(long handler);
- private static native void nativeSetOsdName(long handler, byte[] name);
-}
diff --git a/services/core/java/com/android/server/task/TaskCompletedListener.java b/services/core/java/com/android/server/job/JobCompletedListener.java
index c53f5ca349d1..a7af9cd2b64b 100644
--- a/services/core/java/com/android/server/task/TaskCompletedListener.java
+++ b/services/core/java/com/android/server/job/JobCompletedListener.java
@@ -14,19 +14,19 @@
* limitations under the License
*/
-package com.android.server.task;
+package com.android.server.job;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.controllers.JobStatus;
/**
- * Used for communication between {@link com.android.server.task.TaskServiceContext} and the
- * {@link com.android.server.task.TaskManagerService}.
+ * Used for communication between {@link com.android.server.job.JobServiceContext} and the
+ * {@link com.android.server.job.JobSchedulerService}.
*/
-public interface TaskCompletedListener {
+public interface JobCompletedListener {
/**
- * Callback for when a task is completed.
- * @param needsReschedule Whether the implementing class should reschedule this task.
+ * Callback for when a job is completed.
+ * @param needsReschedule Whether the implementing class should reschedule this job.
*/
- public void onTaskCompleted(TaskStatus taskStatus, boolean needsReschedule);
+ public void onJobCompleted(JobStatus jobStatus, boolean needsReschedule);
}
diff --git a/services/core/java/com/android/server/task/TaskMapReadFinishedListener.java b/services/core/java/com/android/server/job/JobMapReadFinishedListener.java
index c68d8db4da03..f3e77e6a36f6 100644
--- a/services/core/java/com/android/server/task/TaskMapReadFinishedListener.java
+++ b/services/core/java/com/android/server/job/JobMapReadFinishedListener.java
@@ -14,21 +14,21 @@
* limitations under the License
*/
-package com.android.server.task;
+package com.android.server.job;
import java.util.List;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.controllers.JobStatus;
/**
- * Callback definition for I/O thread to let the TaskManagerService know when
+ * Callback definition for I/O thread to let the JobManagerService know when
* I/O read has completed. Done this way so we don't stall the main thread on
* boot.
*/
-public interface TaskMapReadFinishedListener {
+public interface JobMapReadFinishedListener {
/**
- * Called by the {@link TaskStore} at boot, when the disk read is finished.
+ * Called by the {@link JobStore} at boot, when the disk read is finished.
*/
- public void onTaskMapReadFinished(List<TaskStatus> tasks);
+ public void onJobMapReadFinished(List<JobStatus> jobs);
}
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
new file mode 100644
index 000000000000..0e9a9cc5da51
--- /dev/null
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -0,0 +1,764 @@
+/*
+ * Copyright (C) 2014 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.job;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.app.job.IJobScheduler;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ServiceInfo;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.server.job.controllers.BatteryController;
+import com.android.server.job.controllers.ConnectivityController;
+import com.android.server.job.controllers.IdleController;
+import com.android.server.job.controllers.JobStatus;
+import com.android.server.job.controllers.StateController;
+import com.android.server.job.controllers.TimeController;
+
+import java.util.LinkedList;
+
+/**
+ * Responsible for taking jobs representing work to be performed by a client app, and determining
+ * based on the criteria specified when that job should be run against the client application's
+ * endpoint.
+ * Implements logic for scheduling, and rescheduling jobs. The JobSchedulerService knows nothing
+ * about constraints, or the state of active jobs. It receives callbacks from the various
+ * controllers and completed jobs and operates accordingly.
+ *
+ * Note on locking: Any operations that manipulate {@link #mJobs} need to lock on that object.
+ * Any function with the suffix 'Locked' also needs to lock on {@link #mJobs}.
+ * @hide
+ */
+public class JobSchedulerService extends com.android.server.SystemService
+ implements StateChangedListener, JobCompletedListener, JobMapReadFinishedListener {
+ // TODO: Switch this off for final version.
+ static final boolean DEBUG = true;
+ /** The number of concurrent jobs we run at one time. */
+ private static final int MAX_JOB_CONTEXTS_COUNT = 3;
+ static final String TAG = "JobManagerService";
+ /** Master list of jobs. */
+ private final JobStore mJobs;
+
+ static final int MSG_JOB_EXPIRED = 0;
+ static final int MSG_CHECK_JOB = 1;
+
+ // Policy constants
+ /**
+ * Minimum # of idle jobs that must be ready in order to force the JMS to schedule things
+ * early.
+ */
+ private static final int MIN_IDLE_COUNT = 1;
+ /**
+ * Minimum # of connectivity jobs that must be ready in order to force the JMS to schedule
+ * things early.
+ */
+ private static final int MIN_CONNECTIVITY_COUNT = 2;
+ /**
+ * Minimum # of jobs (with no particular constraints) for which the JMS will be happy running
+ * some work early.
+ */
+ private static final int MIN_READY_JOBS_COUNT = 4;
+
+ /**
+ * Track Services that have currently active or pending jobs. The index is provided by
+ * {@link JobStatus#getServiceToken()}
+ */
+ private final List<JobServiceContext> mActiveServices = new LinkedList<JobServiceContext>();
+ /** List of controllers that will notify this service of updates to jobs. */
+ private List<StateController> mControllers;
+ /**
+ * Queue of pending jobs. The JobServiceContext class will receive jobs from this list
+ * when ready to execute them.
+ */
+ private final LinkedList<JobStatus> mPendingJobs = new LinkedList<JobStatus>();
+
+ private final JobHandler mHandler;
+ private final JobSchedulerStub mJobSchedulerStub;
+ /**
+ * Cleans up outstanding jobs when a package is removed. Even if it's being replaced later we
+ * still clean up. On reinstall the package will have a new uid.
+ */
+ private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Slog.d(TAG, "Receieved: " + intent.getAction());
+ if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
+ int uidRemoved = intent.getIntExtra(Intent.EXTRA_UID, -1);
+ if (DEBUG) {
+ Slog.d(TAG, "Removing jobs for uid: " + uidRemoved);
+ }
+ cancelJobsForUid(uidRemoved);
+ } else if (Intent.ACTION_USER_REMOVED.equals(intent.getAction())) {
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
+ if (DEBUG) {
+ Slog.d(TAG, "Removing jobs for user: " + userId);
+ }
+ cancelJobsForUser(userId);
+ }
+ }
+ };
+
+ /**
+ * Entry point from client to schedule the provided job.
+ * This cancels the job if it's already been scheduled, and replaces it with the one provided.
+ * @param job JobInfo object containing execution parameters
+ * @param uId The package identifier of the application this job is for.
+ * @param canPersistJob Whether or not the client has the appropriate permissions for
+ * persisting this job.
+ * @return Result of this operation. See <code>JobScheduler#RESULT_*</code> return codes.
+ */
+ public int schedule(JobInfo job, int uId, boolean canPersistJob) {
+ JobStatus jobStatus = new JobStatus(job, uId, canPersistJob);
+ cancelJob(uId, job.getId());
+ startTrackingJob(jobStatus);
+ return JobScheduler.RESULT_SUCCESS;
+ }
+
+ public List<JobInfo> getPendingJobs(int uid) {
+ ArrayList<JobInfo> outList = new ArrayList<JobInfo>();
+ synchronized (mJobs) {
+ for (JobStatus job : mJobs.getJobs()) {
+ if (job.getUid() == uid) {
+ outList.add(job.getJob());
+ }
+ }
+ }
+ return outList;
+ }
+
+ private void cancelJobsForUser(int userHandle) {
+ synchronized (mJobs) {
+ List<JobStatus> jobsForUser = mJobs.getJobsByUser(userHandle);
+ for (JobStatus toRemove : jobsForUser) {
+ if (DEBUG) {
+ Slog.d(TAG, "Cancelling: " + toRemove);
+ }
+ cancelJobLocked(toRemove);
+ }
+ }
+ }
+
+ /**
+ * Entry point from client to cancel all jobs originating from their uid.
+ * This will remove the job from the master list, and cancel the job if it was staged for
+ * execution or being executed.
+ * @param uid To check against for removal of a job.
+ */
+ public void cancelJobsForUid(int uid) {
+ // Remove from master list.
+ synchronized (mJobs) {
+ List<JobStatus> jobsForUid = mJobs.getJobsByUid(uid);
+ for (JobStatus toRemove : jobsForUid) {
+ if (DEBUG) {
+ Slog.d(TAG, "Cancelling: " + toRemove);
+ }
+ cancelJobLocked(toRemove);
+ }
+ }
+ }
+
+ /**
+ * Entry point from client to cancel the job corresponding to the jobId provided.
+ * This will remove the job from the master list, and cancel the job if it was staged for
+ * execution or being executed.
+ * @param uid Uid of the calling client.
+ * @param jobId Id of the job, provided at schedule-time.
+ */
+ public void cancelJob(int uid, int jobId) {
+ JobStatus toCancel;
+ synchronized (mJobs) {
+ toCancel = mJobs.getJobByUidAndJobId(uid, jobId);
+ if (toCancel != null) {
+ cancelJobLocked(toCancel);
+ }
+ }
+ }
+
+ private void cancelJobLocked(JobStatus cancelled) {
+ // Remove from store.
+ stopTrackingJob(cancelled);
+ // Remove from pending queue.
+ mPendingJobs.remove(cancelled);
+ // Cancel if running.
+ stopJobOnServiceContextLocked(cancelled);
+ }
+
+ /**
+ * Initializes the system service.
+ * <p>
+ * Subclasses must define a single argument constructor that accepts the context
+ * and passes it to super.
+ * </p>
+ *
+ * @param context The system server context.
+ */
+ public JobSchedulerService(Context context) {
+ super(context);
+ // Create the controllers.
+ mControllers = new LinkedList<StateController>();
+ mControllers.add(ConnectivityController.get(this));
+ mControllers.add(TimeController.get(this));
+ mControllers.add(IdleController.get(this));
+ mControllers.add(BatteryController.get(this));
+
+ mHandler = new JobHandler(context.getMainLooper());
+ mJobSchedulerStub = new JobSchedulerStub();
+ // Create the "runners".
+ for (int i = 0; i < MAX_JOB_CONTEXTS_COUNT; i++) {
+ mActiveServices.add(
+ new JobServiceContext(this, context.getMainLooper()));
+ }
+ mJobs = JobStore.initAndGet(this);
+ }
+
+ @Override
+ public void onStart() {
+ publishBinderService(Context.JOB_SCHEDULER_SERVICE, mJobSchedulerStub);
+ }
+
+ @Override
+ public void onBootPhase(int phase) {
+ if (PHASE_SYSTEM_SERVICES_READY == phase) {
+ // Register br for package removals and user removals.
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addDataScheme("package");
+ getContext().registerReceiverAsUser(
+ mBroadcastReceiver, UserHandle.ALL, filter, null, null);
+ final IntentFilter userFilter = new IntentFilter(Intent.ACTION_USER_REMOVED);
+ getContext().registerReceiverAsUser(
+ mBroadcastReceiver, UserHandle.ALL, userFilter, null, null);
+ }
+ }
+
+ /**
+ * Called when we have a job status object that we need to insert in our
+ * {@link com.android.server.job.JobStore}, and make sure all the relevant controllers know
+ * about.
+ */
+ private void startTrackingJob(JobStatus jobStatus) {
+ boolean update;
+ synchronized (mJobs) {
+ update = mJobs.add(jobStatus);
+ }
+ for (StateController controller : mControllers) {
+ if (update) {
+ controller.maybeStopTrackingJob(jobStatus);
+ }
+ controller.maybeStartTrackingJob(jobStatus);
+ }
+ }
+
+ /**
+ * Called when we want to remove a JobStatus object that we've finished executing. Returns the
+ * object removed.
+ */
+ private boolean stopTrackingJob(JobStatus jobStatus) {
+ boolean removed;
+ synchronized (mJobs) {
+ // Remove from store as well as controllers.
+ removed = mJobs.remove(jobStatus);
+ }
+ if (removed) {
+ for (StateController controller : mControllers) {
+ controller.maybeStopTrackingJob(jobStatus);
+ }
+ }
+ return removed;
+ }
+
+ private boolean stopJobOnServiceContextLocked(JobStatus job) {
+ for (JobServiceContext jsc : mActiveServices) {
+ final JobStatus executing = jsc.getRunningJob();
+ if (executing != null && executing.matches(job.getUid(), job.getJobId())) {
+ jsc.cancelExecutingJob();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @param job JobStatus we are querying against.
+ * @return Whether or not the job represented by the status object is currently being run or
+ * is pending.
+ */
+ private boolean isCurrentlyActiveLocked(JobStatus job) {
+ for (JobServiceContext serviceContext : mActiveServices) {
+ final JobStatus running = serviceContext.getRunningJob();
+ if (running != null && running.matches(job.getUid(), job.getJobId())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * A job is rescheduled with exponential back-off if the client requests this from their
+ * execution logic.
+ * A caveat is for idle-mode jobs, for which the idle-mode constraint will usurp the
+ * timeliness of the reschedule. For an idle-mode job, no deadline is given.
+ * @param failureToReschedule Provided job status that we will reschedule.
+ * @return A newly instantiated JobStatus with the same constraints as the last job except
+ * with adjusted timing constraints.
+ */
+ private JobStatus getRescheduleJobForFailure(JobStatus failureToReschedule) {
+ final long elapsedNowMillis = SystemClock.elapsedRealtime();
+ final JobInfo job = failureToReschedule.getJob();
+
+ final long initialBackoffMillis = job.getInitialBackoffMillis();
+ final int backoffAttempt = failureToReschedule.getNumFailures() + 1;
+ long newEarliestRuntimeElapsed = elapsedNowMillis;
+
+ switch (job.getBackoffPolicy()) {
+ case JobInfo.BackoffPolicy.LINEAR:
+ newEarliestRuntimeElapsed += initialBackoffMillis * backoffAttempt;
+ break;
+ default:
+ if (DEBUG) {
+ Slog.v(TAG, "Unrecognised back-off policy, defaulting to exponential.");
+ }
+ case JobInfo.BackoffPolicy.EXPONENTIAL:
+ newEarliestRuntimeElapsed +=
+ Math.pow(initialBackoffMillis * 0.001, backoffAttempt) * 1000;
+ break;
+ }
+ newEarliestRuntimeElapsed =
+ Math.min(newEarliestRuntimeElapsed, JobInfo.MAX_BACKOFF_DELAY_MILLIS);
+ return new JobStatus(failureToReschedule, newEarliestRuntimeElapsed,
+ JobStatus.NO_LATEST_RUNTIME, backoffAttempt);
+ }
+
+ /**
+ * Called after a periodic has executed so we can to re-add it. We take the last execution time
+ * of the job to be the time of completion (i.e. the time at which this function is called).
+ * This could be inaccurate b/c the job can run for as long as
+ * {@link com.android.server.job.JobServiceContext#EXECUTING_TIMESLICE_MILLIS}, but will lead
+ * to underscheduling at least, rather than if we had taken the last execution time to be the
+ * start of the execution.
+ * @return A new job representing the execution criteria for this instantiation of the
+ * recurring job.
+ */
+ private JobStatus getRescheduleJobForPeriodic(JobStatus periodicToReschedule) {
+ final long elapsedNow = SystemClock.elapsedRealtime();
+ // Compute how much of the period is remaining.
+ long runEarly = Math.max(periodicToReschedule.getLatestRunTimeElapsed() - elapsedNow, 0);
+ long newEarliestRunTimeElapsed = elapsedNow + runEarly;
+ long period = periodicToReschedule.getJob().getIntervalMillis();
+ long newLatestRuntimeElapsed = newEarliestRunTimeElapsed + period;
+
+ if (DEBUG) {
+ Slog.v(TAG, "Rescheduling executed periodic. New execution window [" +
+ newEarliestRunTimeElapsed/1000 + ", " + newLatestRuntimeElapsed/1000 + "]s");
+ }
+ return new JobStatus(periodicToReschedule, newEarliestRunTimeElapsed,
+ newLatestRuntimeElapsed, 0 /* backoffAttempt */);
+ }
+
+ // JobCompletedListener implementations.
+
+ /**
+ * A job just finished executing. We fetch the
+ * {@link com.android.server.job.controllers.JobStatus} from the store and depending on
+ * whether we want to reschedule we readd it to the controllers.
+ * @param jobStatus Completed job.
+ * @param needsReschedule Whether the implementing class should reschedule this job.
+ */
+ @Override
+ public void onJobCompleted(JobStatus jobStatus, boolean needsReschedule) {
+ if (DEBUG) {
+ Slog.d(TAG, "Completed " + jobStatus + ", reschedule=" + needsReschedule);
+ }
+ if (!stopTrackingJob(jobStatus)) {
+ if (DEBUG) {
+ Slog.e(TAG, "Error removing job: could not find job to remove. Was job " +
+ "removed while executing?");
+ }
+ return;
+ }
+ if (needsReschedule) {
+ JobStatus rescheduled = getRescheduleJobForFailure(jobStatus);
+ startTrackingJob(rescheduled);
+ } else if (jobStatus.getJob().isPeriodic()) {
+ JobStatus rescheduledPeriodic = getRescheduleJobForPeriodic(jobStatus);
+ startTrackingJob(rescheduledPeriodic);
+ }
+ mHandler.obtainMessage(MSG_CHECK_JOB).sendToTarget();
+ }
+
+ // StateChangedListener implementations.
+
+ /**
+ * Off-board work to our handler thread as quickly as possible, b/c this call is probably being
+ * made on the main thread.
+ * For now this takes the job and if it's ready to run it will run it. In future we might not
+ * provide the job, so that the StateChangedListener has to run through its list of jobs to
+ * see which are ready. This will further decouple the controllers from the execution logic.
+ */
+ @Override
+ public void onControllerStateChanged() {
+ // Post a message to to run through the list of jobs and start/stop any that are eligible.
+ mHandler.obtainMessage(MSG_CHECK_JOB).sendToTarget();
+ }
+
+ @Override
+ public void onRunJobNow(JobStatus jobStatus) {
+ mHandler.obtainMessage(MSG_JOB_EXPIRED, jobStatus).sendToTarget();
+ }
+
+ /**
+ * Disk I/O is finished, take the list of jobs we read from disk and add them to our
+ * {@link JobStore}.
+ * This is run on the {@link com.android.server.IoThread} instance, which is a separate thread,
+ * and is called once at boot.
+ */
+ @Override
+ public void onJobMapReadFinished(List<JobStatus> jobs) {
+ synchronized (mJobs) {
+ for (JobStatus js : jobs) {
+ if (mJobs.containsJobIdForUid(js.getJobId(), js.getUid())) {
+ // An app with BOOT_COMPLETED *might* have decided to reschedule their job, in
+ // the same amount of time it took us to read it from disk. If this is the case
+ // we leave it be.
+ continue;
+ }
+ startTrackingJob(js);
+ }
+ }
+ }
+
+ private class JobHandler extends Handler {
+
+ public JobHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ public void handleMessage(Message message) {
+ switch (message.what) {
+ case MSG_JOB_EXPIRED:
+ synchronized (mJobs) {
+ JobStatus runNow = (JobStatus) message.obj;
+ if (!mPendingJobs.contains(runNow)) {
+ mPendingJobs.add(runNow);
+ }
+ }
+ queueReadyJobsForExecutionH();
+ break;
+ case MSG_CHECK_JOB:
+ // Check the list of jobs and run some of them if we feel inclined.
+ maybeQueueReadyJobsForExecutionH();
+ break;
+ }
+ maybeRunPendingJobsH();
+ // Don't remove JOB_EXPIRED in case one came along while processing the queue.
+ removeMessages(MSG_CHECK_JOB);
+ }
+
+ /**
+ * Run through list of jobs and execute all possible - at least one is expired so we do
+ * as many as we can.
+ */
+ private void queueReadyJobsForExecutionH() {
+ synchronized (mJobs) {
+ for (JobStatus job : mJobs.getJobs()) {
+ if (isReadyToBeExecutedLocked(job)) {
+ mPendingJobs.add(job);
+ } else if (isReadyToBeCancelledLocked(job)) {
+ stopJobOnServiceContextLocked(job);
+ }
+ }
+ }
+ }
+
+ /**
+ * The state of at least one job has changed. Here is where we could enforce various
+ * policies on when we want to execute jobs.
+ * Right now the policy is such:
+ * If >1 of the ready jobs is idle mode we send all of them off
+ * if more than 2 network connectivity jobs are ready we send them all off.
+ * If more than 4 jobs total are ready we send them all off.
+ * TODO: It would be nice to consolidate these sort of high-level policies somewhere.
+ */
+ private void maybeQueueReadyJobsForExecutionH() {
+ synchronized (mJobs) {
+ int idleCount = 0;
+ int backoffCount = 0;
+ int connectivityCount = 0;
+ List<JobStatus> runnableJobs = new ArrayList<JobStatus>();
+ for (JobStatus job : mJobs.getJobs()) {
+ if (isReadyToBeExecutedLocked(job)) {
+ if (job.getNumFailures() > 0) {
+ backoffCount++;
+ }
+ if (job.hasIdleConstraint()) {
+ idleCount++;
+ }
+ if (job.hasConnectivityConstraint() || job.hasUnmeteredConstraint()) {
+ connectivityCount++;
+ }
+ runnableJobs.add(job);
+ } else if (isReadyToBeCancelledLocked(job)) {
+ stopJobOnServiceContextLocked(job);
+ }
+ }
+ if (backoffCount > 0 || idleCount >= MIN_IDLE_COUNT ||
+ connectivityCount >= MIN_CONNECTIVITY_COUNT ||
+ runnableJobs.size() >= MIN_READY_JOBS_COUNT) {
+ for (JobStatus job : runnableJobs) {
+ mPendingJobs.add(job);
+ }
+ }
+ }
+ }
+
+ /**
+ * Criteria for moving a job into the pending queue:
+ * - It's ready.
+ * - It's not pending.
+ * - It's not already running on a JSC.
+ */
+ private boolean isReadyToBeExecutedLocked(JobStatus job) {
+ return job.isReady() && !mPendingJobs.contains(job) && !isCurrentlyActiveLocked(job);
+ }
+
+ /**
+ * Criteria for cancelling an active job:
+ * - It's not ready
+ * - It's running on a JSC.
+ */
+ private boolean isReadyToBeCancelledLocked(JobStatus job) {
+ return !job.isReady() && isCurrentlyActiveLocked(job);
+ }
+
+ /**
+ * Reconcile jobs in the pending queue against available execution contexts.
+ * A controller can force a job into the pending queue even if it's already running, but
+ * here is where we decide whether to actually execute it.
+ */
+ private void maybeRunPendingJobsH() {
+ synchronized (mJobs) {
+ Iterator<JobStatus> it = mPendingJobs.iterator();
+ while (it.hasNext()) {
+ JobStatus nextPending = it.next();
+ JobServiceContext availableContext = null;
+ for (JobServiceContext jsc : mActiveServices) {
+ final JobStatus running = jsc.getRunningJob();
+ if (running != null && running.matches(nextPending.getUid(),
+ nextPending.getJobId())) {
+ // Already running this tId for this uId, skip.
+ availableContext = null;
+ break;
+ }
+ if (jsc.isAvailable()) {
+ availableContext = jsc;
+ }
+ }
+ if (availableContext != null) {
+ if (!availableContext.executeRunnableJob(nextPending)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Error executing " + nextPending);
+ }
+ mJobs.remove(nextPending);
+ }
+ it.remove();
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Binder stub trampoline implementation
+ */
+ final class JobSchedulerStub extends IJobScheduler.Stub {
+ /** Cache determination of whether a given app can persist jobs
+ * key is uid of the calling app; value is undetermined/true/false
+ */
+ private final SparseArray<Boolean> mPersistCache = new SparseArray<Boolean>();
+
+ // Enforce that only the app itself (or shared uid participant) can schedule a
+ // job that runs one of the app's services, as well as verifying that the
+ // named service properly requires the BIND_JOB_SERVICE permission
+ private void enforceValidJobRequest(int uid, JobInfo job) {
+ final PackageManager pm = getContext().getPackageManager();
+ final ComponentName service = job.getService();
+ try {
+ ServiceInfo si = pm.getServiceInfo(service, 0);
+ if (si.applicationInfo.uid != uid) {
+ throw new IllegalArgumentException("uid " + uid +
+ " cannot schedule job in " + service.getPackageName());
+ }
+ if (!JobService.PERMISSION_BIND.equals(si.permission)) {
+ throw new IllegalArgumentException("Scheduled service " + service
+ + " does not require android.permission.BIND_JOB_SERVICE permission");
+ }
+ } catch (NameNotFoundException e) {
+ throw new IllegalArgumentException("No such service: " + service);
+ }
+ }
+
+ private boolean canPersistJobs(int pid, int uid) {
+ // If we get this far we're good to go; all we need to do now is check
+ // whether the app is allowed to persist its scheduled work.
+ final boolean canPersist;
+ synchronized (mPersistCache) {
+ Boolean cached = mPersistCache.get(uid);
+ if (cached != null) {
+ canPersist = cached.booleanValue();
+ } else {
+ // Persisting jobs is tantamount to running at boot, so we permit
+ // it when the app has declared that it uses the RECEIVE_BOOT_COMPLETED
+ // permission
+ int result = getContext().checkPermission(
+ android.Manifest.permission.RECEIVE_BOOT_COMPLETED, pid, uid);
+ canPersist = (result == PackageManager.PERMISSION_GRANTED);
+ mPersistCache.put(uid, canPersist);
+ }
+ }
+ return canPersist;
+ }
+
+ // IJobScheduler implementation
+ @Override
+ public int schedule(JobInfo job) throws RemoteException {
+ if (DEBUG) {
+ Slog.d(TAG, "Scheduling job: " + job);
+ }
+ final int pid = Binder.getCallingPid();
+ final int uid = Binder.getCallingUid();
+
+ enforceValidJobRequest(uid, job);
+ final boolean canPersist = canPersistJobs(pid, uid);
+
+ long ident = Binder.clearCallingIdentity();
+ try {
+ return JobSchedulerService.this.schedule(job, uid, canPersist);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
+ public List<JobInfo> getAllPendingJobs() throws RemoteException {
+ final int uid = Binder.getCallingUid();
+
+ long ident = Binder.clearCallingIdentity();
+ try {
+ return JobSchedulerService.this.getPendingJobs(uid);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
+ public void cancelAll() throws RemoteException {
+ final int uid = Binder.getCallingUid();
+
+ long ident = Binder.clearCallingIdentity();
+ try {
+ JobSchedulerService.this.cancelJobsForUid(uid);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
+ public void cancel(int jobId) throws RemoteException {
+ final int uid = Binder.getCallingUid();
+
+ long ident = Binder.clearCallingIdentity();
+ try {
+ JobSchedulerService.this.cancelJob(uid, jobId);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ /**
+ * "dumpsys" infrastructure
+ */
+ @Override
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
+
+ long identityToken = Binder.clearCallingIdentity();
+ try {
+ JobSchedulerService.this.dumpInternal(pw);
+ } finally {
+ Binder.restoreCallingIdentity(identityToken);
+ }
+ }
+ };
+
+ void dumpInternal(PrintWriter pw) {
+ synchronized (mJobs) {
+ pw.println("Registered jobs:");
+ if (mJobs.size() > 0) {
+ for (JobStatus job : mJobs.getJobs()) {
+ job.dump(pw, " ");
+ }
+ } else {
+ pw.println();
+ pw.println("No jobs scheduled.");
+ }
+ for (StateController controller : mControllers) {
+ pw.println();
+ controller.dumpControllerState(pw);
+ }
+ pw.println();
+ pw.println("Pending");
+ for (JobStatus jobStatus : mPendingJobs) {
+ pw.println(jobStatus.hashCode());
+ }
+ pw.println();
+ pw.println("Active jobs:");
+ for (JobServiceContext jsc : mActiveServices) {
+ if (jsc.isAvailable()) {
+ continue;
+ } else {
+ pw.println(jsc.getRunningJob().hashCode() + " for: " +
+ (SystemClock.elapsedRealtime()
+ - jsc.getExecutionStartTimeElapsed())/1000 + "s " +
+ "timeout: " + jsc.getTimeoutElapsed());
+ }
+ }
+ }
+ pw.println();
+ }
+}
diff --git a/services/core/java/com/android/server/task/TaskServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 75e92127475d..92b643cd6e7a 100644
--- a/services/core/java/com/android/server/task/TaskServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -14,12 +14,12 @@
* limitations under the License
*/
-package com.android.server.task;
+package com.android.server.job;
import android.app.ActivityManager;
-import android.app.task.ITaskCallback;
-import android.app.task.ITaskService;
-import android.app.task.TaskParams;
+import android.app.job.JobParameters;
+import android.app.job.IJobCallback;
+import android.app.job.IJobService;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -31,40 +31,40 @@ import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.os.UserHandle;
import android.os.WorkSource;
import android.util.Log;
import android.util.Slog;
-import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.controllers.JobStatus;
import java.util.concurrent.atomic.AtomicBoolean;
/**
- * Handles client binding and lifecycle of a task. A task will only execute one at a time on an
+ * Handles client binding and lifecycle of a job. A job will only execute one at a time on an
* instance of this class.
*/
-public class TaskServiceContext extends ITaskCallback.Stub implements ServiceConnection {
+public class JobServiceContext extends IJobCallback.Stub implements ServiceConnection {
private static final boolean DEBUG = true;
- private static final String TAG = "TaskServiceContext";
- /** Define the maximum # of tasks allowed to run on a service at once. */
- private static final int defaultMaxActiveTasksPerService =
+ private static final String TAG = "JobServiceContext";
+ /** Define the maximum # of jobs allowed to run on a service at once. */
+ private static final int defaultMaxActiveJobsPerService =
ActivityManager.isLowRamDeviceStatic() ? 1 : 3;
- /** Amount of time a task is allowed to execute for before being considered timed-out. */
- private static final long EXECUTING_TIMESLICE_MILLIS = 5 * 60 * 1000;
- /** Amount of time the TaskManager will wait for a response from an app for a message. */
+ /** Amount of time a job is allowed to execute for before being considered timed-out. */
+ private static final long EXECUTING_TIMESLICE_MILLIS = 60 * 1000;
+ /** Amount of time the JobScheduler will wait for a response from an app for a message. */
private static final long OP_TIMEOUT_MILLIS = 8 * 1000;
/** String prefix for all wakelock names. */
- private static final String TM_WAKELOCK_PREFIX = "*task*/";
+ private static final String JS_WAKELOCK_PREFIX = "*job*/";
private static final String[] VERB_STRINGS = {
"VERB_STARTING", "VERB_EXECUTING", "VERB_STOPPING", "VERB_PENDING"
};
- // States that a task occupies while interacting with the client.
+ // States that a job occupies while interacting with the client.
static final int VERB_BINDING = 0;
static final int VERB_STARTING = 1;
static final int VERB_EXECUTING = 2;
@@ -75,94 +75,95 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
private static final int MSG_TIMEOUT = 0;
/** Received a callback from client. */
private static final int MSG_CALLBACK = 1;
- /** Run through list and start any ready tasks.*/
+ /** Run through list and start any ready jobs.*/
private static final int MSG_SERVICE_BOUND = 2;
- /** Cancel a task. */
+ /** Cancel a job. */
private static final int MSG_CANCEL = 3;
- /** Shutdown the Task. Used when the client crashes and we can't die gracefully.*/
+ /** Shutdown the job. Used when the client crashes and we can't die gracefully.*/
private static final int MSG_SHUTDOWN_EXECUTION = 4;
private final Handler mCallbackHandler;
- /** Make callbacks to {@link TaskManagerService} to inform on task completion status. */
- private final TaskCompletedListener mCompletedListener;
+ /** Make callbacks to {@link JobSchedulerService} to inform on job completion status. */
+ private final JobCompletedListener mCompletedListener;
/** Used for service binding, etc. */
private final Context mContext;
private PowerManager.WakeLock mWakeLock;
// Execution state.
- private TaskParams mParams;
+ private JobParameters mParams;
@VisibleForTesting
int mVerb;
private AtomicBoolean mCancelled = new AtomicBoolean();
- /** All the information maintained about the task currently being executed. */
- private TaskStatus mRunningTask;
+ /** All the information maintained about the job currently being executed. */
+ private JobStatus mRunningJob;
/** Binder to the client service. */
- ITaskService service;
+ IJobService service;
- private final Object mAvailableLock = new Object();
+ private final Object mLock = new Object();
/** Whether this context is free. */
- @GuardedBy("mAvailableLock")
+ @GuardedBy("mLock")
private boolean mAvailable;
+ /** Track start time. */
+ private long mExecutionStartTimeElapsed;
+ /** Track when job will timeout. */
+ private long mTimeoutElapsed;
- TaskServiceContext(TaskManagerService service, Looper looper) {
+ JobServiceContext(JobSchedulerService service, Looper looper) {
this(service.getContext(), service, looper);
}
@VisibleForTesting
- TaskServiceContext(Context context, TaskCompletedListener completedListener, Looper looper) {
+ JobServiceContext(Context context, JobCompletedListener completedListener, Looper looper) {
mContext = context;
- mCallbackHandler = new TaskServiceHandler(looper);
+ mCallbackHandler = new JobServiceHandler(looper);
mCompletedListener = completedListener;
+ mAvailable = true;
}
/**
- * Give a task to this context for execution. Callers must first check {@link #isAvailable()}
+ * Give a job to this context for execution. Callers must first check {@link #isAvailable()}
* to make sure this is a valid context.
- * @param ts The status of the task that we are going to run.
- * @return True if the task was accepted and is going to run.
+ * @param job The status of the job that we are going to run.
+ * @return True if the job is valid and is running. False if the job cannot be executed.
*/
- boolean executeRunnableTask(TaskStatus ts) {
- synchronized (mAvailableLock) {
+ boolean executeRunnableJob(JobStatus job) {
+ synchronized (mLock) {
if (!mAvailable) {
Slog.e(TAG, "Starting new runnable but context is unavailable > Error.");
return false;
}
- mAvailable = false;
- }
-
- final PowerManager pm =
- (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
- TM_WAKELOCK_PREFIX + ts.getServiceComponent().getPackageName());
- mWakeLock.setWorkSource(new WorkSource(ts.getUid()));
- mWakeLock.setReferenceCounted(false);
- mRunningTask = ts;
- mParams = new TaskParams(ts.getTaskId(), ts.getExtras(), this);
+ mRunningJob = job;
+ mParams = new JobParameters(job.getJobId(), job.getExtras(), this);
+ mExecutionStartTimeElapsed = SystemClock.elapsedRealtime();
- mVerb = VERB_BINDING;
- final Intent intent = new Intent().setComponent(ts.getServiceComponent());
- boolean binding = mContext.bindServiceAsUser(intent, this,
- Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND,
- new UserHandle(ts.getUserId()));
- if (!binding) {
- if (DEBUG) {
- Slog.d(TAG, ts.getServiceComponent().getShortClassName() + " unavailable.");
+ mVerb = VERB_BINDING;
+ final Intent intent = new Intent().setComponent(job.getServiceComponent());
+ boolean binding = mContext.bindServiceAsUser(intent, this,
+ Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND,
+ new UserHandle(job.getUserId()));
+ if (!binding) {
+ if (DEBUG) {
+ Slog.d(TAG, job.getServiceComponent().getShortClassName() + " unavailable.");
+ }
+ mRunningJob = null;
+ mParams = null;
+ mExecutionStartTimeElapsed = 0L;
+ return false;
}
- return false;
+ mAvailable = false;
+ return true;
}
-
- return true;
}
- /** Used externally to query the running task. Will return null if there is no task running. */
- TaskStatus getRunningTask() {
- return mRunningTask;
+ /** Used externally to query the running job. Will return null if there is no job running. */
+ JobStatus getRunningJob() {
+ return mRunningJob;
}
- /** Called externally when a task that was scheduled for execution should be cancelled. */
- void cancelExecutingTask() {
+ /** Called externally when a job that was scheduled for execution should be cancelled. */
+ void cancelExecutingJob() {
mCallbackHandler.obtainMessage(MSG_CANCEL).sendToTarget();
}
@@ -170,35 +171,43 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
* @return Whether this context is available to handle incoming work.
*/
boolean isAvailable() {
- synchronized (mAvailableLock) {
+ synchronized (mLock) {
return mAvailable;
}
}
+ long getExecutionStartTimeElapsed() {
+ return mExecutionStartTimeElapsed;
+ }
+
+ long getTimeoutElapsed() {
+ return mTimeoutElapsed;
+ }
+
@Override
- public void taskFinished(int taskId, boolean reschedule) {
+ public void jobFinished(int jobId, boolean reschedule) {
if (!verifyCallingUid()) {
return;
}
- mCallbackHandler.obtainMessage(MSG_CALLBACK, taskId, reschedule ? 1 : 0)
+ mCallbackHandler.obtainMessage(MSG_CALLBACK, jobId, reschedule ? 1 : 0)
.sendToTarget();
}
@Override
- public void acknowledgeStopMessage(int taskId, boolean reschedule) {
+ public void acknowledgeStopMessage(int jobId, boolean reschedule) {
if (!verifyCallingUid()) {
return;
}
- mCallbackHandler.obtainMessage(MSG_CALLBACK, taskId, reschedule ? 1 : 0)
+ mCallbackHandler.obtainMessage(MSG_CALLBACK, jobId, reschedule ? 1 : 0)
.sendToTarget();
}
@Override
- public void acknowledgeStartMessage(int taskId, boolean ongoing) {
+ public void acknowledgeStartMessage(int jobId, boolean ongoing) {
if (!verifyCallingUid()) {
return;
}
- mCallbackHandler.obtainMessage(MSG_CALLBACK, taskId, ongoing ? 1 : 0).sendToTarget();
+ mCallbackHandler.obtainMessage(MSG_CALLBACK, jobId, ongoing ? 1 : 0).sendToTarget();
}
/**
@@ -210,19 +219,25 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
- if (!name.equals(mRunningTask.getServiceComponent())) {
+ if (!name.equals(mRunningJob.getServiceComponent())) {
mCallbackHandler.obtainMessage(MSG_SHUTDOWN_EXECUTION).sendToTarget();
return;
}
- this.service = ITaskService.Stub.asInterface(service);
+ this.service = IJobService.Stub.asInterface(service);
// Remove all timeouts.
mCallbackHandler.removeMessages(MSG_TIMEOUT);
+ final PowerManager pm =
+ (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
+ JS_WAKELOCK_PREFIX + mRunningJob.getServiceComponent().getPackageName());
+ mWakeLock.setWorkSource(new WorkSource(mRunningJob.getUid()));
+ mWakeLock.setReferenceCounted(false);
mWakeLock.acquire();
mCallbackHandler.obtainMessage(MSG_SERVICE_BOUND).sendToTarget();
}
/**
- * If the client service crashes we reschedule this task and clean up.
+ * If the client service crashes we reschedule this job and clean up.
* @param name The concrete component name of the service whose
*/
@Override
@@ -236,7 +251,7 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
* @return True if the binder calling is coming from the client we expect.
*/
private boolean verifyCallingUid() {
- if (mRunningTask == null || Binder.getCallingUid() != mRunningTask.getUid()) {
+ if (mRunningJob == null || Binder.getCallingUid() != mRunningJob.getUid()) {
if (DEBUG) {
Slog.d(TAG, "Stale callback received, ignoring.");
}
@@ -246,12 +261,12 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
}
/**
- * Handles the lifecycle of the TaskService binding/callbacks, etc. The convention within this
+ * Handles the lifecycle of the JobService binding/callbacks, etc. The convention within this
* class is to append 'H' to each function name that can only be called on this handler. This
* isn't strictly necessary because all of these functions are private, but helps clarity.
*/
- private class TaskServiceHandler extends Handler {
- TaskServiceHandler(Looper looper) {
+ private class JobServiceHandler extends Handler {
+ JobServiceHandler(Looper looper) {
super(looper);
}
@@ -263,7 +278,8 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
break;
case MSG_CALLBACK:
if (DEBUG) {
- Slog.d(TAG, "MSG_CALLBACK of : " + mRunningTask);
+ Slog.d(TAG, "MSG_CALLBACK of : " + mRunningJob + " v:" +
+ VERB_STRINGS[mVerb]);
}
removeMessages(MSG_TIMEOUT);
@@ -276,7 +292,7 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
handleFinishedH(reschedule);
} else {
if (DEBUG) {
- Slog.d(TAG, "Unrecognised callback: " + mRunningTask);
+ Slog.d(TAG, "Unrecognised callback: " + mRunningJob);
}
}
break;
@@ -287,41 +303,42 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
handleOpTimeoutH();
break;
case MSG_SHUTDOWN_EXECUTION:
- closeAndCleanupTaskH(true /* needsReschedule */);
+ closeAndCleanupJobH(true /* needsReschedule */);
+ break;
default:
Log.e(TAG, "Unrecognised message: " + message);
}
}
- /** Start the task on the service. */
+ /** Start the job on the service. */
private void handleServiceBoundH() {
if (mVerb != VERB_BINDING) {
- Slog.e(TAG, "Sending onStartTask for a task that isn't pending. "
+ Slog.e(TAG, "Sending onStartJob for a job that isn't pending. "
+ VERB_STRINGS[mVerb]);
- closeAndCleanupTaskH(false /* reschedule */);
+ closeAndCleanupJobH(false /* reschedule */);
return;
}
if (mCancelled.get()) {
if (DEBUG) {
- Slog.d(TAG, "Task cancelled while waiting for bind to complete. "
- + mRunningTask);
+ Slog.d(TAG, "Job cancelled while waiting for bind to complete. "
+ + mRunningJob);
}
- closeAndCleanupTaskH(true /* reschedule */);
+ closeAndCleanupJobH(true /* reschedule */);
return;
}
try {
mVerb = VERB_STARTING;
scheduleOpTimeOut();
- service.startTask(mParams);
+ service.startJob(mParams);
} catch (RemoteException e) {
Log.e(TAG, "Error sending onStart message to '" +
- mRunningTask.getServiceComponent().getShortClassName() + "' ", e);
+ mRunningJob.getServiceComponent().getShortClassName() + "' ", e);
}
}
/**
* State behaviours.
- * VERB_STARTING -> Successful start, change task to VERB_EXECUTING and post timeout.
+ * VERB_STARTING -> Successful start, change job to VERB_EXECUTING and post timeout.
* _PENDING -> Error
* _EXECUTING -> Error
* _STOPPING -> Error
@@ -331,7 +348,7 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
case VERB_STARTING:
mVerb = VERB_EXECUTING;
if (!workOngoing) {
- // Task is finished already so fast-forward to handleFinished.
+ // Job is finished already so fast-forward to handleFinished.
handleFinishedH(false);
return;
}
@@ -343,14 +360,14 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
scheduleOpTimeOut();
break;
default:
- Log.e(TAG, "Handling started task but task wasn't starting! Was "
+ Log.e(TAG, "Handling started job but job wasn't starting! Was "
+ VERB_STRINGS[mVerb] + ".");
return;
}
}
/**
- * VERB_EXECUTING -> Client called taskFinished(), clean up and notify done.
+ * VERB_EXECUTING -> Client called jobFinished(), clean up and notify done.
* _STOPPING -> Successful finish, clean up and notify done.
* _STARTING -> Error
* _PENDING -> Error
@@ -359,20 +376,20 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
switch (mVerb) {
case VERB_EXECUTING:
case VERB_STOPPING:
- closeAndCleanupTaskH(reschedule);
+ closeAndCleanupJobH(reschedule);
break;
default:
- Slog.e(TAG, "Got an execution complete message for a task that wasn't being" +
+ Slog.e(TAG, "Got an execution complete message for a job that wasn't being" +
"executed. Was " + VERB_STRINGS[mVerb] + ".");
}
}
/**
- * A task can be in various states when a cancel request comes in:
+ * A job can be in various states when a cancel request comes in:
* VERB_BINDING -> Cancelled before bind completed. Mark as cancelled and wait for
* {@link #onServiceConnected(android.content.ComponentName, android.os.IBinder)}
* _STARTING -> Mark as cancelled and wait for
- * {@link TaskServiceContext#acknowledgeStartMessage(int, boolean)}
+ * {@link JobServiceContext#acknowledgeStartMessage(int, boolean)}
* _EXECUTING -> call {@link #sendStopMessageH}}.
* _ENDING -> No point in doing anything here, so we ignore.
*/
@@ -389,48 +406,48 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
// Nada.
break;
default:
- Slog.e(TAG, "Cancelling a task without a valid verb: " + mVerb);
+ Slog.e(TAG, "Cancelling a job without a valid verb: " + mVerb);
break;
}
}
/** Process MSG_TIMEOUT here. */
private void handleOpTimeoutH() {
- if (Log.isLoggable(TaskManagerService.TAG, Log.DEBUG)) {
+ if (Log.isLoggable(JobSchedulerService.TAG, Log.DEBUG)) {
Log.d(TAG, "MSG_TIMEOUT of " +
- mRunningTask.getServiceComponent().getShortClassName() + " : "
- + mParams.getTaskId());
+ mRunningJob.getServiceComponent().getShortClassName() + " : "
+ + mParams.getJobId());
}
- final int taskId = mParams.getTaskId();
+ final int jobId = mParams.getJobId();
switch (mVerb) {
case VERB_STARTING:
// Client unresponsive - wedged or failed to respond in time. We don't really
- // know what happened so let's log it and notify the TaskManager
+ // know what happened so let's log it and notify the JobScheduler
// FINISHED/NO-RETRY.
- Log.e(TAG, "No response from client for onStartTask '" +
- mRunningTask.getServiceComponent().getShortClassName() + "' tId: "
- + taskId);
- closeAndCleanupTaskH(false /* needsReschedule */);
+ Log.e(TAG, "No response from client for onStartJob '" +
+ mRunningJob.getServiceComponent().getShortClassName() + "' tId: "
+ + jobId);
+ closeAndCleanupJobH(false /* needsReschedule */);
break;
case VERB_STOPPING:
- // At least we got somewhere, so fail but ask the TaskManager to reschedule.
- Log.e(TAG, "No response from client for onStopTask, '" +
- mRunningTask.getServiceComponent().getShortClassName() + "' tId: "
- + taskId);
- closeAndCleanupTaskH(true /* needsReschedule */);
+ // At least we got somewhere, so fail but ask the JobScheduler to reschedule.
+ Log.e(TAG, "No response from client for onStopJob, '" +
+ mRunningJob.getServiceComponent().getShortClassName() + "' tId: "
+ + jobId);
+ closeAndCleanupJobH(true /* needsReschedule */);
break;
case VERB_EXECUTING:
// Not an error - client ran out of time.
- Log.i(TAG, "Client timed out while executing (no taskFinished received)." +
- " Reporting failure and asking for reschedule. " +
- mRunningTask.getServiceComponent().getShortClassName() + "' tId: "
- + taskId);
+ Log.i(TAG, "Client timed out while executing (no jobFinished received)." +
+ " sending onStop. " +
+ mRunningJob.getServiceComponent().getShortClassName() + "' tId: "
+ + jobId);
sendStopMessageH();
break;
default:
- Log.e(TAG, "Handling timeout for an unknown active task state: "
- + mRunningTask);
+ Log.e(TAG, "Handling timeout for an unknown active job state: "
+ + mRunningJob);
return;
}
}
@@ -442,41 +459,39 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
private void sendStopMessageH() {
mCallbackHandler.removeMessages(MSG_TIMEOUT);
if (mVerb != VERB_EXECUTING) {
- Log.e(TAG, "Sending onStopTask for a task that isn't started. " + mRunningTask);
- closeAndCleanupTaskH(false /* reschedule */);
+ Log.e(TAG, "Sending onStopJob for a job that isn't started. " + mRunningJob);
+ closeAndCleanupJobH(false /* reschedule */);
return;
}
try {
mVerb = VERB_STOPPING;
scheduleOpTimeOut();
- service.stopTask(mParams);
+ service.stopJob(mParams);
} catch (RemoteException e) {
- Log.e(TAG, "Error sending onStopTask to client.", e);
- closeAndCleanupTaskH(false);
+ Log.e(TAG, "Error sending onStopJob to client.", e);
+ closeAndCleanupJobH(false /* reschedule */);
}
}
/**
- * The provided task has finished, either by calling
- * {@link android.app.task.TaskService#taskFinished(android.app.task.TaskParams, boolean)}
+ * The provided job has finished, either by calling
+ * {@link android.app.job.JobService#jobFinished(android.app.job.JobParameters, boolean)}
* or from acknowledging the stop message we sent. Either way, we're done tracking it and
* we want to clean up internally.
*/
- private void closeAndCleanupTaskH(boolean reschedule) {
+ private void closeAndCleanupJobH(boolean reschedule) {
removeMessages(MSG_TIMEOUT);
- mWakeLock.release();
- mContext.unbindService(TaskServiceContext.this);
- mWakeLock = null;
-
- mRunningTask = null;
- mParams = null;
- mVerb = -1;
- mCancelled.set(false);
-
- service = null;
-
- mCompletedListener.onTaskCompleted(mRunningTask, reschedule);
- synchronized (mAvailableLock) {
+ synchronized (mLock) {
+ mWakeLock.release();
+ mContext.unbindService(JobServiceContext.this);
+ mCompletedListener.onJobCompleted(mRunningJob, reschedule);
+
+ mWakeLock = null;
+ mRunningJob = null;
+ mParams = null;
+ mVerb = -1;
+ mCancelled.set(false);
+ service = null;
mAvailable = true;
}
}
@@ -493,11 +508,12 @@ public class TaskServiceContext extends ITaskCallback.Stub implements ServiceCon
EXECUTING_TIMESLICE_MILLIS : OP_TIMEOUT_MILLIS;
if (DEBUG) {
Slog.d(TAG, "Scheduling time out for '" +
- mRunningTask.getServiceComponent().getShortClassName() + "' tId: " +
- mParams.getTaskId() + ", in " + (timeoutMillis / 1000) + " s");
+ mRunningJob.getServiceComponent().getShortClassName() + "' tId: " +
+ mParams.getJobId() + ", in " + (timeoutMillis / 1000) + " s");
}
Message m = mCallbackHandler.obtainMessage(MSG_TIMEOUT);
mCallbackHandler.sendMessageDelayed(m, timeoutMillis);
+ mTimeoutElapsed = SystemClock.elapsedRealtime() + timeoutMillis;
}
}
}
diff --git a/services/core/java/com/android/server/task/TaskStore.java b/services/core/java/com/android/server/job/JobStore.java
index 6bb00b1fac42..5f22b346124e 100644
--- a/services/core/java/com/android/server/task/TaskStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -14,15 +14,16 @@
* limitations under the License
*/
-package com.android.server.task;
+package com.android.server.job;
import android.content.ComponentName;
-import android.app.task.Task;
+import android.app.job.JobInfo;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.PersistableBundle;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.util.AtomicFile;
import android.util.ArraySet;
import android.util.Pair;
@@ -32,7 +33,7 @@ import android.util.Xml;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FastXmlSerializer;
import com.android.server.IoThread;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.controllers.JobStatus;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -49,106 +50,113 @@ import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
/**
- * Maintain a list of classes, and accessor methods/logic for these tasks.
+ * Maintain a list of classes, and accessor methods/logic for these jobs.
* This class offers the following functionality:
- * - When a task is added, it will determine if the task requirements have changed (update) and
+ * - When a job is added, it will determine if the job requirements have changed (update) and
* whether the controllers need to be updated.
- * - Persists Tasks, figures out when to to rewrite the Task to disk.
- * - Is threadsafe.
- * - Handles rescheduling of tasks.
- * - When a periodic task is executed and must be re-added.
- * - When a task fails and the client requests that it be retried with backoff.
+ * - Persists JobInfos, figures out when to to rewrite the JobInfo to disk.
+ * - Handles rescheduling of jobs.
+ * - When a periodic job is executed and must be re-added.
+ * - When a job fails and the client requests that it be retried with backoff.
* - This class <strong>is not</strong> thread-safe.
*
* Note on locking:
* All callers to this class must <strong>lock on the class object they are calling</strong>.
- * This is important b/c {@link com.android.server.task.TaskStore.WriteTasksMapToDiskRunnable}
- * and {@link com.android.server.task.TaskStore.ReadTaskMapFromDiskRunnable} lock on that
+ * This is important b/c {@link com.android.server.job.JobStore.WriteJobsMapToDiskRunnable}
+ * and {@link com.android.server.job.JobStore.ReadJobMapFromDiskRunnable} lock on that
* object.
*/
-public class TaskStore {
- private static final String TAG = "TaskManagerStore";
- private static final boolean DEBUG = TaskManagerService.DEBUG;
+public class JobStore {
+ private static final String TAG = "JobStore";
+ private static final boolean DEBUG = JobSchedulerService.DEBUG;
/** Threshold to adjust how often we want to write to the db. */
private static final int MAX_OPS_BEFORE_WRITE = 1;
- final ArraySet<TaskStatus> mTasksSet;
+ final ArraySet<JobStatus> mJobSet;
final Context mContext;
private int mDirtyOperations;
private static final Object sSingletonLock = new Object();
- private final AtomicFile mTasksFile;
+ private final AtomicFile mJobsFile;
/** Handler backed by IoThread for writing to disk. */
private final Handler mIoHandler = IoThread.getHandler();
- private static TaskStore sSingleton;
+ private static JobStore sSingleton;
- /** Used by the {@Link TaskManagerService} to instantiate the TaskStore. */
- static TaskStore initAndGet(TaskManagerService taskManagerService) {
+ /** Used by the {@link JobSchedulerService} to instantiate the JobStore. */
+ static JobStore initAndGet(JobSchedulerService jobManagerService) {
synchronized (sSingletonLock) {
if (sSingleton == null) {
- sSingleton = new TaskStore(taskManagerService.getContext(),
- Environment.getDataDirectory(), taskManagerService);
+ sSingleton = new JobStore(jobManagerService.getContext(),
+ Environment.getDataDirectory(), jobManagerService);
}
return sSingleton;
}
}
@VisibleForTesting
- public static TaskStore initAndGetForTesting(Context context, File dataDir,
- TaskMapReadFinishedListener callback) {
- return new TaskStore(context, dataDir, callback);
+ public static JobStore initAndGetForTesting(Context context, File dataDir,
+ JobMapReadFinishedListener callback) {
+ return new JobStore(context, dataDir, callback);
}
- private TaskStore(Context context, File dataDir, TaskMapReadFinishedListener callback) {
+ private JobStore(Context context, File dataDir, JobMapReadFinishedListener callback) {
mContext = context;
mDirtyOperations = 0;
File systemDir = new File(dataDir, "system");
- File taskDir = new File(systemDir, "task");
- taskDir.mkdirs();
- mTasksFile = new AtomicFile(new File(taskDir, "tasks.xml"));
+ File jobDir = new File(systemDir, "job");
+ jobDir.mkdirs();
+ mJobsFile = new AtomicFile(new File(jobDir, "jobs.xml"));
- mTasksSet = new ArraySet<TaskStatus>();
+ mJobSet = new ArraySet<JobStatus>();
- readTaskMapFromDiskAsync(callback);
+ readJobMapFromDiskAsync(callback);
}
/**
- * Add a task to the master list, persisting it if necessary. If the TaskStatus already exists,
+ * Add a job to the master list, persisting it if necessary. If the JobStatus already exists,
* it will be replaced.
- * @param taskStatus Task to add.
- * @return Whether or not an equivalent TaskStatus was replaced by this operation.
+ * @param jobStatus Job to add.
+ * @return Whether or not an equivalent JobStatus was replaced by this operation.
*/
- public boolean add(TaskStatus taskStatus) {
- boolean replaced = mTasksSet.remove(taskStatus);
- mTasksSet.add(taskStatus);
- if (taskStatus.isPersisted()) {
+ public boolean add(JobStatus jobStatus) {
+ boolean replaced = mJobSet.remove(jobStatus);
+ mJobSet.add(jobStatus);
+ if (jobStatus.isPersisted()) {
maybeWriteStatusToDiskAsync();
}
+ if (DEBUG) {
+ Slog.d(TAG, "Added job status to store: " + jobStatus);
+ }
return replaced;
}
/**
- * Whether this taskStatus object already exists in the TaskStore.
+ * Whether this jobStatus object already exists in the JobStore.
*/
- public boolean contains(TaskStatus taskStatus) {
- return mTasksSet.contains(taskStatus);
+ public boolean containsJobIdForUid(int jobId, int uId) {
+ for (JobStatus ts : mJobSet) {
+ if (ts.getUid() == uId && ts.getJobId() == jobId) {
+ return true;
+ }
+ }
+ return false;
}
public int size() {
- return mTasksSet.size();
+ return mJobSet.size();
}
/**
- * Remove the provided task. Will also delete the task if it was persisted.
- * @return Whether or not the task existed to be removed.
+ * Remove the provided job. Will also delete the job if it was persisted.
+ * @return Whether or not the job existed to be removed.
*/
- public boolean remove(TaskStatus taskStatus) {
- boolean removed = mTasksSet.remove(taskStatus);
+ public boolean remove(JobStatus jobStatus) {
+ boolean removed = mJobSet.remove(jobStatus);
if (!removed) {
if (DEBUG) {
- Slog.d(TAG, "Couldn't remove task: didn't exist: " + taskStatus);
+ Slog.d(TAG, "Couldn't remove job: didn't exist: " + jobStatus);
}
return false;
}
@@ -158,65 +166,64 @@ public class TaskStore {
@VisibleForTesting
public void clear() {
- mTasksSet.clear();
+ mJobSet.clear();
maybeWriteStatusToDiskAsync();
}
+ public List<JobStatus> getJobsByUser(int userHandle) {
+ List<JobStatus> matchingJobs = new ArrayList<JobStatus>();
+ Iterator<JobStatus> it = mJobSet.iterator();
+ while (it.hasNext()) {
+ JobStatus ts = it.next();
+ if (UserHandle.getUserId(ts.getUid()) == userHandle) {
+ matchingJobs.add(ts);
+ }
+ }
+ return matchingJobs;
+ }
+
/**
- * Removes all TaskStatus objects for a given uid from the master list. Note that it is
- * possible to remove a task that is pending/active. This operation will succeed, and the
- * removal will take effect when the task has completed executing.
* @param uid Uid of the requesting app.
- * @return True if at least one task was removed, false if nothing matching the provided uId
- * was found.
+ * @return All JobStatus objects for a given uid from the master list.
*/
- public boolean removeAllByUid(int uid) {
- Iterator<TaskStatus> it = mTasksSet.iterator();
+ public List<JobStatus> getJobsByUid(int uid) {
+ List<JobStatus> matchingJobs = new ArrayList<JobStatus>();
+ Iterator<JobStatus> it = mJobSet.iterator();
while (it.hasNext()) {
- TaskStatus ts = it.next();
+ JobStatus ts = it.next();
if (ts.getUid() == uid) {
- it.remove();
- maybeWriteStatusToDiskAsync();
- return true;
+ matchingJobs.add(ts);
}
}
- return false;
+ return matchingJobs;
}
/**
- * Remove the TaskStatus that matches the provided uId and taskId. Note that it is possible
- * to remove a task that is pending/active. This operation will succeed, and the removal will
- * take effect when the task has completed executing.
* @param uid Uid of the requesting app.
- * @param taskId Task id, specified at schedule-time.
- * @return true if a removal occurred, false if the provided parameters didn't match anything.
+ * @param jobId Job id, specified at schedule-time.
+ * @return the JobStatus that matches the provided uId and jobId, or null if none found.
*/
- public boolean remove(int uid, int taskId) {
- boolean changed = false;
- Iterator<TaskStatus> it = mTasksSet.iterator();
+ public JobStatus getJobByUidAndJobId(int uid, int jobId) {
+ Iterator<JobStatus> it = mJobSet.iterator();
while (it.hasNext()) {
- TaskStatus ts = it.next();
- if (ts.getUid() == uid && ts.getTaskId() == taskId) {
- it.remove();
- changed = true;
+ JobStatus ts = it.next();
+ if (ts.getUid() == uid && ts.getJobId() == jobId) {
+ return ts;
}
}
- if (changed) {
- maybeWriteStatusToDiskAsync();
- }
- return changed;
+ return null;
}
/**
- * @return The live array of TaskStatus objects.
+ * @return The live array of JobStatus objects.
*/
- public ArraySet<TaskStatus> getTasks() {
- return mTasksSet;
+ public ArraySet<JobStatus> getJobs() {
+ return mJobSet;
}
/** Version of the db schema. */
- private static final int TASKS_FILE_VERSION = 0;
- /** Tag corresponds to constraints this task needs. */
+ private static final int JOBS_FILE_VERSION = 0;
+ /** Tag corresponds to constraints this job needs. */
private static final String XML_TAG_PARAMS_CONSTRAINTS = "constraints";
/** Tag corresponds to execution parameters. */
private static final String XML_TAG_PERIODIC = "periodic";
@@ -224,7 +231,7 @@ public class TaskStore {
private static final String XML_TAG_EXTRAS = "extras";
/**
- * Every time the state changes we write all the tasks in one swathe, instead of trying to
+ * Every time the state changes we write all the jobs in one swath, instead of trying to
* track incremental changes.
* @return Whether the operation was successful. This will only fail for e.g. if the system is
* low on storage. If this happens, we continue as normal
@@ -233,38 +240,38 @@ public class TaskStore {
mDirtyOperations++;
if (mDirtyOperations >= MAX_OPS_BEFORE_WRITE) {
if (DEBUG) {
- Slog.v(TAG, "Writing tasks to disk.");
+ Slog.v(TAG, "Writing jobs to disk.");
}
- mIoHandler.post(new WriteTasksMapToDiskRunnable());
+ mIoHandler.post(new WriteJobsMapToDiskRunnable());
}
}
- private void readTaskMapFromDiskAsync(TaskMapReadFinishedListener callback) {
- mIoHandler.post(new ReadTaskMapFromDiskRunnable(callback));
+ private void readJobMapFromDiskAsync(JobMapReadFinishedListener callback) {
+ mIoHandler.post(new ReadJobMapFromDiskRunnable(callback));
}
- public void readTaskMapFromDisk(TaskMapReadFinishedListener callback) {
- new ReadTaskMapFromDiskRunnable(callback).run();
+ public void readJobMapFromDisk(JobMapReadFinishedListener callback) {
+ new ReadJobMapFromDiskRunnable(callback).run();
}
/**
- * Runnable that writes {@link #mTasksSet} out to xml.
- * NOTE: This Runnable locks on TaskStore.this
+ * Runnable that writes {@link #mJobSet} out to xml.
+ * NOTE: This Runnable locks on JobStore.this
*/
- private class WriteTasksMapToDiskRunnable implements Runnable {
+ private class WriteJobsMapToDiskRunnable implements Runnable {
@Override
public void run() {
final long startElapsed = SystemClock.elapsedRealtime();
- synchronized (TaskStore.this) {
- writeTasksMapImpl();
+ synchronized (JobStore.this) {
+ writeJobsMapImpl();
}
- if (TaskManagerService.DEBUG) {
+ if (JobSchedulerService.DEBUG) {
Slog.v(TAG, "Finished writing, took " + (SystemClock.elapsedRealtime()
- startElapsed) + "ms");
}
}
- private void writeTasksMapImpl() {
+ private void writeJobsMapImpl() {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmlSerializer out = new FastXmlSerializer();
@@ -272,31 +279,31 @@ public class TaskStore {
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
- out.startTag(null, "task-info");
- out.attribute(null, "version", Integer.toString(TASKS_FILE_VERSION));
- for (int i = 0; i < mTasksSet.size(); i++) {
- final TaskStatus taskStatus = mTasksSet.valueAt(i);
+ out.startTag(null, "job-info");
+ out.attribute(null, "version", Integer.toString(JOBS_FILE_VERSION));
+ for (int i = 0; i < mJobSet.size(); i++) {
+ final JobStatus jobStatus = mJobSet.valueAt(i);
if (DEBUG) {
- Slog.d(TAG, "Saving task " + taskStatus.getTaskId());
+ Slog.d(TAG, "Saving job " + jobStatus.getJobId());
}
- out.startTag(null, "task");
- addIdentifierAttributesToTaskTag(out, taskStatus);
- writeConstraintsToXml(out, taskStatus);
- writeExecutionCriteriaToXml(out, taskStatus);
- writeBundleToXml(taskStatus.getExtras(), out);
- out.endTag(null, "task");
+ out.startTag(null, "job");
+ addIdentifierAttributesToJobTag(out, jobStatus);
+ writeConstraintsToXml(out, jobStatus);
+ writeExecutionCriteriaToXml(out, jobStatus);
+ writeBundleToXml(jobStatus.getExtras(), out);
+ out.endTag(null, "job");
}
- out.endTag(null, "task-info");
+ out.endTag(null, "job-info");
out.endDocument();
// Write out to disk in one fell sweep.
- FileOutputStream fos = mTasksFile.startWrite();
+ FileOutputStream fos = mJobsFile.startWrite();
fos.write(baos.toByteArray());
- mTasksFile.finishWrite(fos);
+ mJobsFile.finishWrite(fos);
mDirtyOperations = 0;
} catch (IOException e) {
if (DEBUG) {
- Slog.v(TAG, "Error writing out task data.", e);
+ Slog.v(TAG, "Error writing out job data.", e);
}
} catch (XmlPullParserException e) {
if (DEBUG) {
@@ -305,13 +312,13 @@ public class TaskStore {
}
}
- /** Write out a tag with data comprising the required fields of this task and its client. */
- private void addIdentifierAttributesToTaskTag(XmlSerializer out, TaskStatus taskStatus)
+ /** Write out a tag with data comprising the required fields of this job and its client. */
+ private void addIdentifierAttributesToJobTag(XmlSerializer out, JobStatus jobStatus)
throws IOException {
- out.attribute(null, "taskid", Integer.toString(taskStatus.getTaskId()));
- out.attribute(null, "package", taskStatus.getServiceComponent().getPackageName());
- out.attribute(null, "class", taskStatus.getServiceComponent().getClassName());
- out.attribute(null, "uid", Integer.toString(taskStatus.getUid()));
+ out.attribute(null, "jobid", Integer.toString(jobStatus.getJobId()));
+ out.attribute(null, "package", jobStatus.getServiceComponent().getPackageName());
+ out.attribute(null, "class", jobStatus.getServiceComponent().getClassName());
+ out.attribute(null, "uid", Integer.toString(jobStatus.getUid()));
}
private void writeBundleToXml(PersistableBundle extras, XmlSerializer out)
@@ -321,57 +328,57 @@ public class TaskStore {
out.endTag(null, XML_TAG_EXTRAS);
}
/**
- * Write out a tag with data identifying this tasks constraints. If the constraint isn't here
+ * Write out a tag with data identifying this job's constraints. If the constraint isn't here
* it doesn't apply.
*/
- private void writeConstraintsToXml(XmlSerializer out, TaskStatus taskStatus) throws IOException {
+ private void writeConstraintsToXml(XmlSerializer out, JobStatus jobStatus) throws IOException {
out.startTag(null, XML_TAG_PARAMS_CONSTRAINTS);
- if (taskStatus.hasMeteredConstraint()) {
+ if (jobStatus.hasUnmeteredConstraint()) {
out.attribute(null, "unmetered", Boolean.toString(true));
}
- if (taskStatus.hasConnectivityConstraint()) {
+ if (jobStatus.hasConnectivityConstraint()) {
out.attribute(null, "connectivity", Boolean.toString(true));
}
- if (taskStatus.hasIdleConstraint()) {
+ if (jobStatus.hasIdleConstraint()) {
out.attribute(null, "idle", Boolean.toString(true));
}
- if (taskStatus.hasChargingConstraint()) {
+ if (jobStatus.hasChargingConstraint()) {
out.attribute(null, "charging", Boolean.toString(true));
}
out.endTag(null, XML_TAG_PARAMS_CONSTRAINTS);
}
- private void writeExecutionCriteriaToXml(XmlSerializer out, TaskStatus taskStatus)
+ private void writeExecutionCriteriaToXml(XmlSerializer out, JobStatus jobStatus)
throws IOException {
- final Task task = taskStatus.getTask();
- if (taskStatus.getTask().isPeriodic()) {
+ final JobInfo job = jobStatus.getJob();
+ if (jobStatus.getJob().isPeriodic()) {
out.startTag(null, XML_TAG_PERIODIC);
- out.attribute(null, "period", Long.toString(task.getIntervalMillis()));
+ out.attribute(null, "period", Long.toString(job.getIntervalMillis()));
} else {
out.startTag(null, XML_TAG_ONEOFF);
}
- if (taskStatus.hasDeadlineConstraint()) {
+ if (jobStatus.hasDeadlineConstraint()) {
// Wall clock deadline.
final long deadlineWallclock = System.currentTimeMillis() +
- (taskStatus.getLatestRunTimeElapsed() - SystemClock.elapsedRealtime());
+ (jobStatus.getLatestRunTimeElapsed() - SystemClock.elapsedRealtime());
out.attribute(null, "deadline", Long.toString(deadlineWallclock));
}
- if (taskStatus.hasTimingDelayConstraint()) {
+ if (jobStatus.hasTimingDelayConstraint()) {
final long delayWallclock = System.currentTimeMillis() +
- (taskStatus.getEarliestRunTime() - SystemClock.elapsedRealtime());
+ (jobStatus.getEarliestRunTime() - SystemClock.elapsedRealtime());
out.attribute(null, "delay", Long.toString(delayWallclock));
}
// Only write out back-off policy if it differs from the default.
- // This also helps the case where the task is idle -> these aren't allowed to specify
+ // This also helps the case where the job is idle -> these aren't allowed to specify
// back-off.
- if (taskStatus.getTask().getInitialBackoffMillis() != Task.DEFAULT_INITIAL_BACKOFF_MILLIS
- || taskStatus.getTask().getBackoffPolicy() != Task.DEFAULT_BACKOFF_POLICY) {
- out.attribute(null, "backoff-policy", Integer.toString(task.getBackoffPolicy()));
- out.attribute(null, "initial-backoff", Long.toString(task.getInitialBackoffMillis()));
+ if (jobStatus.getJob().getInitialBackoffMillis() != JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS
+ || jobStatus.getJob().getBackoffPolicy() != JobInfo.DEFAULT_BACKOFF_POLICY) {
+ out.attribute(null, "backoff-policy", Integer.toString(job.getBackoffPolicy()));
+ out.attribute(null, "initial-backoff", Long.toString(job.getInitialBackoffMillis()));
}
- if (task.isPeriodic()) {
+ if (job.isPeriodic()) {
out.endTag(null, XML_TAG_PERIODIC);
} else {
out.endTag(null, XML_TAG_ONEOFF);
@@ -380,42 +387,43 @@ public class TaskStore {
}
/**
- * Runnable that reads list of persisted task from xml.
- * NOTE: This Runnable locks on TaskStore.this
+ * Runnable that reads list of persisted job from xml.
+ * NOTE: This Runnable locks on JobStore.this
*/
- private class ReadTaskMapFromDiskRunnable implements Runnable {
- private TaskMapReadFinishedListener mCallback;
- public ReadTaskMapFromDiskRunnable(TaskMapReadFinishedListener callback) {
+ private class ReadJobMapFromDiskRunnable implements Runnable {
+ private JobMapReadFinishedListener mCallback;
+ public ReadJobMapFromDiskRunnable(JobMapReadFinishedListener callback) {
mCallback = callback;
}
@Override
public void run() {
try {
- List<TaskStatus> tasks;
- synchronized (TaskStore.this) {
- tasks = readTaskMapImpl();
+ List<JobStatus> jobs;
+ FileInputStream fis = mJobsFile.openRead();
+ synchronized (JobStore.this) {
+ jobs = readJobMapImpl(fis);
}
- if (tasks != null) {
- mCallback.onTaskMapReadFinished(tasks);
+ fis.close();
+ if (jobs != null) {
+ mCallback.onJobMapReadFinished(jobs);
}
} catch (FileNotFoundException e) {
- if (TaskManagerService.DEBUG) {
- Slog.d(TAG, "Could not find tasks file, probably there was nothing to load.");
+ if (JobSchedulerService.DEBUG) {
+ Slog.d(TAG, "Could not find jobs file, probably there was nothing to load.");
}
} catch (XmlPullParserException e) {
- if (TaskManagerService.DEBUG) {
+ if (JobSchedulerService.DEBUG) {
Slog.d(TAG, "Error parsing xml.", e);
}
} catch (IOException e) {
- if (TaskManagerService.DEBUG) {
+ if (JobSchedulerService.DEBUG) {
Slog.d(TAG, "Error parsing xml.", e);
}
}
}
- private List<TaskStatus> readTaskMapImpl() throws XmlPullParserException, IOException {
- FileInputStream fis = mTasksFile.openRead();
+ private List<JobStatus> readJobMapImpl(FileInputStream fis) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fis, null);
@@ -427,66 +435,66 @@ public class TaskStore {
}
if (eventType == XmlPullParser.END_DOCUMENT) {
if (DEBUG) {
- Slog.d(TAG, "No persisted tasks.");
+ Slog.d(TAG, "No persisted jobs.");
}
return null;
}
String tagName = parser.getName();
- if ("task-info".equals(tagName)) {
- final List<TaskStatus> tasks = new ArrayList<TaskStatus>();
+ if ("job-info".equals(tagName)) {
+ final List<JobStatus> jobs = new ArrayList<JobStatus>();
// Read in version info.
try {
int version = Integer.valueOf(parser.getAttributeValue(null, "version"));
- if (version != TASKS_FILE_VERSION) {
- Slog.d(TAG, "Invalid version number, aborting tasks file read.");
+ if (version != JOBS_FILE_VERSION) {
+ Slog.d(TAG, "Invalid version number, aborting jobs file read.");
return null;
}
} catch (NumberFormatException e) {
- Slog.e(TAG, "Invalid version number, aborting tasks file read.");
+ Slog.e(TAG, "Invalid version number, aborting jobs file read.");
return null;
}
eventType = parser.next();
do {
- // Read each <task/>
+ // Read each <job/>
if (eventType == XmlPullParser.START_TAG) {
tagName = parser.getName();
- // Start reading task.
- if ("task".equals(tagName)) {
- TaskStatus persistedTask = restoreTaskFromXml(parser);
- if (persistedTask != null) {
+ // Start reading job.
+ if ("job".equals(tagName)) {
+ JobStatus persistedJob = restoreJobFromXml(parser);
+ if (persistedJob != null) {
if (DEBUG) {
- Slog.d(TAG, "Read out " + persistedTask);
+ Slog.d(TAG, "Read out " + persistedJob);
}
- tasks.add(persistedTask);
+ jobs.add(persistedJob);
} else {
- Slog.d(TAG, "Error reading task from file.");
+ Slog.d(TAG, "Error reading job from file.");
}
}
}
eventType = parser.next();
} while (eventType != XmlPullParser.END_DOCUMENT);
- return tasks;
+ return jobs;
}
return null;
}
/**
- * @param parser Xml parser at the beginning of a "<task/>" tag. The next "parser.next()" call
- * will take the parser into the body of the task tag.
- * @return Newly instantiated task holding all the information we just read out of the xml tag.
+ * @param parser Xml parser at the beginning of a "<job/>" tag. The next "parser.next()" call
+ * will take the parser into the body of the job tag.
+ * @return Newly instantiated job holding all the information we just read out of the xml tag.
*/
- private TaskStatus restoreTaskFromXml(XmlPullParser parser) throws XmlPullParserException,
+ private JobStatus restoreJobFromXml(XmlPullParser parser) throws XmlPullParserException,
IOException {
- Task.Builder taskBuilder;
+ JobInfo.Builder jobBuilder;
int uid;
- // Read out task identifier attributes.
+ // Read out job identifier attributes.
try {
- taskBuilder = buildBuilderFromXml(parser);
+ jobBuilder = buildBuilderFromXml(parser);
uid = Integer.valueOf(parser.getAttributeValue(null, "uid"));
} catch (NumberFormatException e) {
- Slog.e(TAG, "Error parsing task's required fields, skipping");
+ Slog.e(TAG, "Error parsing job's required fields, skipping");
return null;
}
@@ -502,7 +510,7 @@ public class TaskStore {
return null;
}
try {
- buildConstraintsFromXml(taskBuilder, parser);
+ buildConstraintsFromXml(jobBuilder, parser);
} catch (NumberFormatException e) {
Slog.d(TAG, "Error reading constraints, skipping.");
return null;
@@ -530,22 +538,22 @@ public class TaskStore {
if (XML_TAG_PERIODIC.equals(parser.getName())) {
try {
String val = parser.getAttributeValue(null, "period");
- taskBuilder.setPeriodic(Long.valueOf(val));
+ jobBuilder.setPeriodic(Long.valueOf(val));
} catch (NumberFormatException e) {
Slog.d(TAG, "Error reading periodic execution criteria, skipping.");
return null;
}
} else if (XML_TAG_ONEOFF.equals(parser.getName())) {
try {
- if (runtimes.first != TaskStatus.DEFAULT_EARLIEST_RUNTIME) {
- taskBuilder.setMinimumLatency(runtimes.first - SystemClock.elapsedRealtime());
+ if (runtimes.first != JobStatus.NO_EARLIEST_RUNTIME) {
+ jobBuilder.setMinimumLatency(runtimes.first - SystemClock.elapsedRealtime());
}
- if (runtimes.second != TaskStatus.DEFAULT_LATEST_RUNTIME) {
- taskBuilder.setOverrideDeadline(
+ if (runtimes.second != JobStatus.NO_LATEST_RUNTIME) {
+ jobBuilder.setOverrideDeadline(
runtimes.second - SystemClock.elapsedRealtime());
}
} catch (NumberFormatException e) {
- Slog.d(TAG, "Error reading task execution criteria, skipping.");
+ Slog.d(TAG, "Error reading job execution criteria, skipping.");
return null;
}
} else {
@@ -555,7 +563,7 @@ public class TaskStore {
// Expecting a parameters start tag.
return null;
}
- maybeBuildBackoffPolicyFromXml(taskBuilder, parser);
+ maybeBuildBackoffPolicyFromXml(jobBuilder, parser);
parser.nextTag(); // Consume parameters end tag.
@@ -571,52 +579,52 @@ public class TaskStore {
}
PersistableBundle extras = PersistableBundle.restoreFromXml(parser);
- taskBuilder.setExtras(extras);
+ jobBuilder.setExtras(extras);
parser.nextTag(); // Consume </extras>
- return new TaskStatus(taskBuilder.build(), uid, runtimes.first, runtimes.second);
+ return new JobStatus(jobBuilder.build(), uid, runtimes.first, runtimes.second);
}
- private Task.Builder buildBuilderFromXml(XmlPullParser parser) throws NumberFormatException {
- // Pull out required fields from <task> attributes.
- int taskId = Integer.valueOf(parser.getAttributeValue(null, "taskid"));
+ private JobInfo.Builder buildBuilderFromXml(XmlPullParser parser) throws NumberFormatException {
+ // Pull out required fields from <job> attributes.
+ int jobId = Integer.valueOf(parser.getAttributeValue(null, "jobid"));
String packageName = parser.getAttributeValue(null, "package");
String className = parser.getAttributeValue(null, "class");
ComponentName cname = new ComponentName(packageName, className);
- return new Task.Builder(taskId, cname);
+ return new JobInfo.Builder(jobId, cname);
}
- private void buildConstraintsFromXml(Task.Builder taskBuilder, XmlPullParser parser) {
+ private void buildConstraintsFromXml(JobInfo.Builder jobBuilder, XmlPullParser parser) {
String val = parser.getAttributeValue(null, "unmetered");
if (val != null) {
- taskBuilder.setRequiredNetworkCapabilities(Task.NetworkType.UNMETERED);
+ jobBuilder.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED);
}
val = parser.getAttributeValue(null, "connectivity");
if (val != null) {
- taskBuilder.setRequiredNetworkCapabilities(Task.NetworkType.ANY);
+ jobBuilder.setRequiredNetworkCapabilities(JobInfo.NetworkType.ANY);
}
val = parser.getAttributeValue(null, "idle");
if (val != null) {
- taskBuilder.setRequiresDeviceIdle(true);
+ jobBuilder.setRequiresDeviceIdle(true);
}
val = parser.getAttributeValue(null, "charging");
if (val != null) {
- taskBuilder.setRequiresCharging(true);
+ jobBuilder.setRequiresCharging(true);
}
}
/**
* Builds the back-off policy out of the params tag. These attributes may not exist, depending
- * on whether the back-off was set when the task was first scheduled.
+ * on whether the back-off was set when the job was first scheduled.
*/
- private void maybeBuildBackoffPolicyFromXml(Task.Builder taskBuilder, XmlPullParser parser) {
+ private void maybeBuildBackoffPolicyFromXml(JobInfo.Builder jobBuilder, XmlPullParser parser) {
String val = parser.getAttributeValue(null, "initial-backoff");
if (val != null) {
long initialBackoff = Long.valueOf(val);
val = parser.getAttributeValue(null, "backoff-policy");
int backoffPolicy = Integer.valueOf(val); // Will throw NFE which we catch higher up.
- taskBuilder.setBackoffCriteria(initialBackoff, backoffPolicy);
+ jobBuilder.setBackoffCriteria(initialBackoff, backoffPolicy);
}
}
@@ -632,8 +640,8 @@ public class TaskStore {
final long nowWallclock = System.currentTimeMillis();
final long nowElapsed = SystemClock.elapsedRealtime();
- long earliestRunTimeElapsed = TaskStatus.DEFAULT_EARLIEST_RUNTIME;
- long latestRunTimeElapsed = TaskStatus.DEFAULT_LATEST_RUNTIME;
+ long earliestRunTimeElapsed = JobStatus.NO_EARLIEST_RUNTIME;
+ long latestRunTimeElapsed = JobStatus.NO_LATEST_RUNTIME;
String val = parser.getAttributeValue(null, "deadline");
if (val != null) {
long latestRuntimeWallclock = Long.valueOf(val);
@@ -652,4 +660,4 @@ public class TaskStore {
return Pair.create(earliestRunTimeElapsed, latestRunTimeElapsed);
}
}
-}
+} \ No newline at end of file
diff --git a/services/core/java/com/android/server/task/StateChangedListener.java b/services/core/java/com/android/server/job/StateChangedListener.java
index b1a4636c831e..90c203ab646b 100644
--- a/services/core/java/com/android/server/task/StateChangedListener.java
+++ b/services/core/java/com/android/server/job/StateChangedListener.java
@@ -14,26 +14,26 @@
* limitations under the License
*/
-package com.android.server.task;
+package com.android.server.job;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.controllers.JobStatus;
/**
- * Interface through which a {@link com.android.server.task.controllers.StateController} informs
- * the {@link com.android.server.task.TaskManagerService} that there are some tasks potentially
+ * Interface through which a {@link com.android.server.job.controllers.StateController} informs
+ * the {@link com.android.server.job.JobSchedulerService} that there are some tasks potentially
* ready to be run.
*/
public interface StateChangedListener {
/**
- * Called by the controller to notify the TaskManager that it should check on the state of a
+ * Called by the controller to notify the JobManager that it should check on the state of a
* task.
*/
public void onControllerStateChanged();
/**
- * Called by the controller to notify the TaskManager that regardless of the state of the task,
+ * Called by the controller to notify the JobManager that regardless of the state of the task,
* it must be run immediately.
- * @param taskStatus The state of the task which is to be run immediately.
+ * @param jobStatus The state of the task which is to be run immediately.
*/
- public void onTaskDeadlineExpired(TaskStatus taskStatus);
+ public void onRunJobNow(JobStatus jobStatus);
}
diff --git a/services/core/java/com/android/server/task/controllers/BatteryController.java b/services/core/java/com/android/server/job/controllers/BatteryController.java
index 585b41fce23b..4aef2d3142cf 100644
--- a/services/core/java/com/android/server/task/controllers/BatteryController.java
+++ b/services/core/java/com/android/server/job/controllers/BatteryController.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package com.android.server.task.controllers;
+package com.android.server.job.controllers;
import android.app.AlarmManager;
import android.app.PendingIntent;
@@ -32,10 +32,12 @@ import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.BatteryService;
-import com.android.server.task.StateChangedListener;
-import com.android.server.task.TaskManagerService;
+import com.android.server.job.JobSchedulerService;
+import com.android.server.job.StateChangedListener;
+import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
@@ -44,7 +46,7 @@ import java.util.List;
* ACTION_BATTERY_OK.
*/
public class BatteryController extends StateController {
- private static final String TAG = "BatteryController";
+ private static final String TAG = "JobScheduler.Batt";
private static final Object sCreationLock = new Object();
private static volatile BatteryController sController;
@@ -53,10 +55,10 @@ public class BatteryController extends StateController {
/** Wait this long after phone is plugged in before doing any work. */
private static final long STABLE_CHARGING_THRESHOLD_MILLIS = 2 * 60 * 1000; // 2 minutes.
- private List<TaskStatus> mTrackedTasks = new ArrayList<TaskStatus>();
+ private List<JobStatus> mTrackedTasks = new ArrayList<JobStatus>();
private ChargingTracker mChargeTracker;
- public static BatteryController get(TaskManagerService taskManagerService) {
+ public static BatteryController get(JobSchedulerService taskManagerService) {
synchronized (sCreationLock) {
if (sController == null) {
sController = new BatteryController(taskManagerService,
@@ -84,18 +86,21 @@ public class BatteryController extends StateController {
}
@Override
- public void maybeStartTrackingTask(TaskStatus taskStatus) {
+ public void maybeStartTrackingJob(JobStatus taskStatus) {
if (taskStatus.hasChargingConstraint()) {
+ final boolean isOnStablePower = mChargeTracker.isOnStablePower();
synchronized (mTrackedTasks) {
mTrackedTasks.add(taskStatus);
- taskStatus.chargingConstraintSatisfied.set(mChargeTracker.isOnStablePower());
+ taskStatus.chargingConstraintSatisfied.set(isOnStablePower);
+ }
+ if (isOnStablePower) {
+ mStateChangedListener.onControllerStateChanged();
}
}
-
}
@Override
- public void maybeStopTrackingTask(TaskStatus taskStatus) {
+ public void maybeStopTrackingJob(JobStatus taskStatus) {
if (taskStatus.hasChargingConstraint()) {
synchronized (mTrackedTasks) {
mTrackedTasks.remove(taskStatus);
@@ -105,9 +110,12 @@ public class BatteryController extends StateController {
private void maybeReportNewChargingState() {
final boolean stablePower = mChargeTracker.isOnStablePower();
+ if (DEBUG) {
+ Slog.d(TAG, "maybeReportNewChargingState: " + stablePower);
+ }
boolean reportChange = false;
synchronized (mTrackedTasks) {
- for (TaskStatus ts : mTrackedTasks) {
+ for (JobStatus ts : mTrackedTasks) {
boolean previous = ts.chargingConstraintSatisfied.getAndSet(stablePower);
if (previous != stablePower) {
reportChange = true;
@@ -132,8 +140,7 @@ public class BatteryController extends StateController {
public ChargingTracker() {
mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
- Intent intent = new Intent(ACTION_CHARGING_STABLE)
- .setComponent(new ComponentName(mContext, this.getClass()));
+ Intent intent = new Intent(ACTION_CHARGING_STABLE);
mStableChargingTriggerIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
}
@@ -146,12 +153,14 @@ public class BatteryController extends StateController {
// Charging/not charging.
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
+ // Charging stable.
+ filter.addAction(ACTION_CHARGING_STABLE);
mContext.registerReceiver(this, filter);
// Initialise tracker state.
BatteryService batteryService = (BatteryService) ServiceManager.getService("battery");
if (batteryService != null) {
- mBatteryHealthy = !batteryService.isBatteryLow();
+ mBatteryHealthy = !batteryService.getBatteryLevelLow();
mCharging = batteryService.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);
} else {
// Unavailable for some reason, we default to false and let ACTION_BATTERY_[OK,LOW]
@@ -188,6 +197,10 @@ public class BatteryController extends StateController {
mBatteryHealthy = true;
maybeReportNewChargingState();
} else if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Received charging intent, setting alarm for "
+ + STABLE_CHARGING_THRESHOLD_MILLIS);
+ }
// Set up an alarm for ACTION_CHARGING_STABLE - we don't want to kick off tasks
// here if the user unplugs the phone immediately.
mAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
@@ -195,6 +208,9 @@ public class BatteryController extends StateController {
mStableChargingTriggerIntent);
mCharging = true;
} else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Disconnected from power, cancelling any set alarms.");
+ }
// If an alarm is set, breathe a sigh of relief and cancel it - crisis averted.
mAlarm.cancel(mStableChargingTriggerIntent);
mCharging = false;
@@ -202,7 +218,8 @@ public class BatteryController extends StateController {
}else if (ACTION_CHARGING_STABLE.equals(action)) {
// Here's where we actually do the notify for a task being ready.
if (DEBUG) {
- Slog.d(TAG, "Battery connected fired @ " + SystemClock.elapsedRealtime());
+ Slog.d(TAG, "Battery connected fired @ " + SystemClock.elapsedRealtime()
+ + " charging: " + mCharging);
}
if (mCharging) { // Should never receive this intent if mCharging is false.
maybeReportNewChargingState();
@@ -210,4 +227,20 @@ public class BatteryController extends StateController {
}
}
}
+
+ @Override
+ public void dumpControllerState(PrintWriter pw) {
+ pw.println("Batt.");
+ pw.println("Stable power: " + mChargeTracker.isOnStablePower());
+ synchronized (mTrackedTasks) {
+ Iterator<JobStatus> it = mTrackedTasks.iterator();
+ if (it.hasNext()) {
+ pw.print(String.valueOf(it.next().hashCode()));
+ }
+ while (it.hasNext()) {
+ pw.print("," + String.valueOf(it.next().hashCode()));
+ }
+ pw.println();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
new file mode 100644
index 000000000000..7e79ff7b3e77
--- /dev/null
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2014 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.job.controllers;
+
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.util.Slog;
+
+import com.android.server.ConnectivityService;
+import com.android.server.job.JobSchedulerService;
+import com.android.server.job.StateChangedListener;
+
+import java.io.PrintWriter;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Handles changes in connectivity.
+ * We are only interested in metered vs. unmetered networks, and we're interested in them on a
+ * per-user basis.
+ */
+public class ConnectivityController extends StateController implements
+ ConnectivityManager.OnNetworkActiveListener {
+ private static final String TAG = "JobScheduler.Conn";
+
+ private final List<JobStatus> mTrackedJobs = new LinkedList<JobStatus>();
+ private final BroadcastReceiver mConnectivityChangedReceiver =
+ new ConnectivityChangedReceiver();
+ /** Singleton. */
+ private static ConnectivityController mSingleton;
+ private static Object sCreationLock = new Object();
+ /** Track whether the latest active network is metered. */
+ private boolean mNetworkUnmetered;
+ /** Track whether the latest active network is connected. */
+ private boolean mNetworkConnected;
+
+ public static ConnectivityController get(JobSchedulerService jms) {
+ synchronized (sCreationLock) {
+ if (mSingleton == null) {
+ mSingleton = new ConnectivityController(jms, jms.getContext());
+ }
+ return mSingleton;
+ }
+ }
+
+ private ConnectivityController(StateChangedListener stateChangedListener, Context context) {
+ super(stateChangedListener, context);
+ // Register connectivity changed BR.
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ mContext.registerReceiverAsUser(
+ mConnectivityChangedReceiver, UserHandle.ALL, intentFilter, null, null);
+ ConnectivityService cs =
+ (ConnectivityService)ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
+ if (cs != null) {
+ if (cs.getActiveNetworkInfo() != null) {
+ mNetworkConnected = cs.getActiveNetworkInfo().isConnected();
+ }
+ mNetworkUnmetered = mNetworkConnected && !cs.isActiveNetworkMetered();
+ }
+ }
+
+ @Override
+ public void maybeStartTrackingJob(JobStatus jobStatus) {
+ if (jobStatus.hasConnectivityConstraint() || jobStatus.hasUnmeteredConstraint()) {
+ synchronized (mTrackedJobs) {
+ jobStatus.connectivityConstraintSatisfied.set(mNetworkConnected);
+ jobStatus.unmeteredConstraintSatisfied.set(mNetworkUnmetered);
+ mTrackedJobs.add(jobStatus);
+ }
+ }
+ }
+
+ @Override
+ public void maybeStopTrackingJob(JobStatus jobStatus) {
+ if (jobStatus.hasConnectivityConstraint() || jobStatus.hasUnmeteredConstraint()) {
+ synchronized (mTrackedJobs) {
+ mTrackedJobs.remove(jobStatus);
+ }
+ }
+ }
+
+ /**
+ * @param userId Id of the user for whom we are updating the connectivity state.
+ */
+ private void updateTrackedJobs(int userId) {
+ synchronized (mTrackedJobs) {
+ boolean changed = false;
+ for (JobStatus js : mTrackedJobs) {
+ if (js.getUserId() != userId) {
+ continue;
+ }
+ boolean prevIsConnected =
+ js.connectivityConstraintSatisfied.getAndSet(mNetworkConnected);
+ boolean prevIsMetered = js.unmeteredConstraintSatisfied.getAndSet(mNetworkUnmetered);
+ if (prevIsConnected != mNetworkConnected || prevIsMetered != mNetworkUnmetered) {
+ changed = true;
+ }
+ }
+ if (changed) {
+ mStateChangedListener.onControllerStateChanged();
+ }
+ }
+ }
+
+ /**
+ * We know the network has just come up. We want to run any jobs that are ready.
+ */
+ public synchronized void onNetworkActive() {
+ synchronized (mTrackedJobs) {
+ for (JobStatus js : mTrackedJobs) {
+ if (js.isReady()) {
+ if (DEBUG) {
+ Slog.d(TAG, "Running " + js + " due to network activity.");
+ }
+ mStateChangedListener.onRunJobNow(js);
+ }
+ }
+ }
+ }
+
+ class ConnectivityChangedReceiver extends BroadcastReceiver {
+ /**
+ * We'll receive connectivity changes for each user here, which we process independently.
+ * We are only interested in the active network here. We're only interested in the active
+ * network, b/c the end result of this will be for apps to try to hit the network.
+ * @param context The Context in which the receiver is running.
+ * @param intent The Intent being received.
+ */
+ // TODO: Test whether this will be called twice for each user.
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) {
+ Slog.d(TAG, "Received connectivity event: " + intent.getAction() + " u"
+ + context.getUserId());
+ }
+ final String action = intent.getAction();
+ if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+ final int networkType =
+ intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE,
+ ConnectivityManager.TYPE_NONE);
+ // Connectivity manager for THIS context - important!
+ final ConnectivityManager connManager = (ConnectivityManager)
+ context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ final NetworkInfo activeNetwork = connManager.getActiveNetworkInfo();
+ final int userid = context.getUserId();
+ // This broadcast gets sent a lot, only update if the active network has changed.
+ if (activeNetwork == null) {
+ mNetworkUnmetered = false;
+ mNetworkConnected = false;
+ updateTrackedJobs(userid);
+ } else if (activeNetwork.getType() == networkType) {
+ mNetworkUnmetered = false;
+ mNetworkConnected = !intent.getBooleanExtra(
+ ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+ if (mNetworkConnected) { // No point making the call if we know there's no conn.
+ mNetworkUnmetered = !connManager.isActiveNetworkMetered();
+ }
+ updateTrackedJobs(userid);
+ }
+ } else {
+ if (DEBUG) {
+ Slog.d(TAG, "Unrecognised action in intent: " + action);
+ }
+ }
+ }
+ };
+
+ @Override
+ public void dumpControllerState(PrintWriter pw) {
+ pw.println("Conn.");
+ pw.println("connected: " + mNetworkConnected + " unmetered: " + mNetworkUnmetered);
+ for (JobStatus js: mTrackedJobs) {
+ pw.println(String.valueOf(js.hashCode()).substring(0, 3) + ".."
+ + ": C=" + js.hasConnectivityConstraint()
+ + ", UM=" + js.hasUnmeteredConstraint());
+ }
+ }
+} \ No newline at end of file
diff --git a/services/core/java/com/android/server/task/controllers/IdleController.java b/services/core/java/com/android/server/job/controllers/IdleController.java
index c47facae2df5..07ffe4d885b3 100644
--- a/services/core/java/com/android/server/task/controllers/IdleController.java
+++ b/services/core/java/com/android/server/job/controllers/IdleController.java
@@ -14,8 +14,9 @@
* limitations under the License
*/
-package com.android.server.task.controllers;
+package com.android.server.job.controllers;
+import java.io.PrintWriter;
import java.util.ArrayList;
import android.app.AlarmManager;
@@ -28,8 +29,8 @@ import android.content.IntentFilter;
import android.os.SystemClock;
import android.util.Slog;
-import com.android.server.task.StateChangedListener;
-import com.android.server.task.TaskManagerService;
+import com.android.server.job.JobSchedulerService;
+import com.android.server.job.StateChangedListener;
public class IdleController extends StateController {
private static final String TAG = "IdleController";
@@ -42,14 +43,14 @@ public class IdleController extends StateController {
private static final String ACTION_TRIGGER_IDLE =
"com.android.server.task.controllers.IdleController.ACTION_TRIGGER_IDLE";
- final ArrayList<TaskStatus> mTrackedTasks = new ArrayList<TaskStatus>();
+ final ArrayList<JobStatus> mTrackedTasks = new ArrayList<JobStatus>();
IdlenessTracker mIdleTracker;
// Singleton factory
private static Object sCreationLock = new Object();
private static volatile IdleController sController;
- public static IdleController get(TaskManagerService service) {
+ public static IdleController get(JobSchedulerService service) {
synchronized (sCreationLock) {
if (sController == null) {
sController = new IdleController(service, service.getContext());
@@ -67,7 +68,7 @@ public class IdleController extends StateController {
* StateController interface
*/
@Override
- public void maybeStartTrackingTask(TaskStatus taskStatus) {
+ public void maybeStartTrackingJob(JobStatus taskStatus) {
if (taskStatus.hasIdleConstraint()) {
synchronized (mTrackedTasks) {
mTrackedTasks.add(taskStatus);
@@ -77,7 +78,7 @@ public class IdleController extends StateController {
}
@Override
- public void maybeStopTrackingTask(TaskStatus taskStatus) {
+ public void maybeStopTrackingJob(JobStatus taskStatus) {
synchronized (mTrackedTasks) {
mTrackedTasks.remove(taskStatus);
}
@@ -88,7 +89,7 @@ public class IdleController extends StateController {
*/
void reportNewIdleState(boolean isIdle) {
synchronized (mTrackedTasks) {
- for (TaskStatus task : mTrackedTasks) {
+ for (JobStatus task : mTrackedTasks) {
task.idleConstraintSatisfied.set(isIdle);
}
}
@@ -177,4 +178,9 @@ public class IdleController extends StateController {
}
}
}
+
+ @Override
+ public void dumpControllerState(PrintWriter pw) {
+
+ }
}
diff --git a/services/core/java/com/android/server/task/controllers/TaskStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java
index 33670a122026..15a6b2569c55 100644
--- a/services/core/java/com/android/server/task/controllers/TaskStatus.java
+++ b/services/core/java/com/android/server/job/controllers/JobStatus.java
@@ -14,9 +14,9 @@
* limitations under the License
*/
-package com.android.server.task.controllers;
+package com.android.server.job.controllers;
-import android.app.task.Task;
+import android.app.job.JobInfo;
import android.content.ComponentName;
import android.os.PersistableBundle;
import android.os.SystemClock;
@@ -26,9 +26,9 @@ import java.io.PrintWriter;
import java.util.concurrent.atomic.AtomicBoolean;
/**
- * Uniquely identifies a task internally.
- * Created from the public {@link android.app.task.Task} object when it lands on the scheduler.
- * Contains current state of the requirements of the task, as well as a function to evaluate
+ * Uniquely identifies a job internally.
+ * Created from the public {@link android.app.job.JobInfo} object when it lands on the scheduler.
+ * Contains current state of the requirements of the job, as well as a function to evaluate
* whether it's ready to run.
* This object is shared among the various controllers - hence why the different fields are atomic.
* This isn't strictly necessary because each controller is only interested in a specific field,
@@ -36,14 +36,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
* but we don't enforce that so this is safer.
* @hide
*/
-public class TaskStatus {
- public static final long DEFAULT_LATEST_RUNTIME = Long.MAX_VALUE;
- public static final long DEFAULT_EARLIEST_RUNTIME = 0L;
+public class JobStatus {
+ public static final long NO_LATEST_RUNTIME = Long.MAX_VALUE;
+ public static final long NO_EARLIEST_RUNTIME = 0L;
- final Task task;
+ final JobInfo job;
final int uId;
- /** At reschedule time we need to know whether to update task on disk. */
+ /** At reschedule time we need to know whether to update job on disk. */
final boolean persisted;
// Constraints.
@@ -51,81 +51,81 @@ public class TaskStatus {
final AtomicBoolean timeDelayConstraintSatisfied = new AtomicBoolean();
final AtomicBoolean deadlineConstraintSatisfied = new AtomicBoolean();
final AtomicBoolean idleConstraintSatisfied = new AtomicBoolean();
- final AtomicBoolean meteredConstraintSatisfied = new AtomicBoolean();
+ final AtomicBoolean unmeteredConstraintSatisfied = new AtomicBoolean();
final AtomicBoolean connectivityConstraintSatisfied = new AtomicBoolean();
/**
- * Earliest point in the future at which this task will be eligible to run. A value of 0
+ * Earliest point in the future at which this job will be eligible to run. A value of 0
* indicates there is no delay constraint. See {@link #hasTimingDelayConstraint()}.
*/
private long earliestRunTimeElapsedMillis;
/**
- * Latest point in the future at which this task must be run. A value of {@link Long#MAX_VALUE}
+ * Latest point in the future at which this job must be run. A value of {@link Long#MAX_VALUE}
* indicates there is no deadline constraint. See {@link #hasDeadlineConstraint()}.
*/
private long latestRunTimeElapsedMillis;
- /** How many times this task has failed, used to compute back-off. */
+ /** How many times this job has failed, used to compute back-off. */
private final int numFailures;
- /** Provide a handle to the service that this task will be run on. */
+ /** Provide a handle to the service that this job will be run on. */
public int getServiceToken() {
return uId;
}
- private TaskStatus(Task task, int uId, boolean persisted, int numFailures) {
- this.task = task;
+ private JobStatus(JobInfo job, int uId, boolean persisted, int numFailures) {
+ this.job = job;
this.uId = uId;
this.numFailures = numFailures;
this.persisted = persisted;
}
- /** Create a newly scheduled task. */
- public TaskStatus(Task task, int uId, boolean persisted) {
- this(task, uId, persisted, 0);
+ /** Create a newly scheduled job. */
+ public JobStatus(JobInfo job, int uId, boolean persisted) {
+ this(job, uId, persisted, 0);
final long elapsedNow = SystemClock.elapsedRealtime();
- if (task.isPeriodic()) {
+ if (job.isPeriodic()) {
earliestRunTimeElapsedMillis = elapsedNow;
- latestRunTimeElapsedMillis = elapsedNow + task.getIntervalMillis();
+ latestRunTimeElapsedMillis = elapsedNow + job.getIntervalMillis();
} else {
- earliestRunTimeElapsedMillis = task.hasEarlyConstraint() ?
- elapsedNow + task.getMinLatencyMillis() : DEFAULT_EARLIEST_RUNTIME;
- latestRunTimeElapsedMillis = task.hasLateConstraint() ?
- elapsedNow + task.getMaxExecutionDelayMillis() : DEFAULT_LATEST_RUNTIME;
+ earliestRunTimeElapsedMillis = job.hasEarlyConstraint() ?
+ elapsedNow + job.getMinLatencyMillis() : NO_EARLIEST_RUNTIME;
+ latestRunTimeElapsedMillis = job.hasLateConstraint() ?
+ elapsedNow + job.getMaxExecutionDelayMillis() : NO_LATEST_RUNTIME;
}
}
/**
- * Create a new TaskStatus that was loaded from disk. We ignore the provided
- * {@link android.app.task.Task} time criteria because we can load a persisted periodic task
- * from the {@link com.android.server.task.TaskStore} and still want to respect its
+ * Create a new JobStatus that was loaded from disk. We ignore the provided
+ * {@link android.app.job.JobInfo} time criteria because we can load a persisted periodic job
+ * from the {@link com.android.server.job.JobStore} and still want to respect its
* wallclock runtime rather than resetting it on every boot.
- * We consider a freshly loaded task to no longer be in back-off.
+ * We consider a freshly loaded job to no longer be in back-off.
*/
- public TaskStatus(Task task, int uId, long earliestRunTimeElapsedMillis,
+ public JobStatus(JobInfo job, int uId, long earliestRunTimeElapsedMillis,
long latestRunTimeElapsedMillis) {
- this(task, uId, true, 0);
+ this(job, uId, true, 0);
this.earliestRunTimeElapsedMillis = earliestRunTimeElapsedMillis;
this.latestRunTimeElapsedMillis = latestRunTimeElapsedMillis;
}
- /** Create a new task to be rescheduled with the provided parameters. */
- public TaskStatus(TaskStatus rescheduling, long newEarliestRuntimeElapsedMillis,
+ /** Create a new job to be rescheduled with the provided parameters. */
+ public JobStatus(JobStatus rescheduling, long newEarliestRuntimeElapsedMillis,
long newLatestRuntimeElapsedMillis, int backoffAttempt) {
- this(rescheduling.task, rescheduling.getUid(), rescheduling.isPersisted(), backoffAttempt);
+ this(rescheduling.job, rescheduling.getUid(), rescheduling.isPersisted(), backoffAttempt);
earliestRunTimeElapsedMillis = newEarliestRuntimeElapsedMillis;
latestRunTimeElapsedMillis = newLatestRuntimeElapsedMillis;
}
- public Task getTask() {
- return task;
+ public JobInfo getJob() {
+ return job;
}
- public int getTaskId() {
- return task.getId();
+ public int getJobId() {
+ return job.getId();
}
public int getNumFailures() {
@@ -133,7 +133,7 @@ public class TaskStatus {
}
public ComponentName getServiceComponent() {
- return task.getService();
+ return job.getService();
}
public int getUserId() {
@@ -145,31 +145,31 @@ public class TaskStatus {
}
public PersistableBundle getExtras() {
- return task.getExtras();
+ return job.getExtras();
}
public boolean hasConnectivityConstraint() {
- return task.getNetworkCapabilities() == Task.NetworkType.ANY;
+ return job.getNetworkCapabilities() == JobInfo.NetworkType.ANY;
}
- public boolean hasMeteredConstraint() {
- return task.getNetworkCapabilities() == Task.NetworkType.UNMETERED;
+ public boolean hasUnmeteredConstraint() {
+ return job.getNetworkCapabilities() == JobInfo.NetworkType.UNMETERED;
}
public boolean hasChargingConstraint() {
- return task.isRequireCharging();
+ return job.isRequireCharging();
}
public boolean hasTimingDelayConstraint() {
- return earliestRunTimeElapsedMillis != DEFAULT_EARLIEST_RUNTIME;
+ return earliestRunTimeElapsedMillis != NO_EARLIEST_RUNTIME;
}
public boolean hasDeadlineConstraint() {
- return latestRunTimeElapsedMillis != DEFAULT_LATEST_RUNTIME;
+ return latestRunTimeElapsedMillis != NO_LATEST_RUNTIME;
}
public boolean hasIdleConstraint() {
- return task.isRequireDeviceIdle();
+ return job.isRequireDeviceIdle();
}
public long getEarliestRunTime() {
@@ -184,40 +184,34 @@ public class TaskStatus {
return persisted;
}
/**
- * @return Whether or not this task is ready to run, based on its requirements.
+ * @return Whether or not this job is ready to run, based on its requirements.
*/
public synchronized boolean isReady() {
return (!hasChargingConstraint() || chargingConstraintSatisfied.get())
&& (!hasTimingDelayConstraint() || timeDelayConstraintSatisfied.get())
&& (!hasConnectivityConstraint() || connectivityConstraintSatisfied.get())
- && (!hasMeteredConstraint() || meteredConstraintSatisfied.get())
+ && (!hasUnmeteredConstraint() || unmeteredConstraintSatisfied.get())
&& (!hasIdleConstraint() || idleConstraintSatisfied.get())
- && (!hasDeadlineConstraint() || deadlineConstraintSatisfied.get());
+ // Also ready if the deadline has expired - special case.
+ || (hasDeadlineConstraint() && deadlineConstraintSatisfied.get());
}
- @Override
- public int hashCode() {
- int result = getServiceComponent().hashCode();
- result = 31 * result + task.getId();
- result = 31 * result + uId;
- return result;
+ public boolean matches(int uid, int jobId) {
+ return this.job.getId() == jobId && this.uId == uid;
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof TaskStatus)) return false;
-
- TaskStatus that = (TaskStatus) o;
- return ((task.getId() == that.task.getId())
- && (uId == that.uId)
- && (getServiceComponent().equals(that.getServiceComponent())));
+ public String toString() {
+ return String.valueOf(hashCode()).substring(0, 3) + ".."
+ + ":[" + job.getService().getPackageName() + ",jId=" + job.getId()
+ + ",R=(" + earliestRunTimeElapsedMillis + "," + latestRunTimeElapsedMillis + ")"
+ + ",N=" + job.getNetworkCapabilities() + ",C=" + job.isRequireCharging()
+ + ",I=" + job.isRequireDeviceIdle() + ",F=" + numFailures
+ + (isReady() ? "(READY)" : "")
+ + "]";
}
-
// Dumpsys infrastructure
public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("Task "); pw.println(task.getId());
- pw.print(prefix); pw.print("uid="); pw.println(uId);
- pw.print(prefix); pw.print("component="); pw.println(task.getService());
+ pw.println(this.toString());
}
}
diff --git a/services/core/java/com/android/server/task/controllers/StateController.java b/services/core/java/com/android/server/job/controllers/StateController.java
index cbe6ff8d9cdd..81658bf377da 100644
--- a/services/core/java/com/android/server/task/controllers/StateController.java
+++ b/services/core/java/com/android/server/job/controllers/StateController.java
@@ -14,16 +14,18 @@
* limitations under the License
*/
-package com.android.server.task.controllers;
+package com.android.server.job.controllers;
import android.content.Context;
-import com.android.server.task.StateChangedListener;
-import com.android.server.task.TaskManagerService;
+import com.android.server.job.JobSchedulerService;
+import com.android.server.job.StateChangedListener;
+
+import java.io.PrintWriter;
/**
- * Incorporates shared controller logic between the various controllers of the TaskManager.
- * These are solely responsible for tracking a list of tasks, and notifying the TM when these
+ * Incorporates shared controller logic between the various controllers of the JobManager.
+ * These are solely responsible for tracking a list of jobs, and notifying the JM when these
* are ready to run, or whether they must be stopped.
*/
public abstract class StateController {
@@ -37,15 +39,17 @@ public abstract class StateController {
}
/**
- * Implement the logic here to decide whether a task should be tracked by this controller.
- * This logic is put here so the TaskManger can be completely agnostic of Controller logic.
+ * Implement the logic here to decide whether a job should be tracked by this controller.
+ * This logic is put here so the JobManger can be completely agnostic of Controller logic.
* Also called when updating a task, so implementing controllers have to be aware of
* preexisting tasks.
*/
- public abstract void maybeStartTrackingTask(TaskStatus taskStatus);
+ public abstract void maybeStartTrackingJob(JobStatus jobStatus);
/**
* Remove task - this will happen if the task is cancelled, completed, etc.
*/
- public abstract void maybeStopTrackingTask(TaskStatus taskStatus);
+ public abstract void maybeStopTrackingJob(JobStatus jobStatus);
+
+ public abstract void dumpControllerState(PrintWriter pw);
}
diff --git a/services/core/java/com/android/server/job/controllers/TimeController.java b/services/core/java/com/android/server/job/controllers/TimeController.java
new file mode 100644
index 000000000000..e46226c5220b
--- /dev/null
+++ b/services/core/java/com/android/server/job/controllers/TimeController.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2014 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.job.controllers;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.SystemClock;
+import android.util.Slog;
+
+import com.android.server.job.JobSchedulerService;
+import com.android.server.job.StateChangedListener;
+
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * This class sets an alarm for the next expiring job, and determines whether a job's minimum
+ * delay has been satisfied.
+ */
+public class TimeController extends StateController {
+ private static final String TAG = "JobScheduler.Time";
+ private static final String ACTION_JOB_EXPIRED =
+ "android.content.jobscheduler.JOB_DEADLINE_EXPIRED";
+ private static final String ACTION_JOB_DELAY_EXPIRED =
+ "android.content.jobscheduler.JOB_DELAY_EXPIRED";
+
+ /** Set an alarm for the next job expiry. */
+ private final PendingIntent mDeadlineExpiredAlarmIntent;
+ /** Set an alarm for the next job delay expiry. This*/
+ private final PendingIntent mNextDelayExpiredAlarmIntent;
+ /** Constant time determining how near in the future we'll set an alarm for. */
+ private static final long MIN_WAKEUP_INTERVAL_MILLIS = 15 * 1000;
+
+ private long mNextJobExpiredElapsedMillis;
+ private long mNextDelayExpiredElapsedMillis;
+
+ private AlarmManager mAlarmService = null;
+ /** List of tracked jobs, sorted asc. by deadline */
+ private final List<JobStatus> mTrackedJobs = new LinkedList<JobStatus>();
+ /** Singleton. */
+ private static TimeController mSingleton;
+
+ public static synchronized TimeController get(JobSchedulerService jms) {
+ if (mSingleton == null) {
+ mSingleton = new TimeController(jms, jms.getContext());
+ }
+ return mSingleton;
+ }
+
+ private TimeController(StateChangedListener stateChangedListener, Context context) {
+ super(stateChangedListener, context);
+ mDeadlineExpiredAlarmIntent =
+ PendingIntent.getBroadcast(mContext, 0 /* ignored */,
+ new Intent(ACTION_JOB_EXPIRED), 0);
+ mNextDelayExpiredAlarmIntent =
+ PendingIntent.getBroadcast(mContext, 0 /* ignored */,
+ new Intent(ACTION_JOB_DELAY_EXPIRED), 0);
+ mNextJobExpiredElapsedMillis = Long.MAX_VALUE;
+ mNextDelayExpiredElapsedMillis = Long.MAX_VALUE;
+
+ // Register BR for these intents.
+ IntentFilter intentFilter = new IntentFilter(ACTION_JOB_EXPIRED);
+ intentFilter.addAction(ACTION_JOB_DELAY_EXPIRED);
+ mContext.registerReceiver(mAlarmExpiredReceiver, intentFilter);
+ }
+
+ /**
+ * Check if the job has a timing constraint, and if so determine where to insert it in our
+ * list.
+ */
+ @Override
+ public synchronized void maybeStartTrackingJob(JobStatus job) {
+ if (job.hasTimingDelayConstraint() || job.hasDeadlineConstraint()) {
+ maybeStopTrackingJob(job);
+ ListIterator<JobStatus> it = mTrackedJobs.listIterator(mTrackedJobs.size());
+ while (it.hasPrevious()) {
+ JobStatus ts = it.previous();
+ if (ts.getLatestRunTimeElapsed() < job.getLatestRunTimeElapsed()) {
+ // Insert
+ break;
+ }
+ }
+ it.add(job);
+ maybeUpdateAlarms(
+ job.hasTimingDelayConstraint() ? job.getEarliestRunTime() : Long.MAX_VALUE,
+ job.hasDeadlineConstraint() ? job.getLatestRunTimeElapsed() : Long.MAX_VALUE);
+ }
+ }
+
+ /**
+ * When we stop tracking a job, we only need to update our alarms if the job we're no longer
+ * tracking was the one our alarms were based off of.
+ * Really an == comparison should be enough, but why play with fate? We'll do <=.
+ */
+ @Override
+ public synchronized void maybeStopTrackingJob(JobStatus job) {
+ if (mTrackedJobs.remove(job)) {
+ checkExpiredDelaysAndResetAlarm();
+ checkExpiredDeadlinesAndResetAlarm();
+ }
+ }
+
+ /**
+ * Determines whether this controller can stop tracking the given job.
+ * The controller is no longer interested in a job once its time constraint is satisfied, and
+ * the job's deadline is fulfilled - unlike other controllers a time constraint can't toggle
+ * back and forth.
+ */
+ private boolean canStopTrackingJob(JobStatus job) {
+ return (!job.hasTimingDelayConstraint() ||
+ job.timeDelayConstraintSatisfied.get()) &&
+ (!job.hasDeadlineConstraint() ||
+ job.deadlineConstraintSatisfied.get());
+ }
+
+ private void ensureAlarmService() {
+ if (mAlarmService == null) {
+ mAlarmService = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+ }
+ }
+
+ /**
+ * Checks list of jobs for ones that have an expired deadline, sending them to the JobScheduler
+ * if so, removing them from this list, and updating the alarm for the next expiry time.
+ */
+ private synchronized void checkExpiredDeadlinesAndResetAlarm() {
+ long nextExpiryTime = Long.MAX_VALUE;
+ final long nowElapsedMillis = SystemClock.elapsedRealtime();
+
+ Iterator<JobStatus> it = mTrackedJobs.iterator();
+ while (it.hasNext()) {
+ JobStatus job = it.next();
+ if (!job.hasDeadlineConstraint()) {
+ continue;
+ }
+ final long jobDeadline = job.getLatestRunTimeElapsed();
+
+ if (jobDeadline <= nowElapsedMillis) {
+ job.deadlineConstraintSatisfied.set(true);
+ mStateChangedListener.onRunJobNow(job);
+ it.remove();
+ } else { // Sorted by expiry time, so take the next one and stop.
+ nextExpiryTime = jobDeadline;
+ break;
+ }
+ }
+ setDeadlineExpiredAlarm(nextExpiryTime);
+ }
+
+ /**
+ * Handles alarm that notifies us that a job's delay has expired. Iterates through the list of
+ * tracked jobs and marks them as ready as appropriate.
+ */
+ private synchronized void checkExpiredDelaysAndResetAlarm() {
+ final long nowElapsedMillis = SystemClock.elapsedRealtime();
+ long nextDelayTime = Long.MAX_VALUE;
+ boolean ready = false;
+ Iterator<JobStatus> it = mTrackedJobs.iterator();
+ while (it.hasNext()) {
+ final JobStatus job = it.next();
+ if (!job.hasTimingDelayConstraint()) {
+ continue;
+ }
+ final long jobDelayTime = job.getEarliestRunTime();
+ if (jobDelayTime <= nowElapsedMillis) {
+ job.timeDelayConstraintSatisfied.set(true);
+ if (canStopTrackingJob(job)) {
+ it.remove();
+ }
+ if (job.isReady()) {
+ ready = true;
+ }
+ } else { // Keep going through list to get next delay time.
+ if (nextDelayTime > jobDelayTime) {
+ nextDelayTime = jobDelayTime;
+ }
+ }
+ }
+ if (ready) {
+ mStateChangedListener.onControllerStateChanged();
+ }
+ setDelayExpiredAlarm(nextDelayTime);
+ }
+
+ private void maybeUpdateAlarms(long delayExpiredElapsed, long deadlineExpiredElapsed) {
+ if (delayExpiredElapsed < mNextDelayExpiredElapsedMillis) {
+ setDelayExpiredAlarm(delayExpiredElapsed);
+ }
+ if (deadlineExpiredElapsed < mNextJobExpiredElapsedMillis) {
+ setDeadlineExpiredAlarm(deadlineExpiredElapsed);
+ }
+ }
+
+ /**
+ * Set an alarm with the {@link android.app.AlarmManager} for the next time at which a job's
+ * delay will expire.
+ * This alarm <b>will not</b> wake up the phone.
+ */
+ private void setDelayExpiredAlarm(long alarmTimeElapsedMillis) {
+ final long earliestWakeupTimeElapsed =
+ SystemClock.elapsedRealtime() + MIN_WAKEUP_INTERVAL_MILLIS;
+ if (alarmTimeElapsedMillis < earliestWakeupTimeElapsed) {
+ alarmTimeElapsedMillis = earliestWakeupTimeElapsed;
+ }
+ mNextDelayExpiredElapsedMillis = alarmTimeElapsedMillis;
+ updateAlarmWithPendingIntent(mNextDelayExpiredAlarmIntent, mNextDelayExpiredElapsedMillis);
+ }
+
+ /**
+ * Set an alarm with the {@link android.app.AlarmManager} for the next time at which a job's
+ * deadline will expire.
+ * This alarm <b>will</b> wake up the phone.
+ */
+ private void setDeadlineExpiredAlarm(long alarmTimeElapsedMillis) {
+ final long earliestWakeupTimeElapsed =
+ SystemClock.elapsedRealtime() + MIN_WAKEUP_INTERVAL_MILLIS;
+ if (alarmTimeElapsedMillis < earliestWakeupTimeElapsed) {
+ alarmTimeElapsedMillis = earliestWakeupTimeElapsed;
+ }
+ mNextJobExpiredElapsedMillis = alarmTimeElapsedMillis;
+ updateAlarmWithPendingIntent(mDeadlineExpiredAlarmIntent, mNextJobExpiredElapsedMillis);
+ }
+
+ private void updateAlarmWithPendingIntent(PendingIntent pi, long alarmTimeElapsed) {
+ ensureAlarmService();
+ if (alarmTimeElapsed == Long.MAX_VALUE) {
+ mAlarmService.cancel(pi);
+ } else {
+ if (DEBUG) {
+ Slog.d(TAG, "Setting " + pi.getIntent().getAction() + " for: " + alarmTimeElapsed);
+ }
+ mAlarmService.set(AlarmManager.ELAPSED_REALTIME, alarmTimeElapsed, pi);
+ }
+ }
+
+ private final BroadcastReceiver mAlarmExpiredReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) {
+ Slog.d(TAG, "Just received alarm: " + intent.getAction());
+ }
+ // A job has just expired, so we run through the list of jobs that we have and
+ // notify our StateChangedListener.
+ if (ACTION_JOB_EXPIRED.equals(intent.getAction())) {
+ checkExpiredDeadlinesAndResetAlarm();
+ } else if (ACTION_JOB_DELAY_EXPIRED.equals(intent.getAction())) {
+ checkExpiredDelaysAndResetAlarm();
+ }
+ }
+ };
+
+ @Override
+ public void dumpControllerState(PrintWriter pw) {
+ final long nowElapsed = SystemClock.elapsedRealtime();
+ pw.println("Alarms (" + SystemClock.elapsedRealtime() + ")");
+ pw.println(
+ "Next delay alarm in " + (mNextDelayExpiredElapsedMillis - nowElapsed)/1000 + "s");
+ pw.println("Next deadline alarm in " + (mNextJobExpiredElapsedMillis - nowElapsed)/1000
+ + "s");
+ pw.println("Tracking:");
+ for (JobStatus ts : mTrackedJobs) {
+ pw.println(String.valueOf(ts.hashCode()).substring(0, 3) + ".."
+ + ": (" + (ts.hasTimingDelayConstraint() ? ts.getEarliestRunTime() : "N/A")
+ + ", " + (ts.hasDeadlineConstraint() ?ts.getLatestRunTimeElapsed() : "N/A")
+ + ")");
+ }
+ }
+} \ No newline at end of file
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 737ffda77c93..835b0941abc2 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -130,7 +130,8 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
mOwnerPid = ownerPid;
mOwnerUid = ownerUid;
mUserId = userId;
- mSessionInfo = new MediaSessionInfo(UUID.randomUUID().toString(), ownerPackageName);
+ mSessionInfo = new MediaSessionInfo(UUID.randomUUID().toString(), ownerPackageName,
+ ownerPid);
mTag = tag;
mController = new ControllerStub();
mSession = new SessionStub();
@@ -943,6 +944,11 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
@Override
+ public MediaSessionInfo getSessionInfo() {
+ return mSessionInfo;
+ }
+
+ @Override
public void play() throws RemoteException {
mSessionCb.play();
}
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 87665e103fcc..67065ba33a86 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -29,9 +29,11 @@ import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.media.IAudioService;
import android.media.routeprovider.RouteRequest;
+import android.media.session.IActiveSessionsListener;
import android.media.session.ISession;
import android.media.session.ISessionCallback;
import android.media.session.ISessionManager;
+import android.media.session.MediaSessionToken;
import android.media.session.RouteInfo;
import android.media.session.RouteOptions;
import android.media.session.MediaSession;
@@ -39,6 +41,7 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ResultReceiver;
@@ -75,10 +78,12 @@ public class MediaSessionService extends SystemService implements Monitor {
private final ArrayList<MediaSessionRecord> mAllSessions = new ArrayList<MediaSessionRecord>();
private final SparseArray<UserRecord> mUserRecords = new SparseArray<UserRecord>();
+ private final ArrayList<SessionsListenerRecord> mSessionsListeners
+ = new ArrayList<SessionsListenerRecord>();
// private final ArrayList<MediaRouteProviderProxy> mProviders
// = new ArrayList<MediaRouteProviderProxy>();
private final Object mLock = new Object();
- private final Handler mHandler = new Handler();
+ private final MessageHandler mHandler = new MessageHandler();
private final PowerManager.WakeLock mMediaEventWakeLock;
private KeyguardManager mKeyguardManager;
@@ -200,15 +205,20 @@ public class MediaSessionService extends SystemService implements Monitor {
}
}
}
+ mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, record.getUserId(), 0);
}
public void onSessionPlaystateChange(MediaSessionRecord record, int oldState, int newState) {
+ boolean updateSessions = false;
synchronized (mLock) {
if (!mAllSessions.contains(record)) {
Log.d(TAG, "Unknown session changed playback state. Ignoring.");
return;
}
- mPriorityStack.onPlaystateChange(record, oldState, newState);
+ updateSessions = mPriorityStack.onPlaystateChange(record, oldState, newState);
+ }
+ if (updateSessions) {
+ mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, record.getUserId(), 0);
}
}
@@ -315,6 +325,8 @@ public class MediaSessionService extends SystemService implements Monitor {
// ignore exceptions while destroying a session.
}
session.onDestroy();
+
+ mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, session.getUserId(), 0);
}
private void enforcePackageName(String packageName, int uid) {
@@ -428,6 +440,8 @@ public class MediaSessionService extends SystemService implements Monitor {
UserRecord user = getOrCreateUser(userId);
user.addSessionLocked(session);
+ mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, userId, 0);
+
if (DEBUG) {
Log.d(TAG, "Created session for package " + callerPackageName + " with tag " + tag);
}
@@ -453,11 +467,43 @@ public class MediaSessionService extends SystemService implements Monitor {
return -1;
}
+ private int findIndexOfSessionsListenerLocked(IActiveSessionsListener listener) {
+ for (int i = mSessionsListeners.size() - 1; i >= 0; i--) {
+ if (mSessionsListeners.get(i).mListener == listener) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
private boolean isSessionDiscoverable(MediaSessionRecord record) {
// TODO probably want to check more than if it's active.
return record.isActive();
}
+ private void pushSessionsChanged(int userId) {
+ synchronized (mLock) {
+ List<MediaSessionRecord> records = mPriorityStack.getActiveSessions(userId);
+ int size = records.size();
+ ArrayList<MediaSessionToken> tokens = new ArrayList<MediaSessionToken>();
+ for (int i = 0; i < size; i++) {
+ tokens.add(new MediaSessionToken(records.get(i).getControllerBinder()));
+ }
+ for (int i = mSessionsListeners.size() - 1; i >= 0; i--) {
+ SessionsListenerRecord record = mSessionsListeners.get(i);
+ if (record.mUserId == UserHandle.USER_ALL || record.mUserId == userId) {
+ try {
+ record.mListener.onActiveSessionsChanged(tokens);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Dead ActiveSessionsListener in pushSessionsChanged, removing",
+ e);
+ mSessionsListeners.remove(i);
+ }
+ }
+ }
+ }
+ }
+
private MediaRouteProviderProxy.RoutesListener mRoutesCallback
= new MediaRouteProviderProxy.RoutesListener() {
@Override
@@ -613,6 +659,23 @@ public class MediaSessionService extends SystemService implements Monitor {
};
}
+ final class SessionsListenerRecord implements IBinder.DeathRecipient {
+ private final IActiveSessionsListener mListener;
+ private final int mUserId;
+
+ public SessionsListenerRecord(IActiveSessionsListener listener, int userId) {
+ mListener = listener;
+ mUserId = userId;
+ }
+
+ @Override
+ public void binderDied() {
+ synchronized (mLock) {
+ mSessionsListeners.remove(this);
+ }
+ }
+ }
+
class SessionManagerImpl extends ISessionManager.Stub {
private static final String EXTRA_WAKELOCK_ACQUIRED =
"android.media.AudioService.WAKELOCK_ACQUIRED";
@@ -648,20 +711,7 @@ public class MediaSessionService extends SystemService implements Monitor {
final long token = Binder.clearCallingIdentity();
try {
- String packageName = null;
- if (componentName != null) {
- // If they gave us a component name verify they own the
- // package
- packageName = componentName.getPackageName();
- enforcePackageName(packageName, uid);
- }
- // Check that they can make calls on behalf of the user and
- // get the final user id
- int resolvedUserId = ActivityManager.handleIncomingUser(pid, uid, userId,
- true /* allowAll */, true /* requireFull */, "getSessions", packageName);
- // Check if they have the permissions or their component is
- // enabled for the user they're calling from.
- enforceMediaPermissions(componentName, pid, uid, resolvedUserId);
+ int resolvedUserId = verifySessionsRequest(componentName, userId, pid, uid);
ArrayList<IBinder> binders = new ArrayList<IBinder>();
synchronized (mLock) {
ArrayList<MediaSessionRecord> records = mPriorityStack
@@ -677,6 +727,52 @@ public class MediaSessionService extends SystemService implements Monitor {
}
}
+ @Override
+ public void addSessionsListener(IActiveSessionsListener listener,
+ ComponentName componentName, int userId) throws RemoteException {
+ final int pid = Binder.getCallingPid();
+ final int uid = Binder.getCallingUid();
+ final long token = Binder.clearCallingIdentity();
+
+ try {
+ int resolvedUserId = verifySessionsRequest(componentName, userId, pid, uid);
+ synchronized (mLock) {
+ int index = findIndexOfSessionsListenerLocked(listener);
+ if (index != -1) {
+ Log.w(TAG, "ActiveSessionsListener is already added, ignoring");
+ return;
+ }
+ SessionsListenerRecord record = new SessionsListenerRecord(listener,
+ resolvedUserId);
+ try {
+ listener.asBinder().linkToDeath(record, 0);
+ } catch (RemoteException e) {
+ Log.e(TAG, "ActiveSessionsListener is dead, ignoring it", e);
+ return;
+ }
+ mSessionsListeners.add(record);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ @Override
+ public void removeSessionsListener(IActiveSessionsListener listener)
+ throws RemoteException {
+ synchronized (mLock) {
+ int index = findIndexOfSessionsListenerLocked(listener);
+ if (index != -1) {
+ SessionsListenerRecord record = mSessionsListeners.remove(index);
+ try {
+ record.mListener.asBinder().unlinkToDeath(record, 0);
+ } catch (Exception e) {
+ // ignore exceptions, the record is being removed
+ }
+ }
+ }
+ }
+
/**
* Handles the dispatching of the media button events to one of the
* registered listeners, or if there was none, broadcast an
@@ -764,6 +860,25 @@ public class MediaSessionService extends SystemService implements Monitor {
}
}
+ private int verifySessionsRequest(ComponentName componentName, int userId, final int pid,
+ final int uid) {
+ String packageName = null;
+ if (componentName != null) {
+ // If they gave us a component name verify they own the
+ // package
+ packageName = componentName.getPackageName();
+ enforcePackageName(packageName, uid);
+ }
+ // Check that they can make calls on behalf of the user and
+ // get the final user id
+ int resolvedUserId = ActivityManager.handleIncomingUser(pid, uid, userId,
+ true /* allowAll */, true /* requireFull */, "getSessions", packageName);
+ // Check if they have the permissions or their component is
+ // enabled for the user they're calling from.
+ enforceMediaPermissions(componentName, pid, uid, resolvedUserId);
+ return resolvedUserId;
+ }
+
private void dispatchAdjustVolumeByLocked(int suggestedStream, int delta, int flags,
MediaSessionRecord session) {
int direction = 0;
@@ -781,25 +896,36 @@ public class MediaSessionService extends SystemService implements Monitor {
}
if (session == null) {
- for (int i = 0; i < steps; i++) {
- try {
- mAudioService.adjustSuggestedStreamVolume(direction, suggestedStream,
- flags, getContext().getOpPackageName());
- } catch (RemoteException e) {
- Log.e(TAG, "Error adjusting default volume.", e);
+ try {
+ if (delta == 0) {
+ mAudioService.adjustSuggestedStreamVolume(delta, suggestedStream, flags,
+ getContext().getOpPackageName());
+ } else {
+ for (int i = 0; i < steps; i++) {
+ mAudioService.adjustSuggestedStreamVolume(direction, suggestedStream,
+ flags, getContext().getOpPackageName());
+ }
}
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error adjusting default volume.", e);
}
} else {
if (session.getPlaybackType() == MediaSession.VOLUME_TYPE_LOCAL) {
- for (int i = 0; i < steps; i++) {
- try {
- mAudioService.adjustSuggestedStreamVolume(direction,
+ try {
+ if (delta == 0) {
+ mAudioService.adjustSuggestedStreamVolume(delta,
session.getAudioStream(), flags,
getContext().getOpPackageName());
- } catch (RemoteException e) {
- Log.e(TAG, "Error adjusting volume for stream "
- + session.getAudioStream(), e);
+ } else {
+ for (int i = 0; i < steps; i++) {
+ mAudioService.adjustSuggestedStreamVolume(direction,
+ session.getAudioStream(), flags,
+ getContext().getOpPackageName());
+ }
}
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error adjusting volume for stream "
+ + session.getAudioStream(), e);
}
} else if (session.getPlaybackType() == MediaSession.VOLUME_TYPE_REMOTE) {
session.adjustVolumeBy(delta);
@@ -994,4 +1120,20 @@ public class MediaSessionService extends SystemService implements Monitor {
};
}
+ final class MessageHandler extends Handler {
+ private static final int MSG_SESSIONS_CHANGED = 1;
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_SESSIONS_CHANGED:
+ pushSessionsChanged(msg.arg1);
+ break;
+ }
+ }
+
+ public void post(int what, int arg1, int arg2) {
+ obtainMessage(what, arg1, arg2).sendToTarget();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java
index 803dee296fb2..144ccfafc018 100644
--- a/services/core/java/com/android/server/media/MediaSessionStack.java
+++ b/services/core/java/com/android/server/media/MediaSessionStack.java
@@ -88,16 +88,19 @@ public class MediaSessionStack {
* @param record The record that changed.
* @param oldState Its old playback state.
* @param newState Its new playback state.
+ * @return true if the priority order was updated, false otherwise.
*/
- public void onPlaystateChange(MediaSessionRecord record, int oldState, int newState) {
+ public boolean onPlaystateChange(MediaSessionRecord record, int oldState, int newState) {
if (shouldUpdatePriority(oldState, newState)) {
mSessions.remove(record);
mSessions.add(0, record);
clearCache();
+ return true;
} else if (newState == PlaybackState.STATE_PAUSED) {
// Just clear the volume cache in this case
mCachedVolumeDefault = null;
}
+ return false;
}
/**
diff --git a/services/core/java/com/android/server/net/IpConfigStore.java b/services/core/java/com/android/server/net/IpConfigStore.java
index aee767922524..bb0d5fe60884 100644
--- a/services/core/java/com/android/server/net/IpConfigStore.java
+++ b/services/core/java/com/android/server/net/IpConfigStore.java
@@ -100,7 +100,7 @@ public class IpConfigStore {
out.writeInt(0);
}
}
- for (InetAddress inetAddr : linkProperties.getDnses()) {
+ for (InetAddress inetAddr : linkProperties.getDnsServers()) {
out.writeUTF(DNS_KEY);
out.writeUTF(inetAddr.getHostAddress());
}
@@ -232,7 +232,7 @@ public class IpConfigStore {
}
linkProperties.addRoute(new RouteInfo(dest, gateway));
} else if (key.equals(DNS_KEY)) {
- linkProperties.addDns(
+ linkProperties.addDnsServer(
NetworkUtils.numericToInetAddress(in.readUTF()));
} else if (key.equals(PROXY_SETTINGS_KEY)) {
proxySettings = ProxySettings.valueOf(in.readUTF());
diff --git a/services/core/java/com/android/server/notification/NotificationComparator.java b/services/core/java/com/android/server/notification/NotificationComparator.java
index b30baea157ce..6cd401903db7 100644
--- a/services/core/java/com/android/server/notification/NotificationComparator.java
+++ b/services/core/java/com/android/server/notification/NotificationComparator.java
@@ -41,6 +41,6 @@ public class NotificationComparator
return -1 * Float.compare(leftPeple, rightPeople);
}
// then break ties by time, most recent first
- return -1 * Long.compare(lhs.sbn.getPostTime(), rhs.sbn.getPostTime());
+ return -1 * Long.compare(lhs.getRankingTimeMs(), rhs.getRankingTimeMs());
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index 30d4fecdbd9d..13fb986cc5f9 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -54,6 +54,9 @@ public final class NotificationRecord {
// InterceptedNotifications needs to know if this has been previously evaluated.
private boolean mTouchedByZen;
+ // The timestamp used for ranking.
+ private long mRankingTimeMs;
+
// Is this record an update of an old record?
public boolean isUpdate;
@@ -61,6 +64,7 @@ public final class NotificationRecord {
{
this.sbn = sbn;
this.score = score;
+ mRankingTimeMs = calculateRankingTimeMs(0L);
}
// copy any notes that the ranking system may have made before the update
@@ -69,6 +73,7 @@ public final class NotificationRecord {
mRecentlyIntrusive = previous.mRecentlyIntrusive;
mTouchedByZen = previous.mTouchedByZen;
mIntercept = previous.mIntercept;
+ mRankingTimeMs = calculateRankingTimeMs(previous.getRankingTimeMs());
}
public Notification getNotification() { return sbn.getNotification(); }
@@ -139,6 +144,7 @@ public final class NotificationRecord {
pw.println(prefix + " mContactAffinity=" + mContactAffinity);
pw.println(prefix + " mRecentlyIntrusive=" + mRecentlyIntrusive);
pw.println(prefix + " mIntercept=" + mIntercept);
+ pw.println(prefix + " mRankingTimeMs=" + mRankingTimeMs);
}
@@ -206,4 +212,29 @@ public final class NotificationRecord {
mTouchedByZen = true;
}
+ /**
+ * Returns the timestamp to use for time-based sorting in the ranker.
+ */
+ public long getRankingTimeMs() {
+ return mRankingTimeMs;
+ }
+
+ /**
+ * @param previousRankingTimeMs for updated notifications, {@link #getRankingTimeMs()}
+ * of the previous notification record, 0 otherwise
+ */
+ private long calculateRankingTimeMs(long previousRankingTimeMs) {
+ Notification n = getNotification();
+ // Take developer provided 'when', unless it's in the future.
+ if (n.when != 0 && n.when <= sbn.getPostTime()) {
+ return n.when;
+ }
+ // If we've ranked a previous instance with a timestamp, inherit it. This case is
+ // important in order to have ranking stability for updating notifications.
+ if (previousRankingTimeMs > 0) {
+ return previousRankingTimeMs;
+ }
+ return sbn.getPostTime();
+ }
+
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a445392f4c73..407ecb8e169c 100755
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4988,6 +4988,7 @@ public class PackageManagerService extends IPackageManager.Stub {
mResolveActivity.packageName = mAndroidApplication.packageName;
mResolveActivity.processName = "system:ui";
mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
+ mResolveActivity.documentLaunchMode = ActivityInfo.DOCUMENT_LAUNCH_NEVER;
mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
mResolveActivity.theme = R.style.Theme_Holo_Dialog_Alert;
mResolveActivity.exported = true;
@@ -7792,13 +7793,9 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public boolean getApplicationBlockedSettingAsUser(String packageName, int userId) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true,
+ "getApplicationBlocked for user " + userId);
PackageSetting pkgSetting;
- final int uid = Binder.getCallingUid();
- if (UserHandle.getUserId(uid) != userId) {
- mContext.enforceCallingPermission(
- android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
- "getApplicationBlocked for user " + userId);
- }
long callingId = Binder.clearCallingIdentity();
try {
// writer
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 102b2d40448a..a8f61160a8b6 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1268,7 +1268,8 @@ public class UserManagerService extends IUserManager.Stub {
private void sendProfileRemovedBroadcast(int parentUserId, int removedUserId) {
Intent managedProfileIntent = new Intent(Intent.ACTION_MANAGED_PROFILE_REMOVED);
- managedProfileIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ managedProfileIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY |
+ Intent.FLAG_RECEIVER_FOREGROUND);
managedProfileIntent.putExtra(Intent.EXTRA_USER, new UserHandle(removedUserId));
mContext.sendBroadcastAsUser(managedProfileIntent, new UserHandle(parentUserId), null);
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index aca17bff6a96..fb4b8f0b69c6 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -406,6 +406,15 @@ public final class PowerManagerService extends com.android.server.SystemService
// If true, the device is in low power mode.
private boolean mLowPowerModeEnabled;
+ // Current state of the low power mode setting.
+ private boolean mLowPowerModeSetting;
+
+ // Current state of whether the settings are allowing auto low power mode.
+ private boolean mAutoLowPowerModeEnabled;
+
+ // True if the battery level is currently considered low.
+ private boolean mBatteryLevelLow;
+
private final ArrayList<PowerManagerInternal.LowPowerModeListener> mLowPowerModeListeners
= new ArrayList<PowerManagerInternal.LowPowerModeListener>();
@@ -502,6 +511,7 @@ public final class PowerManagerService extends com.android.server.SystemService
// Register for broadcasts from other components of the system.
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
mContext.registerReceiver(new BatteryReceiver(), filter, null, mHandler);
filter = new IntentFilter();
@@ -551,6 +561,9 @@ public final class PowerManagerService extends com.android.server.SystemService
resolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE),
false, mSettingsObserver, UserHandle.USER_ALL);
+ resolver.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
+ false, mSettingsObserver, UserHandle.USER_ALL);
// Go.
readConfigurationLocked();
updateSettingsLocked();
@@ -638,7 +651,23 @@ public final class PowerManagerService extends com.android.server.SystemService
final boolean lowPowerModeEnabled = Settings.Global.getInt(resolver,
Settings.Global.LOW_POWER_MODE, 0) != 0;
- if (lowPowerModeEnabled != mLowPowerModeEnabled) {
+ final boolean autoLowPowerModeEnabled = Settings.Global.getInt(resolver,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15) != 0;
+ if (lowPowerModeEnabled != mLowPowerModeSetting
+ || autoLowPowerModeEnabled != mAutoLowPowerModeEnabled) {
+ mLowPowerModeSetting = lowPowerModeEnabled;
+ mAutoLowPowerModeEnabled = autoLowPowerModeEnabled;
+ updateLowPowerModeLocked();
+ }
+
+ mDirty |= DIRTY_SETTINGS;
+ }
+
+ void updateLowPowerModeLocked() {
+ final boolean lowPowerModeEnabled = !mIsPowered
+ && (mLowPowerModeSetting || (mAutoLowPowerModeEnabled && mBatteryLevelLow));
+ if (mLowPowerModeEnabled != lowPowerModeEnabled) {
+ mLowPowerModeEnabled = lowPowerModeEnabled;
powerHintInternal(POWER_HINT_LOW_POWER_MODE, lowPowerModeEnabled ? 1 : 0);
mLowPowerModeEnabled = lowPowerModeEnabled;
BackgroundThread.getHandler().post(new Runnable() {
@@ -652,11 +681,12 @@ public final class PowerManagerService extends com.android.server.SystemService
for (int i=0; i<listeners.size(); i++) {
listeners.get(i).onLowPowerModeChanged(lowPowerModeEnabled);
}
+ Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ mContext.sendBroadcast(intent);
}
});
}
-
- mDirty |= DIRTY_SETTINGS;
}
private void handleSettingsChangedLocked() {
@@ -1137,9 +1167,11 @@ public final class PowerManagerService extends com.android.server.SystemService
if ((dirty & DIRTY_BATTERY_STATE) != 0) {
final boolean wasPowered = mIsPowered;
final int oldPlugType = mPlugType;
+ final boolean oldLevelLow = mBatteryLevelLow;
mIsPowered = mBatteryService.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);
mPlugType = mBatteryService.getPlugType();
mBatteryLevel = mBatteryService.getBatteryLevel();
+ mBatteryLevelLow = mBatteryService.getBatteryLevelLow();
if (DEBUG_SPEW) {
Slog.d(TAG, "updateIsPoweredLocked: wasPowered=" + wasPowered
@@ -1175,6 +1207,10 @@ public final class PowerManagerService extends com.android.server.SystemService
mNotifier.onWirelessChargingStarted();
}
}
+
+ if (wasPowered != mIsPowered || oldLevelLow != mBatteryLevelLow) {
+ updateLowPowerModeLocked();
+ }
}
}
@@ -1896,6 +1932,12 @@ public final class PowerManagerService extends com.android.server.SystemService
}
}
+ private boolean isLowPowerModeInternal() {
+ synchronized (mLock) {
+ return mLowPowerModeEnabled;
+ }
+ }
+
private void handleBatteryStateChangedLocked() {
mDirty |= DIRTY_BATTERY_STATE;
updatePowerStateLocked();
@@ -2137,6 +2179,8 @@ public final class PowerManagerService extends com.android.server.SystemService
pw.println(" mRequestWaitForNegativeProximity=" + mRequestWaitForNegativeProximity);
pw.println(" mSandmanScheduled=" + mSandmanScheduled);
pw.println(" mSandmanSummoned=" + mSandmanSummoned);
+ pw.println(" mLowPowerModeEnabled=" + mLowPowerModeEnabled);
+ pw.println(" mBatteryLevelLow=" + mBatteryLevelLow);
pw.println(" mLastWakeTime=" + TimeUtils.formatUptime(mLastWakeTime));
pw.println(" mLastSleepTime=" + TimeUtils.formatUptime(mLastSleepTime));
pw.println(" mLastUserActivityTime=" + TimeUtils.formatUptime(mLastUserActivityTime));
@@ -2173,6 +2217,8 @@ public final class PowerManagerService extends com.android.server.SystemService
pw.println(" mDreamsEnabledSetting=" + mDreamsEnabledSetting);
pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting);
pw.println(" mDreamsActivateOnDockSetting=" + mDreamsActivateOnDockSetting);
+ pw.println(" mLowPowerModeSetting=" + mLowPowerModeSetting);
+ pw.println(" mAutoLowPowerModeEnabled=" + mAutoLowPowerModeEnabled);
pw.println(" mMinimumScreenOffTimeoutConfig=" + mMinimumScreenOffTimeoutConfig);
pw.println(" mMaximumScreenDimDurationConfig=" + mMaximumScreenDimDurationConfig);
pw.println(" mMaximumScreenDimRatioConfig=" + mMaximumScreenDimRatioConfig);
@@ -2764,6 +2810,16 @@ public final class PowerManagerService extends com.android.server.SystemService
}
}
+ @Override // Binder call
+ public boolean isPowerSaveMode() {
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ return isLowPowerModeInternal();
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
/**
* Reboots the device.
*
diff --git a/services/core/java/com/android/server/task/TaskManagerService.java b/services/core/java/com/android/server/task/TaskManagerService.java
deleted file mode 100644
index a5f865fd95f5..000000000000
--- a/services/core/java/com/android/server/task/TaskManagerService.java
+++ /dev/null
@@ -1,655 +0,0 @@
-/*
- * Copyright (C) 2014 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.task;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import android.app.task.ITaskManager;
-import android.app.task.Task;
-import android.app.task.TaskManager;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.util.Slog;
-import android.util.SparseArray;
-
-import com.android.server.task.controllers.BatteryController;
-import com.android.server.task.controllers.ConnectivityController;
-import com.android.server.task.controllers.IdleController;
-import com.android.server.task.controllers.StateController;
-import com.android.server.task.controllers.TaskStatus;
-import com.android.server.task.controllers.TimeController;
-
-import java.util.LinkedList;
-
-/**
- * Responsible for taking tasks representing work to be performed by a client app, and determining
- * based on the criteria specified when that task should be run against the client application's
- * endpoint.
- * Implements logic for scheduling, and rescheduling tasks. The TaskManagerService knows nothing
- * about constraints, or the state of active tasks. It receives callbacks from the various
- * controllers and completed tasks and operates accordingly.
- *
- * Note on locking: Any operations that manipulate {@link #mTasks} need to lock on that object, and
- * similarly for {@link #mActiveServices}. If both locks need to be held take mTasksSet first and then
- * mActiveService afterwards.
- * @hide
- */
-public class TaskManagerService extends com.android.server.SystemService
- implements StateChangedListener, TaskCompletedListener, TaskMapReadFinishedListener {
- // TODO: Switch this off for final version.
- static final boolean DEBUG = true;
- /** The number of concurrent tasks we run at one time. */
- private static final int MAX_TASK_CONTEXTS_COUNT = 3;
- static final String TAG = "TaskManager";
- /**
- * When a task fails, it gets rescheduled according to its backoff policy. To be nice, we allow
- * this amount of time from the rescheduled time by which the retry must occur.
- */
- private static final long RESCHEDULE_WINDOW_SLOP_MILLIS = 5000L;
-
- /** Master list of tasks. */
- private final TaskStore mTasks;
-
- static final int MSG_TASK_EXPIRED = 0;
- static final int MSG_CHECK_TASKS = 1;
-
- // Policy constants
- /**
- * Minimum # of idle tasks that must be ready in order to force the TM to schedule things
- * early.
- */
- private static final int MIN_IDLE_COUNT = 1;
- /**
- * Minimum # of connectivity tasks that must be ready in order to force the TM to schedule
- * things early.
- */
- private static final int MIN_CONNECTIVITY_COUNT = 2;
- /**
- * Minimum # of tasks (with no particular constraints) for which the TM will be happy running
- * some work early.
- */
- private static final int MIN_READY_TASKS_COUNT = 4;
-
- /**
- * Track Services that have currently active or pending tasks. The index is provided by
- * {@link TaskStatus#getServiceToken()}
- */
- private final List<TaskServiceContext> mActiveServices = new LinkedList<TaskServiceContext>();
- /** List of controllers that will notify this service of updates to tasks. */
- private List<StateController> mControllers;
- /**
- * Queue of pending tasks. The TaskServiceContext class will receive tasks from this list
- * when ready to execute them.
- */
- private final LinkedList<TaskStatus> mPendingTasks = new LinkedList<TaskStatus>();
-
- private final TaskHandler mHandler;
- private final TaskManagerStub mTaskManagerStub;
-
- /**
- * Entry point from client to schedule the provided task.
- * This will add the task to the
- * @param task Task object containing execution parameters
- * @param uId The package identifier of the application this task is for.
- * @param canPersistTask Whether or not the client has the appropriate permissions for persisting
- * of this task.
- * @return Result of this operation. See <code>TaskManager#RESULT_*</code> return codes.
- */
- public int schedule(Task task, int uId, boolean canPersistTask) {
- TaskStatus taskStatus = new TaskStatus(task, uId, canPersistTask);
- startTrackingTask(taskStatus);
- return TaskManager.RESULT_SUCCESS;
- }
-
- public List<Task> getPendingTasks(int uid) {
- ArrayList<Task> outList = new ArrayList<Task>();
- synchronized (mTasks) {
- for (TaskStatus ts : mTasks.getTasks()) {
- if (ts.getUid() == uid) {
- outList.add(ts.getTask());
- }
- }
- }
- return outList;
- }
-
- /**
- * Entry point from client to cancel all tasks originating from their uid.
- * This will remove the task from the master list, and cancel the task if it was staged for
- * execution or being executed.
- * @param uid To check against for removal of a task.
- */
- public void cancelTaskForUid(int uid) {
- // Remove from master list.
- synchronized (mTasks) {
- if (!mTasks.removeAllByUid(uid)) {
- // If it's not in the master list, it's nowhere.
- return;
- }
- }
- // Remove from pending queue.
- synchronized (mPendingTasks) {
- Iterator<TaskStatus> it = mPendingTasks.iterator();
- while (it.hasNext()) {
- TaskStatus ts = it.next();
- if (ts.getUid() == uid) {
- it.remove();
- }
- }
- }
- // Cancel if running.
- synchronized (mActiveServices) {
- for (TaskServiceContext tsc : mActiveServices) {
- if (tsc.getRunningTask().getUid() == uid) {
- tsc.cancelExecutingTask();
- }
- }
- }
- }
-
- /**
- * Entry point from client to cancel the task corresponding to the taskId provided.
- * This will remove the task from the master list, and cancel the task if it was staged for
- * execution or being executed.
- * @param uid Uid of the calling client.
- * @param taskId Id of the task, provided at schedule-time.
- */
- public void cancelTask(int uid, int taskId) {
- synchronized (mTasks) {
- if (!mTasks.remove(uid, taskId)) {
- // If it's not in the master list, it's nowhere.
- return;
- }
- }
- synchronized (mPendingTasks) {
- Iterator<TaskStatus> it = mPendingTasks.iterator();
- while (it.hasNext()) {
- TaskStatus ts = it.next();
- if (ts.getUid() == uid && ts.getTaskId() == taskId) {
- it.remove();
- // If we got it from pending, it didn't make it to active so return.
- return;
- }
- }
- }
- synchronized (mActiveServices) {
- for (TaskServiceContext tsc : mActiveServices) {
- if (tsc.getRunningTask().getUid() == uid &&
- tsc.getRunningTask().getTaskId() == taskId) {
- tsc.cancelExecutingTask();
- return;
- }
- }
- }
- }
-
- /**
- * Initializes the system service.
- * <p>
- * Subclasses must define a single argument constructor that accepts the context
- * and passes it to super.
- * </p>
- *
- * @param context The system server context.
- */
- public TaskManagerService(Context context) {
- super(context);
- mTasks = TaskStore.initAndGet(this);
- mHandler = new TaskHandler(context.getMainLooper());
- mTaskManagerStub = new TaskManagerStub();
- // Create the "runners".
- for (int i = 0; i < MAX_TASK_CONTEXTS_COUNT; i++) {
- mActiveServices.add(
- new TaskServiceContext(this, context.getMainLooper()));
- }
- // Create the controllers.
- mControllers = new LinkedList<StateController>();
- mControllers.add(ConnectivityController.get(this));
- mControllers.add(TimeController.get(this));
- mControllers.add(IdleController.get(this));
- mControllers.add(BatteryController.get(this));
- }
-
- @Override
- public void onStart() {
- publishBinderService(Context.TASK_SERVICE, mTaskManagerStub);
- }
-
- /**
- * Called when we have a task status object that we need to insert in our
- * {@link com.android.server.task.TaskStore}, and make sure all the relevant controllers know
- * about.
- */
- private void startTrackingTask(TaskStatus taskStatus) {
- synchronized (mTasks) {
- mTasks.add(taskStatus);
- }
- for (StateController controller : mControllers) {
- controller.maybeStartTrackingTask(taskStatus);
-
- }
- }
-
- /**
- * Called when we want to remove a TaskStatus object that we've finished executing. Returns the
- * object removed.
- */
- private boolean stopTrackingTask(TaskStatus taskStatus) {
- boolean removed;
- synchronized (mTasks) {
- // Remove from store as well as controllers.
- removed = mTasks.remove(taskStatus);
- }
- if (removed) {
- for (StateController controller : mControllers) {
- controller.maybeStopTrackingTask(taskStatus);
- }
- }
- return removed;
- }
-
- private boolean cancelTaskOnServiceContext(TaskStatus ts) {
- synchronized (mActiveServices) {
- for (TaskServiceContext tsc : mActiveServices) {
- if (tsc.getRunningTask() == ts) {
- tsc.cancelExecutingTask();
- return true;
- }
- }
- return false;
- }
- }
-
- /**
- * @param ts TaskStatus we are querying against.
- * @return Whether or not the task represented by the status object is currently being run or
- * is pending.
- */
- private boolean isCurrentlyActive(TaskStatus ts) {
- synchronized (mActiveServices) {
- for (TaskServiceContext serviceContext : mActiveServices) {
- if (serviceContext.getRunningTask() == ts) {
- return true;
- }
- }
- return false;
- }
- }
-
- /**
- * A task is rescheduled with exponential back-off if the client requests this from their
- * execution logic.
- * A caveat is for idle-mode tasks, for which the idle-mode constraint will usurp the
- * timeliness of the reschedule. For an idle-mode task, no deadline is given.
- * @param failureToReschedule Provided task status that we will reschedule.
- * @return A newly instantiated TaskStatus with the same constraints as the last task except
- * with adjusted timing constraints.
- */
- private TaskStatus getRescheduleTaskForFailure(TaskStatus failureToReschedule) {
- final long elapsedNowMillis = SystemClock.elapsedRealtime();
- final Task task = failureToReschedule.getTask();
-
- final long initialBackoffMillis = task.getInitialBackoffMillis();
- final int backoffAttempt = failureToReschedule.getNumFailures() + 1;
- long newEarliestRuntimeElapsed = elapsedNowMillis;
-
- switch (task.getBackoffPolicy()) {
- case Task.BackoffPolicy.LINEAR:
- newEarliestRuntimeElapsed += initialBackoffMillis * backoffAttempt;
- break;
- default:
- if (DEBUG) {
- Slog.v(TAG, "Unrecognised back-off policy, defaulting to exponential.");
- }
- case Task.BackoffPolicy.EXPONENTIAL:
- newEarliestRuntimeElapsed += Math.pow(initialBackoffMillis, backoffAttempt);
- break;
- }
- long newLatestRuntimeElapsed = failureToReschedule.hasIdleConstraint() ? Long.MAX_VALUE
- : newEarliestRuntimeElapsed + RESCHEDULE_WINDOW_SLOP_MILLIS;
- return new TaskStatus(failureToReschedule, newEarliestRuntimeElapsed,
- newLatestRuntimeElapsed, backoffAttempt);
- }
-
- /**
- * Called after a periodic has executed so we can to re-add it. We take the last execution time
- * of the task to be the time of completion (i.e. the time at which this function is called).
- * This could be inaccurate b/c the task can run for as long as
- * {@link com.android.server.task.TaskServiceContext#EXECUTING_TIMESLICE_MILLIS}, but will lead
- * to underscheduling at least, rather than if we had taken the last execution time to be the
- * start of the execution.
- * @return A new task representing the execution criteria for this instantiation of the
- * recurring task.
- */
- private TaskStatus getRescheduleTaskForPeriodic(TaskStatus periodicToReschedule) {
- final long elapsedNow = SystemClock.elapsedRealtime();
- // Compute how much of the period is remaining.
- long runEarly = Math.max(periodicToReschedule.getLatestRunTimeElapsed() - elapsedNow, 0);
- long newEarliestRunTimeElapsed = elapsedNow + runEarly;
- long period = periodicToReschedule.getTask().getIntervalMillis();
- long newLatestRuntimeElapsed = newEarliestRunTimeElapsed + period;
-
- if (DEBUG) {
- Slog.v(TAG, "Rescheduling executed periodic. New execution window [" +
- newEarliestRunTimeElapsed/1000 + ", " + newLatestRuntimeElapsed/1000 + "]s");
- }
- return new TaskStatus(periodicToReschedule, newEarliestRunTimeElapsed,
- newLatestRuntimeElapsed, 0 /* backoffAttempt */);
- }
-
- // TaskCompletedListener implementations.
-
- /**
- * A task just finished executing. We fetch the
- * {@link com.android.server.task.controllers.TaskStatus} from the store and depending on
- * whether we want to reschedule we readd it to the controllers.
- * @param taskStatus Completed task.
- * @param needsReschedule Whether the implementing class should reschedule this task.
- */
- @Override
- public void onTaskCompleted(TaskStatus taskStatus, boolean needsReschedule) {
- if (!stopTrackingTask(taskStatus)) {
- if (DEBUG) {
- Slog.e(TAG, "Error removing task: could not find task to remove. Was task" +
- "removed while executing?");
- }
- return;
- }
- if (needsReschedule) {
- TaskStatus rescheduled = getRescheduleTaskForFailure(taskStatus);
- startTrackingTask(rescheduled);
- } else if (taskStatus.getTask().isPeriodic()) {
- TaskStatus rescheduledPeriodic = getRescheduleTaskForPeriodic(taskStatus);
- startTrackingTask(rescheduledPeriodic);
- }
- mHandler.obtainMessage(MSG_CHECK_TASKS).sendToTarget();
- }
-
- // StateChangedListener implementations.
-
- /**
- * Off-board work to our handler thread as quickly as possible, b/c this call is probably being
- * made on the main thread.
- * For now this takes the task and if it's ready to run it will run it. In future we might not
- * provide the task, so that the StateChangedListener has to run through its list of tasks to
- * see which are ready. This will further decouple the controllers from the execution logic.
- */
- @Override
- public void onControllerStateChanged() {
- // Post a message to to run through the list of tasks and start/stop any that are eligible.
- mHandler.obtainMessage(MSG_CHECK_TASKS).sendToTarget();
- }
-
- @Override
- public void onTaskDeadlineExpired(TaskStatus taskStatus) {
- mHandler.obtainMessage(MSG_TASK_EXPIRED, taskStatus);
- }
-
- /**
- * Disk I/O is finished, take the list of tasks we read from disk and add them to our
- * {@link TaskStore}.
- * This is run on the {@link com.android.server.IoThread} instance, which is a separate thread,
- * and is called once at boot.
- */
- @Override
- public void onTaskMapReadFinished(List<TaskStatus> tasks) {
- synchronized (mTasks) {
- for (TaskStatus ts : tasks) {
- if (mTasks.contains(ts)) {
- // An app with BOOT_COMPLETED *might* have decided to reschedule their task, in
- // the same amount of time it took us to read it from disk. If this is the case
- // we leave it be.
- continue;
- }
- startTrackingTask(ts);
- }
- }
- }
-
- private class TaskHandler extends Handler {
-
- public TaskHandler(Looper looper) {
- super(looper);
- }
-
- @Override
- public void handleMessage(Message message) {
- switch (message.what) {
- case MSG_TASK_EXPIRED:
- final TaskStatus expired = (TaskStatus) message.obj; // Unused for now.
- queueReadyTasksForExecutionH();
- break;
- case MSG_CHECK_TASKS:
- // Check the list of tasks and run some of them if we feel inclined.
- maybeQueueReadyTasksForExecutionH();
- break;
- }
- maybeRunNextPendingTaskH();
- // Don't remove TASK_EXPIRED in case one came along while processing the queue.
- removeMessages(MSG_CHECK_TASKS);
- }
-
- /**
- * Run through list of tasks and execute all possible - at least one is expired so we do
- * as many as we can.
- */
- private void queueReadyTasksForExecutionH() {
- synchronized (mTasks) {
- for (TaskStatus ts : mTasks.getTasks()) {
- final boolean criteriaSatisfied = ts.isReady();
- final boolean isRunning = isCurrentlyActive(ts);
- if (criteriaSatisfied && !isRunning) {
- synchronized (mPendingTasks) {
- mPendingTasks.add(ts);
- }
- } else if (!criteriaSatisfied && isRunning) {
- cancelTaskOnServiceContext(ts);
- }
- }
- }
- }
-
- /**
- * The state of at least one task has changed. Here is where we could enforce various
- * policies on when we want to execute tasks.
- * Right now the policy is such:
- * If >1 of the ready tasks is idle mode we send all of them off
- * if more than 2 network connectivity tasks are ready we send them all off.
- * If more than 4 tasks total are ready we send them all off.
- * TODO: It would be nice to consolidate these sort of high-level policies somewhere.
- */
- private void maybeQueueReadyTasksForExecutionH() {
- synchronized (mTasks) {
- int idleCount = 0;
- int connectivityCount = 0;
- List<TaskStatus> runnableTasks = new ArrayList<TaskStatus>();
- for (TaskStatus ts : mTasks.getTasks()) {
- final boolean criteriaSatisfied = ts.isReady();
- final boolean isRunning = isCurrentlyActive(ts);
- if (criteriaSatisfied && !isRunning) {
- if (ts.hasIdleConstraint()) {
- idleCount++;
- }
- if (ts.hasConnectivityConstraint() || ts.hasMeteredConstraint()) {
- connectivityCount++;
- }
- runnableTasks.add(ts);
- } else if (!criteriaSatisfied && isRunning) {
- cancelTaskOnServiceContext(ts);
- }
- }
- if (idleCount >= MIN_IDLE_COUNT || connectivityCount >= MIN_CONNECTIVITY_COUNT ||
- runnableTasks.size() >= MIN_READY_TASKS_COUNT) {
- for (TaskStatus ts : runnableTasks) {
- synchronized (mPendingTasks) {
- mPendingTasks.add(ts);
- }
- }
- }
- }
- }
-
- /**
- * Checks the state of the pending queue against any available
- * {@link com.android.server.task.TaskServiceContext} that can run a new task.
- * {@link com.android.server.task.TaskServiceContext}.
- */
- private void maybeRunNextPendingTaskH() {
- TaskStatus nextPending;
- synchronized (mPendingTasks) {
- nextPending = mPendingTasks.poll();
- }
- if (nextPending == null) {
- return;
- }
-
- synchronized (mActiveServices) {
- for (TaskServiceContext tsc : mActiveServices) {
- if (tsc.isAvailable()) {
- if (tsc.executeRunnableTask(nextPending)) {
- return;
- }
- }
- }
- }
- }
- }
-
- /**
- * Binder stub trampoline implementation
- */
- final class TaskManagerStub extends ITaskManager.Stub {
- /** Cache determination of whether a given app can persist tasks
- * key is uid of the calling app; value is undetermined/true/false
- */
- private final SparseArray<Boolean> mPersistCache = new SparseArray<Boolean>();
-
- // Determine whether the caller is allowed to persist tasks, with a small cache
- // because the lookup is expensive enough that we'd like to avoid repeating it.
- // This must be called from within the calling app's binder identity!
- private boolean canCallerPersistTasks() {
- final boolean canPersist;
- final int callingUid = Binder.getCallingUid();
- synchronized (mPersistCache) {
- Boolean cached = mPersistCache.get(callingUid);
- if (cached) {
- canPersist = cached.booleanValue();
- } else {
- // Persisting tasks is tantamount to running at boot, so we permit
- // it when the app has declared that it uses the RECEIVE_BOOT_COMPLETED
- // permission
- int result = getContext().checkCallingPermission(
- android.Manifest.permission.RECEIVE_BOOT_COMPLETED);
- canPersist = (result == PackageManager.PERMISSION_GRANTED);
- mPersistCache.put(callingUid, canPersist);
- }
- }
- return canPersist;
- }
-
- // ITaskManager implementation
- @Override
- public int schedule(Task task) throws RemoteException {
- final boolean canPersist = canCallerPersistTasks();
- final int uid = Binder.getCallingUid();
-
- long ident = Binder.clearCallingIdentity();
- try {
- return TaskManagerService.this.schedule(task, uid, canPersist);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
-
- @Override
- public List<Task> getAllPendingTasks() throws RemoteException {
- final int uid = Binder.getCallingUid();
-
- long ident = Binder.clearCallingIdentity();
- try {
- return TaskManagerService.this.getPendingTasks(uid);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
-
- @Override
- public void cancelAll() throws RemoteException {
- final int uid = Binder.getCallingUid();
-
- long ident = Binder.clearCallingIdentity();
- try {
- TaskManagerService.this.cancelTaskForUid(uid);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
-
- @Override
- public void cancel(int taskId) throws RemoteException {
- final int uid = Binder.getCallingUid();
-
- long ident = Binder.clearCallingIdentity();
- try {
- TaskManagerService.this.cancelTask(uid, taskId);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
-
- /**
- * "dumpsys" infrastructure
- */
- @Override
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
-
- long identityToken = Binder.clearCallingIdentity();
- try {
- TaskManagerService.this.dumpInternal(pw);
- } finally {
- Binder.restoreCallingIdentity(identityToken);
- }
- }
- };
-
- void dumpInternal(PrintWriter pw) {
- synchronized (mTasks) {
- pw.print("Registered tasks:");
- if (mTasks.size() > 0) {
- for (TaskStatus ts : mTasks.getTasks()) {
- pw.println();
- ts.dump(pw, " ");
- }
- } else {
- pw.println();
- pw.println("No tasks scheduled.");
- }
- }
- pw.println();
- }
-}
diff --git a/services/core/java/com/android/server/task/controllers/ConnectivityController.java b/services/core/java/com/android/server/task/controllers/ConnectivityController.java
deleted file mode 100644
index 48194604d2cd..000000000000
--- a/services/core/java/com/android/server/task/controllers/ConnectivityController.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2014 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.task.controllers;
-
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.UserHandle;
-import android.util.Log;
-import android.util.Slog;
-
-import com.android.server.task.StateChangedListener;
-import com.android.server.task.TaskManagerService;
-
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Handles changes in connectivity.
- * We are only interested in metered vs. unmetered networks, and we're interested in them on a
- * per-user basis.
- */
-public class ConnectivityController extends StateController {
- private static final String TAG = "TaskManager.Connectivity";
-
- private final List<TaskStatus> mTrackedTasks = new LinkedList<TaskStatus>();
- private final BroadcastReceiver mConnectivityChangedReceiver =
- new ConnectivityChangedReceiver();
- /** Singleton. */
- private static ConnectivityController mSingleton;
-
- /** Track whether the latest active network is metered. */
- private boolean mMetered;
- /** Track whether the latest active network is connected. */
- private boolean mConnectivity;
-
- public static synchronized ConnectivityController get(TaskManagerService taskManager) {
- if (mSingleton == null) {
- mSingleton = new ConnectivityController(taskManager, taskManager.getContext());
- }
- return mSingleton;
- }
-
- private ConnectivityController(StateChangedListener stateChangedListener, Context context) {
- super(stateChangedListener, context);
- // Register connectivity changed BR.
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
- mContext.registerReceiverAsUser(
- mConnectivityChangedReceiver, UserHandle.ALL, intentFilter, null, null);
- }
-
- @Override
- public synchronized void maybeStartTrackingTask(TaskStatus taskStatus) {
- if (taskStatus.hasConnectivityConstraint() || taskStatus.hasMeteredConstraint()) {
- taskStatus.connectivityConstraintSatisfied.set(mConnectivity);
- taskStatus.meteredConstraintSatisfied.set(mMetered);
- mTrackedTasks.add(taskStatus);
- }
- }
-
- @Override
- public synchronized void maybeStopTrackingTask(TaskStatus taskStatus) {
- mTrackedTasks.remove(taskStatus);
- }
-
- /**
- * @param userId Id of the user for whom we are updating the connectivity state.
- */
- private void updateTrackedTasks(int userId) {
- boolean changed = false;
- for (TaskStatus ts : mTrackedTasks) {
- if (ts.getUserId() != userId) {
- continue;
- }
- boolean prevIsConnected = ts.connectivityConstraintSatisfied.getAndSet(mConnectivity);
- boolean prevIsMetered = ts.meteredConstraintSatisfied.getAndSet(mMetered);
- if (prevIsConnected != mConnectivity || prevIsMetered != mMetered) {
- changed = true;
- }
- }
- if (changed) {
- mStateChangedListener.onControllerStateChanged();
- }
- }
-
- class ConnectivityChangedReceiver extends BroadcastReceiver {
- /**
- * We'll receive connectivity changes for each user here, which we process independently.
- * We are only interested in the active network here. We're only interested in the active
- * network, b/c the end result of this will be for apps to try to hit the network.
- * @param context The Context in which the receiver is running.
- * @param intent The Intent being received.
- */
- // TODO: Test whether this will be called twice for each user.
- @Override
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- final int networkType =
- intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE,
- ConnectivityManager.TYPE_NONE);
- // Connectivity manager for THIS context - important!
- final ConnectivityManager connManager = (ConnectivityManager)
- context.getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo activeNetwork = connManager.getActiveNetworkInfo();
- // This broadcast gets sent a lot, only update if the active network has changed.
- if (activeNetwork != null && activeNetwork.getType() == networkType) {
- final int userid = context.getUserId();
- mMetered = false;
- mConnectivity =
- !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
- if (mConnectivity) { // No point making the call if we know there's no conn.
- mMetered = connManager.isActiveNetworkMetered();
- }
- updateTrackedTasks(userid);
- }
- } else {
- if (DEBUG) {
- Slog.d(TAG, "Unrecognised action in intent: " + action);
- }
- }
- }
- };
-}
diff --git a/services/core/java/com/android/server/task/controllers/TimeController.java b/services/core/java/com/android/server/task/controllers/TimeController.java
deleted file mode 100644
index 8c6dd2715ce8..000000000000
--- a/services/core/java/com/android/server/task/controllers/TimeController.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) 2014 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.task.controllers;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.SystemClock;
-
-import com.android.server.task.StateChangedListener;
-import com.android.server.task.TaskManagerService;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * This class sets an alarm for the next expiring task, and determines whether a task's minimum
- * delay has been satisfied.
- */
-public class TimeController extends StateController {
- private static final String TAG = "TaskManager.Time";
- private static final String ACTION_TASK_EXPIRED =
- "android.content.taskmanager.TASK_EXPIRED";
- private static final String ACTION_TASK_DELAY_EXPIRED =
- "android.content.taskmanager.TASK_DELAY_EXPIRED";
-
- /** Set an alarm for the next task expiry. */
- private final PendingIntent mTaskExpiredAlarmIntent;
- /** Set an alarm for the next task delay expiry. This*/
- private final PendingIntent mNextDelayExpiredAlarmIntent;
-
- private long mNextTaskExpiredElapsedMillis;
- private long mNextDelayExpiredElapsedMillis;
-
- private AlarmManager mAlarmService = null;
- /** List of tracked tasks, sorted asc. by deadline */
- private final List<TaskStatus> mTrackedTasks = new LinkedList<TaskStatus>();
- /** Singleton. */
- private static TimeController mSingleton;
-
- public static synchronized TimeController get(TaskManagerService taskManager) {
- if (mSingleton == null) {
- mSingleton = new TimeController(taskManager, taskManager.getContext());
- }
- return mSingleton;
- }
-
- private TimeController(StateChangedListener stateChangedListener, Context context) {
- super(stateChangedListener, context);
- mTaskExpiredAlarmIntent =
- PendingIntent.getBroadcast(mContext, 0 /* ignored */,
- new Intent(ACTION_TASK_EXPIRED), 0);
- mNextDelayExpiredAlarmIntent =
- PendingIntent.getBroadcast(mContext, 0 /* ignored */,
- new Intent(ACTION_TASK_DELAY_EXPIRED), 0);
-
- // Register BR for these intents.
- IntentFilter intentFilter = new IntentFilter(ACTION_TASK_EXPIRED);
- intentFilter.addAction(ACTION_TASK_DELAY_EXPIRED);
- mContext.registerReceiver(mAlarmExpiredReceiver, intentFilter);
- }
-
- /**
- * Check if the task has a timing constraint, and if so determine where to insert it in our
- * list.
- */
- @Override
- public synchronized void maybeStartTrackingTask(TaskStatus task) {
- if (task.hasTimingDelayConstraint()) {
- ListIterator<TaskStatus> it = mTrackedTasks.listIterator(mTrackedTasks.size());
- while (it.hasPrevious()) {
- TaskStatus ts = it.previous();
- if (ts.equals(task)) {
- // Update
- it.remove();
- it.add(task);
- break;
- } else if (ts.getLatestRunTimeElapsed() < task.getLatestRunTimeElapsed()) {
- // Insert
- it.add(task);
- break;
- }
- }
- maybeUpdateAlarms(task.getEarliestRunTime(), task.getLatestRunTimeElapsed());
- }
- }
-
- /**
- * If the task passed in is being tracked, figure out if we need to update our alarms, and if
- * so, update them.
- */
- @Override
- public synchronized void maybeStopTrackingTask(TaskStatus taskStatus) {
- if (mTrackedTasks.remove(taskStatus)) {
- if (mNextDelayExpiredElapsedMillis <= taskStatus.getEarliestRunTime()) {
- handleTaskDelayExpired();
- }
- if (mNextTaskExpiredElapsedMillis <= taskStatus.getLatestRunTimeElapsed()) {
- handleTaskDeadlineExpired();
- }
- }
- }
-
- /**
- * Set an alarm with the {@link android.app.AlarmManager} for the next time at which a task's
- * delay will expire.
- * This alarm <b>will not</b> wake up the phone.
- */
- private void setDelayExpiredAlarm(long alarmTimeElapsedMillis) {
- ensureAlarmService();
- mAlarmService.set(AlarmManager.ELAPSED_REALTIME, alarmTimeElapsedMillis,
- mNextDelayExpiredAlarmIntent);
- }
-
- /**
- * Set an alarm with the {@link android.app.AlarmManager} for the next time at which a task's
- * deadline will expire.
- * This alarm <b>will</b> wake up the phone.
- */
- private void setDeadlineExpiredAlarm(long alarmTimeElapsedMillis) {
- ensureAlarmService();
- mAlarmService.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, alarmTimeElapsedMillis,
- mTaskExpiredAlarmIntent);
- }
-
- /**
- * Determines whether this controller can stop tracking the given task.
- * The controller is no longer interested in a task once its time constraint is satisfied, and
- * the task's deadline is fulfilled - unlike other controllers a time constraint can't toggle
- * back and forth.
- */
- private boolean canStopTrackingTask(TaskStatus taskStatus) {
- return (!taskStatus.hasTimingDelayConstraint() ||
- taskStatus.timeDelayConstraintSatisfied.get()) &&
- (!taskStatus.hasDeadlineConstraint() ||
- taskStatus.deadlineConstraintSatisfied.get());
- }
-
- private void maybeUpdateAlarms(long delayExpiredElapsed, long deadlineExpiredElapsed) {
- if (delayExpiredElapsed < mNextDelayExpiredElapsedMillis) {
- mNextDelayExpiredElapsedMillis = delayExpiredElapsed;
- setDelayExpiredAlarm(mNextDelayExpiredElapsedMillis);
- }
- if (deadlineExpiredElapsed < mNextTaskExpiredElapsedMillis) {
- mNextTaskExpiredElapsedMillis = deadlineExpiredElapsed;
- setDeadlineExpiredAlarm(mNextTaskExpiredElapsedMillis);
- }
- }
-
- private void ensureAlarmService() {
- if (mAlarmService == null) {
- mAlarmService = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
- }
- }
-
- /**
- * Handles alarm that notifies that a task has expired. When this function is called at least
- * one task must be run.
- */
- private synchronized void handleTaskDeadlineExpired() {
- long nextExpiryTime = Long.MAX_VALUE;
- final long nowElapsedMillis = SystemClock.elapsedRealtime();
-
- Iterator<TaskStatus> it = mTrackedTasks.iterator();
- while (it.hasNext()) {
- TaskStatus ts = it.next();
- final long taskDeadline = ts.getLatestRunTimeElapsed();
-
- if (taskDeadline <= nowElapsedMillis) {
- ts.deadlineConstraintSatisfied.set(true);
- mStateChangedListener.onTaskDeadlineExpired(ts);
- it.remove();
- } else { // Sorted by expiry time, so take the next one and stop.
- nextExpiryTime = taskDeadline;
- break;
- }
- }
- maybeUpdateAlarms(Long.MAX_VALUE, nextExpiryTime);
- }
-
- /**
- * Handles alarm that notifies us that a task's delay has expired. Iterates through the list of
- * tracked tasks and marks them as ready as appropriate.
- */
- private synchronized void handleTaskDelayExpired() {
- final long nowElapsedMillis = SystemClock.elapsedRealtime();
- long nextDelayTime = Long.MAX_VALUE;
-
- Iterator<TaskStatus> it = mTrackedTasks.iterator();
- while (it.hasNext()) {
- final TaskStatus ts = it.next();
- if (!ts.hasTimingDelayConstraint()) {
- continue;
- }
- final long taskDelayTime = ts.getEarliestRunTime();
- if (taskDelayTime < nowElapsedMillis) {
- ts.timeDelayConstraintSatisfied.set(true);
- if (canStopTrackingTask(ts)) {
- it.remove();
- }
- } else { // Keep going through list to get next delay time.
- if (nextDelayTime > taskDelayTime) {
- nextDelayTime = taskDelayTime;
- }
- }
- }
- mStateChangedListener.onControllerStateChanged();
- maybeUpdateAlarms(nextDelayTime, Long.MAX_VALUE);
- }
-
- private final BroadcastReceiver mAlarmExpiredReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // An task has just expired, so we run through the list of tasks that we have and
- // notify our StateChangedListener.
- if (ACTION_TASK_EXPIRED.equals(intent.getAction())) {
- handleTaskDeadlineExpired();
- } else if (ACTION_TASK_DELAY_EXPIRED.equals(intent.getAction())) {
- handleTaskDelayExpired();
- }
- }
- };
-}
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 1c277a8dd961..10a67c4e421d 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -301,9 +301,8 @@ public final class TvInputManagerService extends SystemService {
Intent i = new Intent(TvInputService.SERVICE_INTERFACE).setComponent(
userState.inputMap.get(inputId).getComponent());
- mContext.bindServiceAsUser(i, serviceState.mConnection, Context.BIND_AUTO_CREATE,
- new UserHandle(userId));
- serviceState.mBound = true;
+ serviceState.mBound = mContext.bindServiceAsUser(
+ i, serviceState.mConnection, Context.BIND_AUTO_CREATE, new UserHandle(userId));
} else if (serviceState.mService != null && isStateEmpty) {
// This means that the service is already connected but its state indicates that we have
// nothing to do with it. Then, disconnect the service.
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 35b7f99d8813..cfd09e5c8e17 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -541,7 +541,7 @@ final class AccessibilityController {
if (isMagnifyingLocked()) {
setMagnifiedRegionBorderShownLocked(false, false);
final long delay = (long) (mLongAnimationDuration
- * mWindowManagerService.mWindowAnimationScale);
+ * mWindowManagerService.getWindowAnimationScaleLocked());
Message message = mHandler.obtainMessage(
MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED);
mHandler.sendMessageDelayed(message, delay);
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java
index 7fe895b57a90..63ae98e444a5 100644
--- a/services/core/java/com/android/server/wm/AppWindowAnimator.java
+++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java
@@ -87,7 +87,7 @@ public class AppWindowAnimator {
anim.initialize(width, height, width, height);
}
anim.restrictDuration(WindowManagerService.MAX_ANIMATION_DURATION);
- anim.scaleCurrentDuration(mService.mTransitionAnimationScale);
+ anim.scaleCurrentDuration(mService.getTransitionAnimationScaleLocked());
int zorder = anim.getZAdjustment();
int adj = 0;
if (zorder == Animation.ZORDER_TOP) {
@@ -227,7 +227,8 @@ public class AppWindowAnimator {
if (!animating) {
if (WindowManagerService.DEBUG_ANIM) Slog.v(
TAG, "Starting animation in " + mAppToken +
- " @ " + currentTime + " scale=" + mService.mTransitionAnimationScale
+ " @ " + currentTime + " scale="
+ + mService.getTransitionAnimationScaleLocked()
+ " allDrawn=" + mAppToken.allDrawn + " animating=" + animating);
animation.setStartTime(currentTime);
animating = true;
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index ca9076f51496..3200b54f5c5d 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import android.view.IWindowId;
+import android.view.IWindowSessionCallback;
import com.android.internal.view.IInputContext;
import com.android.internal.view.IInputMethodClient;
import com.android.internal.view.IInputMethodManager;
@@ -54,6 +55,7 @@ import java.io.PrintWriter;
final class Session extends IWindowSession.Stub
implements IBinder.DeathRecipient {
final WindowManagerService mService;
+ final IWindowSessionCallback mCallback;
final IInputMethodClient mClient;
final IInputContext mInputContext;
final int mUid;
@@ -62,14 +64,17 @@ final class Session extends IWindowSession.Stub
SurfaceSession mSurfaceSession;
int mNumWindow = 0;
boolean mClientDead = false;
+ float mLastReportedAnimatorScale;
- public Session(WindowManagerService service, IInputMethodClient client,
- IInputContext inputContext) {
+ public Session(WindowManagerService service, IWindowSessionCallback callback,
+ IInputMethodClient client, IInputContext inputContext) {
mService = service;
+ mCallback = callback;
mClient = client;
mInputContext = inputContext;
mUid = Binder.getCallingUid();
mPid = Binder.getCallingPid();
+ mLastReportedAnimatorScale = service.getCurrentAnimatorScale();
StringBuilder sb = new StringBuilder();
sb.append("Session{");
sb.append(Integer.toHexString(System.identityHashCode(this)));
@@ -464,6 +469,9 @@ final class Session extends IWindowSession.Stub
if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(
WindowManagerService.TAG, " NEW SURFACE SESSION " + mSurfaceSession);
mService.mSessions.add(this);
+ if (mLastReportedAnimatorScale != mService.getCurrentAnimatorScale()) {
+ mService.dispatchNewAnimatorScaleLocked(this);
+ }
}
mNumWindow++;
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index da584d8ef59a..1db8b55196b6 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -24,6 +24,7 @@ import android.util.ArraySet;
import android.util.TimeUtils;
import android.view.IWindowId;
+import android.view.IWindowSessionCallback;
import android.view.WindowContentFrameStats;
import com.android.internal.app.IBatteryStats;
import com.android.internal.policy.PolicyManager;
@@ -339,7 +340,7 @@ public class WindowManagerService extends IWindowManager.Stub
/**
* All currently active sessions with clients.
*/
- final HashSet<Session> mSessions = new HashSet<Session>();
+ final ArraySet<Session> mSessions = new ArraySet<Session>();
/**
* Mapping from an IWindow IBinder to the server's Window object.
@@ -562,9 +563,10 @@ public class WindowManagerService extends IWindowManager.Stub
PowerManager mPowerManager;
PowerManagerInternal mPowerManagerInternal;
- float mWindowAnimationScale = 1.0f;
- float mTransitionAnimationScale = 1.0f;
- float mAnimatorDurationScale = 1.0f;
+ float mWindowAnimationScaleSetting = 1.0f;
+ float mTransitionAnimationScaleSetting = 1.0f;
+ float mAnimatorDurationScaleSetting = 1.0f;
+ boolean mAnimationsDisabled = false;
final InputManagerService mInputManager;
final DisplayManagerInternal mDisplayManagerInternal;
@@ -780,6 +782,19 @@ public class WindowManagerService extends IWindowManager.Stub
mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
mPowerManagerInternal.setPolicy(mPolicy); // TODO: register as local service instead
+ mPowerManagerInternal.registerLowPowerModeObserver(
+ new PowerManagerInternal.LowPowerModeListener() {
+ @Override
+ public void onLowPowerModeChanged(boolean enabled) {
+ synchronized (mWindowMap) {
+ if (mAnimationsDisabled != enabled) {
+ mAnimationsDisabled = enabled;
+ dispatchNewAnimatorScaleLocked(null);
+ }
+ }
+ }
+ });
+ mAnimationsDisabled = mPowerManagerInternal.getLowPowerModeEnabled();
mScreenFrozenLock = mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "SCREEN_FROZEN");
mScreenFrozenLock.setReferenceCounted(false);
@@ -799,12 +814,12 @@ public class WindowManagerService extends IWindowManager.Stub
);
// Get persisted window scale setting
- mWindowAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
- Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
- mTransitionAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
- Settings.Global.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
+ mWindowAnimationScaleSetting = Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting);
+ mTransitionAnimationScaleSetting = Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScaleSetting);
setAnimatorDurationScale(Settings.Global.getFloat(context.getContentResolver(),
- Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScale));
+ Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting));
// Track changes to DevicePolicyManager state so we can enable/disable keyguard.
IntentFilter filter = new IntentFilter();
@@ -5188,9 +5203,9 @@ public class WindowManagerService extends IWindowManager.Stub
scale = fixScale(scale);
switch (which) {
- case 0: mWindowAnimationScale = scale; break;
- case 1: mTransitionAnimationScale = scale; break;
- case 2: mAnimatorDurationScale = scale; break;
+ case 0: mWindowAnimationScaleSetting = scale; break;
+ case 1: mTransitionAnimationScaleSetting = scale; break;
+ case 2: mAnimatorDurationScaleSetting = scale; break;
}
// Persist setting
@@ -5206,13 +5221,14 @@ public class WindowManagerService extends IWindowManager.Stub
if (scales != null) {
if (scales.length >= 1) {
- mWindowAnimationScale = fixScale(scales[0]);
+ mWindowAnimationScaleSetting = fixScale(scales[0]);
}
if (scales.length >= 2) {
- mTransitionAnimationScale = fixScale(scales[1]);
+ mTransitionAnimationScaleSetting = fixScale(scales[1]);
}
if (scales.length >= 3) {
- setAnimatorDurationScale(fixScale(scales[2]));
+ mAnimatorDurationScaleSetting = fixScale(scales[2]);
+ dispatchNewAnimatorScaleLocked(null);
}
}
@@ -5221,24 +5237,43 @@ public class WindowManagerService extends IWindowManager.Stub
}
private void setAnimatorDurationScale(float scale) {
- mAnimatorDurationScale = scale;
+ mAnimatorDurationScaleSetting = scale;
ValueAnimator.setDurationScale(scale);
}
+ public float getWindowAnimationScaleLocked() {
+ return mAnimationsDisabled ? 0 : mWindowAnimationScaleSetting;
+ }
+
+ public float getTransitionAnimationScaleLocked() {
+ return mAnimationsDisabled ? 0 : mTransitionAnimationScaleSetting;
+ }
+
@Override
public float getAnimationScale(int which) {
switch (which) {
- case 0: return mWindowAnimationScale;
- case 1: return mTransitionAnimationScale;
- case 2: return mAnimatorDurationScale;
+ case 0: return mWindowAnimationScaleSetting;
+ case 1: return mTransitionAnimationScaleSetting;
+ case 2: return mAnimatorDurationScaleSetting;
}
return 0;
}
@Override
public float[] getAnimationScales() {
- return new float[] { mWindowAnimationScale, mTransitionAnimationScale,
- mAnimatorDurationScale };
+ return new float[] { mWindowAnimationScaleSetting, mTransitionAnimationScaleSetting,
+ mAnimatorDurationScaleSetting };
+ }
+
+ @Override
+ public float getCurrentAnimatorScale() {
+ synchronized(mWindowMap) {
+ return mAnimationsDisabled ? 0 : mAnimatorDurationScaleSetting;
+ }
+ }
+
+ void dispatchNewAnimatorScaleLocked(Session session) {
+ mH.obtainMessage(H.NEW_ANIMATOR_SCALE, session).sendToTarget();
}
@Override
@@ -6094,7 +6129,7 @@ public class WindowManagerService extends IWindowManager.Stub
&& screenRotationAnimation.hasScreenshot()) {
if (screenRotationAnimation.setRotationInTransaction(
rotation, mFxSession,
- MAX_ANIMATION_DURATION, mTransitionAnimationScale,
+ MAX_ANIMATION_DURATION, getTransitionAnimationScaleLocked(),
displayInfo.logicalWidth, displayInfo.logicalHeight)) {
scheduleAnimationLocked();
}
@@ -7179,6 +7214,8 @@ public class WindowManagerService extends IWindowManager.Stub
public static final int SHOW_DISPLAY_MASK = 33;
public static final int ALL_WINDOWS_DRAWN = 34;
+ public static final int NEW_ANIMATOR_SCALE = 35;
+
@Override
public void handleMessage(Message msg) {
if (DEBUG_WINDOW_TRACE) {
@@ -7429,11 +7466,12 @@ public class WindowManagerService extends IWindowManager.Stub
case PERSIST_ANIMATION_SCALE: {
Settings.Global.putFloat(mContext.getContentResolver(),
- Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
+ Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting);
Settings.Global.putFloat(mContext.getContentResolver(),
- Settings.Global.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
+ Settings.Global.TRANSITION_ANIMATION_SCALE,
+ mTransitionAnimationScaleSetting);
Settings.Global.putFloat(mContext.getContentResolver(),
- Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScale);
+ Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting);
break;
}
@@ -7636,6 +7674,33 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
}
+ case NEW_ANIMATOR_SCALE: {
+ float scale = getCurrentAnimatorScale();
+ ValueAnimator.setDurationScale(scale);
+ Session session = (Session)msg.obj;
+ if (session != null) {
+ try {
+ session.mCallback.onAnimatorScaleChanged(scale);
+ } catch (RemoteException e) {
+ }
+ } else {
+ ArrayList<IWindowSessionCallback> callbacks
+ = new ArrayList<IWindowSessionCallback>();
+ synchronized (mWindowMap) {
+ for (int i=0; i<mSessions.size(); i++) {
+ callbacks.add(mSessions.valueAt(i).mCallback);
+ }
+
+ }
+ for (int i=0; i<callbacks.size(); i++) {
+ try {
+ callbacks.get(i).onAnimatorScaleChanged(scale);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+ }
+ break;
}
if (DEBUG_WINDOW_TRACE) {
Slog.v(TAG, "handleMessage: exit");
@@ -7648,11 +7713,11 @@ public class WindowManagerService extends IWindowManager.Stub
// -------------------------------------------------------------
@Override
- public IWindowSession openSession(IInputMethodClient client,
+ public IWindowSession openSession(IWindowSessionCallback callback, IInputMethodClient client,
IInputContext inputContext) {
if (client == null) throw new IllegalArgumentException("null client");
if (inputContext == null) throw new IllegalArgumentException("null inputContext");
- Session session = new Session(this, client, inputContext);
+ Session session = new Session(this, callback, client, inputContext);
return session;
}
@@ -8762,7 +8827,7 @@ public class WindowManagerService extends IWindowManager.Stub
displayInfo.appWidth, displayInfo.appHeight, transit);
appAnimator.thumbnailAnimation = anim;
anim.restrictDuration(MAX_ANIMATION_DURATION);
- anim.scaleCurrentDuration(mTransitionAnimationScale);
+ anim.scaleCurrentDuration(getTransitionAnimationScaleLocked());
Point p = new Point();
mAppTransition.getStartingPoint(p);
appAnimator.thumbnailX = p.x;
@@ -10070,7 +10135,7 @@ public class WindowManagerService extends IWindowManager.Stub
mExitAnimId = mEnterAnimId = 0;
}
if (screenRotationAnimation.dismiss(mFxSession, MAX_ANIMATION_DURATION,
- mTransitionAnimationScale, displayInfo.logicalWidth,
+ getTransitionAnimationScaleLocked(), displayInfo.logicalWidth,
displayInfo.logicalHeight, mExitAnimId, mEnterAnimId)) {
scheduleAnimationLocked();
} else {
@@ -10405,13 +10470,10 @@ public class WindowManagerService extends IWindowManager.Stub
void dumpSessionsLocked(PrintWriter pw, boolean dumpAll) {
pw.println("WINDOW MANAGER SESSIONS (dumpsys window sessions)");
- if (mSessions.size() > 0) {
- Iterator<Session> it = mSessions.iterator();
- while (it.hasNext()) {
- Session s = it.next();
- pw.print(" Session "); pw.print(s); pw.println(':');
- s.dump(pw, " ");
- }
+ for (int i=0; i<mSessions.size(); i++) {
+ Session s = mSessions.valueAt(i);
+ pw.print(" Session "); pw.print(s); pw.println(':');
+ s.dump(pw, " ");
}
}
@@ -10615,9 +10677,10 @@ public class WindowManagerService extends IWindowManager.Stub
pw.print(" mLastWindowForcedOrientation="); pw.print(mLastWindowForcedOrientation);
pw.print(" mForcedAppOrientation="); pw.println(mForcedAppOrientation);
pw.print(" mDeferredRotationPauseCount="); pw.println(mDeferredRotationPauseCount);
- pw.print(" mWindowAnimationScale="); pw.print(mWindowAnimationScale);
- pw.print(" mTransitionWindowAnimationScale="); pw.print(mTransitionAnimationScale);
- pw.print(" mAnimatorDurationScale="); pw.println(mAnimatorDurationScale);
+ pw.print(" Animation settings: disabled="); pw.print(mAnimationsDisabled);
+ pw.print(" window="); pw.print(mWindowAnimationScaleSetting);
+ pw.print(" transition="); pw.print(mTransitionAnimationScaleSetting);
+ pw.print(" animator="); pw.println(mAnimatorDurationScaleSetting);
pw.print(" mTraversalScheduled="); pw.println(mTraversalScheduled);
pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition);
pw.print(" mSkipAppTransitionAnimation="); pw.println(mSkipAppTransitionAnimation);
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index e257ebc90b48..bda10de01df0 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -207,7 +207,7 @@ class WindowStateAnimator {
mLocalAnimating = false;
mAnimation = anim;
mAnimation.restrictDuration(WindowManagerService.MAX_ANIMATION_DURATION);
- mAnimation.scaleCurrentDuration(mService.mWindowAnimationScale);
+ mAnimation.scaleCurrentDuration(mService.getWindowAnimationScaleLocked());
// Start out animation gone if window is gone, or visible if window is visible.
mTransformation.clear();
mTransformation.setAlpha(mLastHidden ? 0 : 1);
@@ -283,7 +283,7 @@ class WindowStateAnimator {
" @ " + currentTime + ": ww=" + mWin.mFrame.width() +
" wh=" + mWin.mFrame.height() +
" dw=" + mAnimDw + " dh=" + mAnimDh +
- " scale=" + mService.mWindowAnimationScale);
+ " scale=" + mService.getWindowAnimationScaleLocked());
mAnimation.initialize(mWin.mFrame.width(), mWin.mFrame.height(),
mAnimDw, mAnimDh);
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk
index 3cfb45b593ee..db44d3a2893e 100644
--- a/services/core/jni/Android.mk
+++ b/services/core/jni/Android.mk
@@ -12,7 +12,6 @@ LOCAL_SRC_FILES += \
$(LOCAL_REL_DIR)/com_android_server_ConsumerIrService.cpp \
$(LOCAL_REL_DIR)/com_android_server_dreams_McuHal.cpp \
$(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiCecController.cpp \
- $(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiCecService.cpp \
$(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiMhlController.cpp \
$(LOCAL_REL_DIR)/com_android_server_input_InputApplicationHandle.cpp \
$(LOCAL_REL_DIR)/com_android_server_input_InputManagerService.cpp \
diff --git a/services/core/jni/com_android_server_hdmi_HdmiCecService.cpp b/services/core/jni/com_android_server_hdmi_HdmiCecService.cpp
deleted file mode 100644
index 1d111a1e7990..000000000000
--- a/services/core/jni/com_android_server_hdmi_HdmiCecService.cpp
+++ /dev/null
@@ -1,756 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "HdmiCecJni"
-
-#define LOG_NDEBUG 1
-
-#include "ScopedPrimitiveArray.h"
-
-#include <string>
-#include <deque>
-#include <map>
-
-#include <android_runtime/AndroidRuntime.h>
-#include <android_runtime/Log.h>
-#include <hardware/hdmi_cec.h>
-
-namespace android {
-
-static struct {
- jmethodID handleMessage;
- jmethodID handleHotplug;
- jmethodID getActiveSource;
- jmethodID getLanguage;
-} gHdmiCecServiceClassInfo;
-
-#ifndef min
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#endif
-
-class HdmiCecHandler {
-public:
- enum HdmiCecError {
- SUCCESS = 0,
- FAILED = -1
- };
-
- // Data type to hold a CEC message or internal event data.
- typedef union {
- cec_message_t cec;
- hotplug_event_t hotplug;
- } queue_item_t;
-
- // Entry used for message queue.
- typedef std::pair<int, const queue_item_t> MessageEntry;
-
- HdmiCecHandler(hdmi_cec_device_t* device, jobject callbacksObj);
-
- void initialize();
-
- // initialize individual logical device.
- cec_logical_address_t initLogicalDevice(cec_device_type_t type);
- void releaseLogicalDevice(cec_device_type_t type);
-
- cec_logical_address_t getLogicalAddress(cec_device_type_t deviceType);
- uint16_t getPhysicalAddress();
- cec_device_type_t getDeviceType(cec_logical_address_t addr);
- void queueMessage(const MessageEntry& message);
- void queueOutgoingMessage(const cec_message_t& message);
- void sendReportPhysicalAddress(cec_logical_address_t srcAddr);
- void sendActiveSource(cec_logical_address_t srcAddr);
- void sendFeatureAbort(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr,
- int opcode, int reason);
- void sendCecVersion(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr,
- int version);
- void sendDeviceVendorId(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr);
- void sendGiveDeviceVendorID(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr);
- void sendSetOsdName(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr,
- const char* name, size_t len);
- void sendSetMenuLanguage(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr);
-
- void sendCecMessage(const cec_message_t& message);
- void setOsdName(const char* name, size_t len);
-
-private:
- enum {
- EVENT_TYPE_RX,
- EVENT_TYPE_TX,
- EVENT_TYPE_HOTPLUG,
- EVENT_TYPE_STANDBY
- };
-
- /*
- * logical address pool for each device type.
- */
- static const cec_logical_address_t TV_ADDR_POOL[];
- static const cec_logical_address_t PLAYBACK_ADDR_POOL[];
- static const cec_logical_address_t RECORDER_ADDR_POOL[];
- static const cec_logical_address_t TUNER_ADDR_POOL[];
-
- static const unsigned int MAX_BUFFER_SIZE = 256;
- static const uint16_t INVALID_PHYSICAL_ADDRESS = 0xFFFF;
-
- static void onReceived(const hdmi_event_t* event, void* arg);
- static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName);
-
- void updatePhysicalAddress();
- void updateLogicalAddress();
-
- // Allocate logical address. The CEC standard recommends that we try to use the address
- // we have ever used before, in case this is to allocate an address afte the cable is
- // connected again. If preferredAddr is given a valid one (not CEC_ADDR_UNREGISTERED), then
- // this method checks if the address is available first. If not, it tries other addresses
- // int the address pool available for the given type.
- cec_logical_address_t allocateLogicalAddress(cec_device_type_t type,
- cec_logical_address_t preferredAddr);
-
- // Send a CEC ping message. Returns true if successful.
- bool sendPing(cec_logical_address_t addr);
-
- // Return the pool of logical addresses that are used for a given device type.
- // One of the addresses in the pool will be chosen in the allocation logic.
- bool getLogicalAddressPool(cec_device_type_t type, const cec_logical_address_t** addrPool,
- size_t* poolSize);
-
- // Handles the message retrieved from internal message queue. The message can be
- // for either rx or tx.
- void dispatchMessage(const MessageEntry& message);
- void processIncomingMessage(const cec_message_t& msg);
-
- // Check the message before we pass it up to framework. If true, we proceed.
- // otherwise do not propagate it.
- bool precheckMessage(const cec_message_t& msg);
-
- // Propagate the message up to Java layer.
- void propagateMessage(const cec_message_t& msg);
- void propagateHotplug(bool connected);
-
- // Handles incoming <Request Active Source> message. If one of logical
- // devices is active, it should reply with <Active Source> message.
- void handleRequestActiveSource();
- void handleGiveOsdName(const cec_message_t& msg);
- void handleGiveDeviceVendorID(const cec_message_t& msg);
- void handleGetCECVersion(const cec_message_t& msg);
- void handleGetMenuLanguage(const cec_message_t& msg);
-
- // Internal thread for message queue handler
- class HdmiThread : public Thread {
- public:
- HdmiThread(HdmiCecHandler* hdmiCecHandler, bool canCallJava) :
- Thread(canCallJava),
- mHdmiCecHandler(hdmiCecHandler) {
- }
- private:
- virtual bool threadLoop() {
- ALOGV("HdmiThread started");
- AutoMutex _l(mHdmiCecHandler->mMessageQueueLock);
- mHdmiCecHandler->mMessageQueueCondition.wait(mHdmiCecHandler->mMessageQueueLock);
- /* Process all messages in the queue */
- while (mHdmiCecHandler->mMessageQueue.size() > 0) {
- MessageEntry entry = mHdmiCecHandler->mMessageQueue.front();
- mHdmiCecHandler->dispatchMessage(entry);
- }
- return true;
- }
-
- HdmiCecHandler* mHdmiCecHandler;
- };
-
- // device type -> logical address mapping
- std::map<cec_device_type_t, cec_logical_address_t> mLogicalDevices;
-
- hdmi_cec_device_t* mDevice;
- jobject mCallbacksObj;
- Mutex mLock;
- Mutex mMessageQueueLock;
- Condition mMessageQueueCondition;
- sp<HdmiThread> mMessageQueueHandler;
-
- std::deque<MessageEntry> mMessageQueue;
- uint16_t mPhysicalAddress;
- std::string mOsdName;
-};
-
- const cec_logical_address_t HdmiCecHandler::TV_ADDR_POOL[] = {
- CEC_ADDR_TV,
- CEC_ADDR_FREE_USE,
- };
-
- const cec_logical_address_t HdmiCecHandler::PLAYBACK_ADDR_POOL[] = {
- CEC_ADDR_PLAYBACK_1,
- CEC_ADDR_PLAYBACK_2,
- CEC_ADDR_PLAYBACK_3
- };
-
- const cec_logical_address_t HdmiCecHandler::RECORDER_ADDR_POOL[] = {
- CEC_ADDR_RECORDER_1,
- CEC_ADDR_RECORDER_2,
- CEC_ADDR_RECORDER_3
- };
-
- const cec_logical_address_t HdmiCecHandler::TUNER_ADDR_POOL[] = {
- CEC_ADDR_TUNER_1,
- CEC_ADDR_TUNER_2,
- CEC_ADDR_TUNER_3,
- CEC_ADDR_TUNER_4
- };
-
-HdmiCecHandler::HdmiCecHandler(hdmi_cec_device_t* device, jobject callbacksObj) :
- mDevice(device),
- mCallbacksObj(callbacksObj) {
-}
-
-void HdmiCecHandler::initialize() {
- mDevice->register_event_callback(mDevice, HdmiCecHandler::onReceived, this);
- mMessageQueueHandler = new HdmiThread(this, true /* canCallJava */);
- mMessageQueueHandler->run("MessageHandler");
- updatePhysicalAddress();
-}
-
-uint16_t HdmiCecHandler::getPhysicalAddress() {
- return mPhysicalAddress;
-}
-
-cec_logical_address_t HdmiCecHandler::initLogicalDevice(cec_device_type_t type) {
- cec_logical_address addr = allocateLogicalAddress(type, CEC_ADDR_UNREGISTERED);
- if (addr != CEC_ADDR_UNREGISTERED && !mDevice->add_logical_address(mDevice, addr)) {
- mLogicalDevices.insert(std::pair<cec_device_type_t, cec_logical_address_t>(type, addr));
-
- // Broadcast <Report Physical Address> when a new logical address was allocated to let
- // other devices discover the new logical device and its logical - physical address
- // association.
- sendReportPhysicalAddress(addr);
- }
- return addr;
-}
-
-void HdmiCecHandler::releaseLogicalDevice(cec_device_type_t type) {
- std::map<cec_device_type_t, cec_logical_address_t>::iterator it = mLogicalDevices.find(type);
- if (it != mLogicalDevices.end()) {
- mLogicalDevices.erase(it);
- }
- // TODO: remove the address monitored in HAL as well.
-}
-
-cec_logical_address_t HdmiCecHandler::getLogicalAddress(cec_device_type_t type) {
- std::map<cec_device_type_t, cec_logical_address_t>::iterator it = mLogicalDevices.find(type);
- if (it != mLogicalDevices.end()) {
- return it->second;
- }
- return CEC_ADDR_UNREGISTERED;
-}
-
-cec_device_type_t HdmiCecHandler::getDeviceType(cec_logical_address_t addr) {
- std::map<cec_device_type_t, cec_logical_address_t>::iterator it = mLogicalDevices.begin();
- for (; it != mLogicalDevices.end(); ++it) {
- if (it->second == addr) {
- return it->first;
- }
- }
- return CEC_DEVICE_INACTIVE;
-}
-
-void HdmiCecHandler::queueMessage(const MessageEntry& entry) {
- AutoMutex _l(mMessageQueueLock);
- if (mMessageQueue.size() <= MAX_BUFFER_SIZE) {
- mMessageQueue.push_back(entry);
- mMessageQueueCondition.signal();
- } else {
- ALOGW("Queue is full! Message dropped.");
- }
-}
-
-void HdmiCecHandler::queueOutgoingMessage(const cec_message_t& message) {
- queue_item_t item;
- item.cec = message;
- MessageEntry entry = std::make_pair(EVENT_TYPE_TX, item);
- queueMessage(entry);
-}
-
-void HdmiCecHandler::sendReportPhysicalAddress(cec_logical_address_t addr) {
- if (mPhysicalAddress == INVALID_PHYSICAL_ADDRESS) {
- ALOGE("Invalid physical address.");
- return;
- }
- cec_device_type_t deviceType = getDeviceType(addr);
- if (deviceType == CEC_DEVICE_INACTIVE) {
- ALOGE("Invalid logical address: %d", addr);
- return;
- }
-
- cec_message_t msg;
- msg.initiator = addr;
- msg.destination = CEC_ADDR_BROADCAST;
- msg.length = 4;
- msg.body[0] = CEC_MESSAGE_REPORT_PHYSICAL_ADDRESS;
- msg.body[1] = (mPhysicalAddress >> 8) & 0xff;
- msg.body[2] = mPhysicalAddress & 0xff;
- msg.body[3] = deviceType;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendActiveSource(cec_logical_address_t srcAddr) {
- if (mPhysicalAddress == INVALID_PHYSICAL_ADDRESS) {
- ALOGE("Error getting physical address.");
- return;
- }
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = CEC_ADDR_BROADCAST;
- msg.length = 3;
- msg.body[0] = CEC_MESSAGE_ACTIVE_SOURCE;
- msg.body[1] = (mPhysicalAddress >> 8) & 0xff;
- msg.body[2] = mPhysicalAddress & 0xff;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendFeatureAbort(cec_logical_address_t srcAddr,
- cec_logical_address_t dstAddr, int opcode, int reason) {
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.length = 3;
- msg.body[0] = CEC_MESSAGE_FEATURE_ABORT;
- msg.body[1] = opcode;
- msg.body[2] = reason;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendCecVersion(cec_logical_address_t srcAddr,
- cec_logical_address_t dstAddr, int version) {
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.length = 2;
- msg.body[0] = CEC_MESSAGE_CEC_VERSION;
- msg.body[1] = version;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendGiveDeviceVendorID(cec_logical_address_t srcAddr,
- cec_logical_address_t dstAddr) {
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.length = 1;
- msg.body[0] = CEC_MESSAGE_GIVE_DEVICE_VENDOR_ID;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendDeviceVendorId(cec_logical_address_t srcAddr,
- cec_logical_address_t dstAddr) {
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.length = 4;
- msg.body[0] = CEC_MESSAGE_DEVICE_VENDOR_ID;
- uint32_t vendor_id;
- mDevice->get_vendor_id(mDevice, &vendor_id);
- msg.body[1] = (vendor_id >> 16) & 0xff;
- msg.body[2] = (vendor_id >> 8) & 0xff;
- msg.body[3] = vendor_id & 0xff;
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendSetOsdName(cec_logical_address_t srcAddr, cec_logical_address_t dstAddr,
- const char* name, size_t len) {
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.body[0] = CEC_MESSAGE_SET_OSD_NAME;
- msg.length = min(len + 1, CEC_MESSAGE_BODY_MAX_LENGTH);
- std::memcpy(msg.body + 1, name, msg.length - 1);
- queueOutgoingMessage(msg);
-}
-
-void HdmiCecHandler::sendSetMenuLanguage(cec_logical_address_t srcAddr,
- cec_logical_address_t dstAddr) {
- char lang[4]; // buffer for 3-letter language code
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jstring res = (jstring) env->CallObjectMethod(mCallbacksObj,
- gHdmiCecServiceClassInfo.getLanguage,
- getDeviceType(srcAddr));
- const char *clang = env->GetStringUTFChars(res, NULL);
- strlcpy(lang, clang, sizeof(lang));
- env->ReleaseStringUTFChars(res, clang);
-
- cec_message_t msg;
- msg.initiator = srcAddr;
- msg.destination = dstAddr;
- msg.length = 4; // opcode (1) + language code (3)
- msg.body[0] = CEC_MESSAGE_SET_MENU_LANGUAGE;
- std::memcpy(msg.body + 1, lang, 3);
- queueOutgoingMessage(msg);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-void HdmiCecHandler::sendCecMessage(const cec_message_t& message) {
- AutoMutex _l(mLock);
- ALOGV("sendCecMessage");
- mDevice->send_message(mDevice, &message);
-}
-
-void HdmiCecHandler::setOsdName(const char* name, size_t len) {
- mOsdName.assign(name, min(len, CEC_MESSAGE_BODY_MAX_LENGTH - 1));
-}
-
-// static
-void HdmiCecHandler::onReceived(const hdmi_event_t* event, void* arg) {
- HdmiCecHandler* handler = static_cast<HdmiCecHandler*>(arg);
- if (handler == NULL) {
- return;
- }
- queue_item_t item;
- if (event->type == HDMI_EVENT_CEC_MESSAGE) {
- item.cec = event->cec;
- MessageEntry entry = std::make_pair<int, const queue_item_t>(EVENT_TYPE_RX, item);
- handler->queueMessage(entry);
- } else if (event->type == HDMI_EVENT_HOT_PLUG) {
- item.hotplug = event->hotplug;
- MessageEntry entry = std::make_pair<int, const queue_item_t>(EVENT_TYPE_HOTPLUG, item);
- handler->queueMessage(entry);
- }
-}
-
-// static
-void HdmiCecHandler::checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- }
-}
-
-void HdmiCecHandler::updatePhysicalAddress() {
- uint16_t addr;
- if (!mDevice->get_physical_address(mDevice, &addr)) {
- mPhysicalAddress = addr;
- } else {
- mPhysicalAddress = INVALID_PHYSICAL_ADDRESS;
- }
-}
-
-void HdmiCecHandler::updateLogicalAddress() {
- mDevice->clear_logical_address(mDevice);
- std::map<cec_device_type_t, cec_logical_address_t>::iterator it = mLogicalDevices.begin();
- for (; it != mLogicalDevices.end(); ++it) {
- cec_logical_address_t addr;
- cec_logical_address_t preferredAddr = it->second;
- cec_device_type_t deviceType = it->first;
- addr = allocateLogicalAddress(deviceType, preferredAddr);
- if (!mDevice->add_logical_address(mDevice, addr)) {
- it->second = addr;
- } else {
- it->second = CEC_ADDR_UNREGISTERED;
- }
- }
-}
-
-cec_logical_address_t HdmiCecHandler::allocateLogicalAddress(cec_device_type_t type,
- cec_logical_address_t preferredAddr) {
- const cec_logical_address_t* addrPool;
- size_t poolSize;
- if (getLogicalAddressPool(type, &addrPool, &poolSize) < 0) {
- return CEC_ADDR_UNREGISTERED;
- }
- unsigned start = 0;
-
- // Find the index of preferred address in the pool. If not found, the start
- // position will be 0. This happens when the passed preferredAddr is set to
- // CEC_ADDR_UNREGISTERED, meaning that no preferred address is given.
- for (unsigned i = 0; i < poolSize; i++) {
- if (addrPool[i] == preferredAddr) {
- start = i;
- break;
- }
- }
- for (unsigned i = 0; i < poolSize; i++) {
- cec_logical_address_t addr = addrPool[(start + i) % poolSize];
- if (!sendPing(addr)) {
- // Failure in pinging means the address is available, not taken by any device.
- ALOGV("Logical Address Allocation success: %d", addr);
- return addr;
- }
- }
- ALOGE("Logical Address Allocation failed");
- return CEC_ADDR_UNREGISTERED;
-}
-
-bool HdmiCecHandler::sendPing(cec_logical_address addr) {
- cec_message_t msg;
- msg.initiator = msg.destination = addr;
- msg.length = 0;
- return !mDevice->send_message(mDevice, &msg);
-
-}
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-bool HdmiCecHandler::getLogicalAddressPool(cec_device_type_t deviceType,
- const cec_logical_address_t** addrPool, size_t* poolSize) {
- switch (deviceType) {
- case CEC_DEVICE_TV:
- *addrPool = TV_ADDR_POOL;
- *poolSize = ARRAY_SIZE(TV_ADDR_POOL);
- break;
- case CEC_DEVICE_RECORDER:
- *addrPool = RECORDER_ADDR_POOL;
- *poolSize = ARRAY_SIZE(RECORDER_ADDR_POOL);
- break;
- case CEC_DEVICE_TUNER:
- *addrPool = TUNER_ADDR_POOL;
- *poolSize = ARRAY_SIZE(TUNER_ADDR_POOL);
- break;
- case CEC_DEVICE_PLAYBACK:
- *addrPool = PLAYBACK_ADDR_POOL;
- *poolSize = ARRAY_SIZE(PLAYBACK_ADDR_POOL);
- break;
- default:
- ALOGE("Unsupported device type: %d", deviceType);
- return false;
- }
- return true;
-}
-
-#undef ARRAY_SIZE
-
-void HdmiCecHandler::dispatchMessage(const MessageEntry& entry) {
- int type = entry.first;
- mMessageQueueLock.unlock();
- if (type == EVENT_TYPE_RX) {
- mMessageQueue.pop_front();
- processIncomingMessage(entry.second.cec);
- } else if (type == EVENT_TYPE_TX) {
- sendCecMessage(entry.second.cec);
- mMessageQueue.pop_front();
- } else if (type == EVENT_TYPE_HOTPLUG) {
- mMessageQueue.pop_front();
- bool connected = entry.second.hotplug.connected;
- if (connected) {
- updatePhysicalAddress();
- updateLogicalAddress();
- }
- propagateHotplug(connected);
- }
- mMessageQueueLock.lock();
-}
-
-void HdmiCecHandler::processIncomingMessage(const cec_message_t& msg) {
- int opcode = msg.body[0];
- if (opcode == CEC_MESSAGE_GIVE_PHYSICAL_ADDRESS) {
- sendReportPhysicalAddress(msg.destination);
- } else if (opcode == CEC_MESSAGE_REQUEST_ACTIVE_SOURCE) {
- handleRequestActiveSource();
- } else if (opcode == CEC_MESSAGE_GIVE_OSD_NAME) {
- handleGiveOsdName(msg);
- } else if (opcode == CEC_MESSAGE_GIVE_DEVICE_VENDOR_ID) {
- handleGiveDeviceVendorID(msg);
- } else if (opcode == CEC_MESSAGE_GET_CEC_VERSION) {
- handleGetCECVersion(msg);
- } else if (opcode == CEC_MESSAGE_GET_MENU_LANGUAGE) {
- handleGetMenuLanguage(msg);
- } else if (opcode == CEC_MESSAGE_ABORT) {
- // Compliance testing requires that abort message be responded with feature abort.
- sendFeatureAbort(msg.destination, msg.initiator, msg.body[0], ABORT_REFUSED);
- } else {
- if (precheckMessage(msg)) {
- propagateMessage(msg);
- }
- }
-}
-
-bool HdmiCecHandler::precheckMessage(const cec_message_t& msg) {
- // Check if this is the broadcast message coming to itself, which need not be passed
- // back to framework. This happens because CEC spec specifies that a physical device
- // may host multiple logical devices. A broadcast message sent by one of them therefore
- // should be able to reach the others by the loopback mechanism.
- //
- // Currently we don't deal with multiple logical devices, so this is not necessary.
- // It should be revisited once we support hosting multiple logical devices.
- int opcode = msg.body[0];
- if (msg.destination == CEC_ADDR_BROADCAST &&
- (opcode == CEC_MESSAGE_ACTIVE_SOURCE ||
- opcode == CEC_MESSAGE_SET_STREAM_PATH ||
- opcode == CEC_MESSAGE_INACTIVE_SOURCE)) {
- uint16_t senderAddr = (msg.body[1] << 8) + msg.body[2];
- if (senderAddr == mPhysicalAddress) {
- return false;
- }
- }
- return true;
-}
-
-void HdmiCecHandler::propagateMessage(const cec_message_t& msg) {
- int paramLen = msg.length - 1;
- jint srcAddr = msg.initiator;
- jint dstAddr = msg.destination;
- jint opcode = msg.body[0];
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jbyteArray params = env->NewByteArray(paramLen);
- const jbyte* body = reinterpret_cast<const jbyte *>(msg.body + 1);
- if (paramLen > 0) {
- env->SetByteArrayRegion(params, 0, paramLen, body);
- }
- env->CallVoidMethod(mCallbacksObj,
- gHdmiCecServiceClassInfo.handleMessage,
- srcAddr, dstAddr, opcode, params);
- env->DeleteLocalRef(params);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-void HdmiCecHandler::propagateHotplug(bool connected) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj,
- gHdmiCecServiceClassInfo.handleHotplug,
- connected);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-
-void HdmiCecHandler::handleRequestActiveSource() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jint activeDeviceType = env->CallIntMethod(mCallbacksObj,
- gHdmiCecServiceClassInfo.getActiveSource);
- if (activeDeviceType != CEC_DEVICE_INACTIVE) {
- sendActiveSource(getLogicalAddress(static_cast<cec_device_type_t>(activeDeviceType)));
- }
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-void HdmiCecHandler::handleGiveOsdName(const cec_message_t& msg) {
- if (!mOsdName.empty()) {
- sendSetOsdName(msg.destination, msg.initiator, mOsdName.c_str(), mOsdName.length());
- }
-}
-
-void HdmiCecHandler::handleGiveDeviceVendorID(const cec_message_t& msg) {
- sendDeviceVendorId(msg.destination, msg.initiator);
-}
-
-void HdmiCecHandler::handleGetCECVersion(const cec_message_t& msg) {
- int version;
- mDevice->get_version(mDevice, &version);
- sendCecVersion(msg.destination, msg.initiator, version);
-}
-
-void HdmiCecHandler::handleGetMenuLanguage(const cec_message_t& msg) {
- sendSetMenuLanguage(msg.destination, msg.initiator);
-}
-
-//------------------------------------------------------------------------------
-
-#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
- var = env->GetMethodID(clazz, methodName, methodDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find method " methodName);
-
-static jlong nativeInit(JNIEnv* env, jclass clazz, jobject callbacksObj) {
- int err;
- hw_module_t* module;
- err = hw_get_module(HDMI_CEC_HARDWARE_MODULE_ID, const_cast<const hw_module_t **>(&module));
- if (err != 0) {
- ALOGE("Error acquiring hardware module: %d", err);
- return 0;
- }
- hw_device_t* device;
- err = module->methods->open(module, HDMI_CEC_HARDWARE_INTERFACE, &device);
- if (err != 0) {
- ALOGE("Error opening hardware module: %d", err);
- return 0;
- }
- HdmiCecHandler *handler = new HdmiCecHandler(reinterpret_cast<hdmi_cec_device *>(device),
- env->NewGlobalRef(callbacksObj));
- handler->initialize();
-
- GET_METHOD_ID(gHdmiCecServiceClassInfo.handleMessage, clazz,
- "handleMessage", "(III[B)V");
- GET_METHOD_ID(gHdmiCecServiceClassInfo.handleHotplug, clazz,
- "handleHotplug", "(Z)V");
- GET_METHOD_ID(gHdmiCecServiceClassInfo.getActiveSource, clazz,
- "getActiveSource", "()I");
- GET_METHOD_ID(gHdmiCecServiceClassInfo.getLanguage, clazz,
- "getLanguage", "(I)Ljava/lang/String;");
-
- return reinterpret_cast<jlong>(handler);
-}
-
-static void nativeSendMessage(JNIEnv* env, jclass clazz, jlong handlerPtr, jint deviceType,
- jint dstAddr, jint opcode, jbyteArray params) {
- HdmiCecHandler *handler = reinterpret_cast<HdmiCecHandler *>(handlerPtr);
- cec_logical_address_t srcAddr = handler->getLogicalAddress(
- static_cast<cec_device_type_t>(deviceType));
- jsize len = env->GetArrayLength(params);
- ScopedByteArrayRO paramsPtr(env, params);
- cec_message_t message;
- message.initiator = srcAddr;
- message.destination = static_cast<cec_logical_address_t>(dstAddr);
- message.length = min(len + 1, CEC_MESSAGE_BODY_MAX_LENGTH);
- message.body[0] = opcode;
- std::memcpy(message.body + 1, paramsPtr.get(), message.length - 1);
- handler->sendCecMessage(message);
-}
-
-static jint nativeAllocateLogicalAddress(JNIEnv* env, jclass clazz, jlong handlerPtr,
- jint deviceType) {
- HdmiCecHandler *handler = reinterpret_cast<HdmiCecHandler *>(handlerPtr);
- return handler->initLogicalDevice(static_cast<cec_device_type_t>(deviceType));
-}
-
-static void nativeRemoveLogicalAddress(JNIEnv* env, jclass clazz, jlong handlerPtr,
- jint deviceType) {
- HdmiCecHandler *handler = reinterpret_cast<HdmiCecHandler *>(handlerPtr);
- return handler->releaseLogicalDevice(static_cast<cec_device_type_t>(deviceType));
-}
-
-static jint nativeGetPhysicalAddress(JNIEnv* env, jclass clazz, jlong handlerPtr) {
- HdmiCecHandler *handler = reinterpret_cast<HdmiCecHandler *>(handlerPtr);
- return handler->getPhysicalAddress();
-}
-
-static void nativeSetOsdName(JNIEnv* env, jclass clazz, jlong handlerPtr, jbyteArray name) {
- HdmiCecHandler *handler = reinterpret_cast<HdmiCecHandler *>(handlerPtr);
- jsize len = env->GetArrayLength(name);
- if (len > 0) {
- ScopedByteArrayRO namePtr(env, name);
- handler->setOsdName(reinterpret_cast<const char *>(namePtr.get()), len);
- }
-}
-
-static JNINativeMethod sMethods[] = {
- /* name, signature, funcPtr */
- { "nativeInit", "(Lcom/android/server/hdmi/HdmiCecService;)J",
- (void *)nativeInit },
- { "nativeSendMessage", "(JIII[B)V",
- (void *)nativeSendMessage },
- { "nativeAllocateLogicalAddress", "(JI)I",
- (void *)nativeAllocateLogicalAddress },
- { "nativeRemoveLogicalAddress", "(JI)V",
- (void *)nativeRemoveLogicalAddress },
- { "nativeGetPhysicalAddress", "(J)I",
- (void *)nativeGetPhysicalAddress },
- { "nativeSetOsdName", "(J[B)V",
- (void *)nativeSetOsdName },
-};
-
-#define CLASS_PATH "com/android/server/hdmi/HdmiCecService"
-
-int register_android_server_hdmi_HdmiCecService(JNIEnv* env) {
- int res = jniRegisterNativeMethods(env, CLASS_PATH, sMethods, NELEM(sMethods));
- LOG_FATAL_IF(res < 0, "Unable to register native methods.");
- return 0;
-}
-
-} /* namespace android */
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index bfa8286a1458..a3021044b78c 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -39,7 +39,6 @@ int register_android_server_location_FlpHardwareProvider(JNIEnv* env);
int register_android_server_connectivity_Vpn(JNIEnv* env);
int register_android_server_dreams_McuHal(JNIEnv* env);
int register_android_server_hdmi_HdmiCecController(JNIEnv* env);
-int register_android_server_hdmi_HdmiCecService(JNIEnv* env);
int register_android_server_hdmi_HdmiMhlController(JNIEnv* env);
int register_android_server_tv_TvInputHal(JNIEnv* env);
};
@@ -76,8 +75,6 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
register_android_server_dreams_McuHal(env);
register_android_server_BatteryStatsService(env);
register_android_server_hdmi_HdmiCecController(env);
- // TODO: remove this once replaces HdmiCecService with HdmiControlService.
- register_android_server_hdmi_HdmiCecService(env);
register_android_server_hdmi_HdmiMhlController(env);
register_android_server_tv_TvInputHal(env);
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index e8b7b69fbf78..54be537541ac 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -65,6 +65,7 @@ import com.android.server.display.DisplayManagerService;
import com.android.server.dreams.DreamManagerService;
import com.android.server.hdmi.HdmiControlService;
import com.android.server.input.InputManagerService;
+import com.android.server.job.JobSchedulerService;
import com.android.server.lights.LightsManager;
import com.android.server.lights.LightsService;
import com.android.server.media.MediaRouterService;
@@ -83,7 +84,6 @@ import com.android.server.power.ShutdownThread;
import com.android.server.search.SearchManagerService;
import com.android.server.statusbar.StatusBarManagerService;
import com.android.server.storage.DeviceStorageMonitorService;
-import com.android.server.task.TaskManagerService;
import com.android.server.trust.TrustManagerService;
import com.android.server.tv.TvInputManagerService;
import com.android.server.twilight.TwilightService;
@@ -129,12 +129,10 @@ public final class SystemServer {
"com.android.server.wifi.passpoint.PasspointService";
private static final String WIFI_P2P_SERVICE_CLASS =
"com.android.server.wifi.p2p.WifiP2pService";
- private static final String HDMI_CEC_SERVICE_CLASS =
- "com.android.server.hdmi.HdmiCecService";
private static final String ETHERNET_SERVICE_CLASS =
"com.android.server.ethernet.EthernetService";
- private static final String TASK_SERVICE_CLASS =
- "com.android.server.task.TaskManagerService";
+ private static final String JOB_SCHEDULER_SERVICE_CLASS =
+ "com.android.server.job.JobSchedulerService";
private final int mFactoryTestMode;
private Timer mProfilerSnapshotTimer;
@@ -351,6 +349,7 @@ public final class SystemServer {
boolean disableSystemUI = SystemProperties.getBoolean("config.disable_systemui", false);
boolean disableNonCoreServices = SystemProperties.getBoolean("config.disable_noncore", false);
boolean disableNetwork = SystemProperties.getBoolean("config.disable_network", false);
+ boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
try {
Slog.i(TAG, "Telephony Registry");
@@ -463,7 +462,7 @@ public final class SystemServer {
// Skip Bluetooth if we have an emulator kernel
// TODO: Use a more reliable check to see if this product should
// support Bluetooth - see bug 988521
- if (SystemProperties.get("ro.kernel.qemu").equals("1")) {
+ if (isEmulator) {
Slog.i(TAG, "No Bluetooh Service (emulator)");
} else if (mFactoryTestMode == FactoryTest.FACTORY_TEST_LOW_LEVEL) {
Slog.i(TAG, "No Bluetooth Service (factory test)");
@@ -664,10 +663,17 @@ public final class SystemServer {
reportWtf("starting Wi-Fi Scanning Service", e);
}
- try {
- mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS);
- } catch (Throwable e) {
- reportWtf("starting Ethernet Service", e);
+ if (!isEmulator) {
+ try {
+ mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS);
+ } catch (Throwable e) {
+ reportWtf("starting Ethernet Service", e);
+ }
+ } else {
+ // Don't start the Ethernet service on the emulator because
+ // it interferes with qemu's SLIRP emulation, which uses
+ // IPv4 over eth0. http://b/15341003 .
+ Slog.i(TAG, "Not starting Ethernet service (emulator)");
}
try {
@@ -834,7 +840,7 @@ public final class SystemServer {
mSystemServiceManager.startService(UiModeManagerService.class);
- mSystemServiceManager.startService(TaskManagerService.class);
+ mSystemServiceManager.startService(JobSchedulerService.class);
if (!disableNonCoreServices) {
try {
@@ -954,12 +960,6 @@ public final class SystemServer {
}
try {
- mSystemServiceManager.startService(HDMI_CEC_SERVICE_CLASS);
- } catch (Throwable e) {
- reportWtf("starting HdmiCec Service", e);
- }
-
- try {
mSystemServiceManager.startService(HdmiControlService.class);
} catch (Throwable e) {
reportWtf("starting HdmiControlService", e);
diff --git a/services/tests/servicestests/src/com/android/server/task/TaskStoreTest.java b/services/tests/servicestests/src/com/android/server/task/TaskStoreTest.java
index e7f9ca02b840..7a7fa0702d6a 100644
--- a/services/tests/servicestests/src/com/android/server/task/TaskStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/task/TaskStoreTest.java
@@ -3,18 +3,19 @@ package com.android.server.task;
import android.content.ComponentName;
import android.content.Context;
-import android.app.task.Task;
-import android.app.task.Task.Builder;
+import android.app.job.JobInfo;
+import android.app.job.JobInfo.Builder;
import android.os.PersistableBundle;
import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import android.util.Log;
-import com.android.server.task.controllers.TaskStatus;
+import com.android.server.job.JobMapReadFinishedListener;
+import com.android.server.job.JobStore;
+import com.android.server.job.controllers.JobStatus;
import java.util.List;
-import static com.android.server.task.TaskStore.initAndGet;
/**
* Test reading and writing correctly from file.
*/
@@ -26,12 +27,12 @@ public class TaskStoreTest extends AndroidTestCase {
private ComponentName mComponent;
private static final long IO_WAIT = 600L;
- TaskStore mTaskStoreUnderTest;
+ JobStore mTaskStoreUnderTest;
Context mTestContext;
- TaskMapReadFinishedListener mTaskMapReadFinishedListenerStub =
- new TaskMapReadFinishedListener() {
+ JobMapReadFinishedListener mTaskMapReadFinishedListenerStub =
+ new JobMapReadFinishedListener() {
@Override
- public void onTaskMapReadFinished(List<TaskStatus> tasks) {
+ public void onJobMapReadFinished(List<JobStatus> tasks) {
// do nothing.
}
};
@@ -40,7 +41,7 @@ public class TaskStoreTest extends AndroidTestCase {
public void setUp() throws Exception {
mTestContext = new RenamingDelegatingContext(getContext(), TEST_PREFIX);
Log.d(TAG, "Saving tasks to '" + mTestContext.getFilesDir() + "'");
- mTaskStoreUnderTest = TaskStore.initAndGetForTesting(mTestContext,
+ mTaskStoreUnderTest = JobStore.initAndGetForTesting(mTestContext,
mTestContext.getFilesDir(), mTaskMapReadFinishedListenerStub);
mComponent = new ComponentName(getContext().getPackageName(), StubClass.class.getName());
}
@@ -56,23 +57,23 @@ public class TaskStoreTest extends AndroidTestCase {
long runFromMillis = 2000L; // 2s
long initialBackoff = 10000L; // 10s
- final Task task = new Builder(taskId, mComponent)
+ final JobInfo task = new Builder(taskId, mComponent)
.setRequiresCharging(true)
- .setRequiredNetworkCapabilities(Task.NetworkType.ANY)
- .setBackoffCriteria(initialBackoff, Task.BackoffPolicy.EXPONENTIAL)
+ .setRequiredNetworkCapabilities(JobInfo.NetworkType.ANY)
+ .setBackoffCriteria(initialBackoff, JobInfo.BackoffPolicy.EXPONENTIAL)
.setOverrideDeadline(runByMillis)
.setMinimumLatency(runFromMillis)
.build();
- final TaskStatus ts = new TaskStatus(task, SOME_UID, true /* persisted */);
+ final JobStatus ts = new JobStatus(task, SOME_UID, true /* persisted */);
mTaskStoreUnderTest.add(ts);
Thread.sleep(IO_WAIT);
// Manually load tasks from xml file.
- mTaskStoreUnderTest.readTaskMapFromDisk(new TaskMapReadFinishedListener() {
+ mTaskStoreUnderTest.readJobMapFromDisk(new JobMapReadFinishedListener() {
@Override
- public void onTaskMapReadFinished(List<TaskStatus> tasks) {
+ public void onJobMapReadFinished(List<JobStatus> tasks) {
assertEquals("Didn't get expected number of persisted tasks.", 1, tasks.size());
- TaskStatus loadedTaskStatus = tasks.get(0);
- assertTasksEqual(task, loadedTaskStatus.getTask());
+ JobStatus loadedTaskStatus = tasks.get(0);
+ assertTasksEqual(task, loadedTaskStatus.getJob());
assertEquals("Different uids.", SOME_UID, tasks.get(0).getUid());
compareTimestampsSubjectToIoLatency("Early run-times not the same after read.",
ts.getEarliestRunTime(), loadedTaskStatus.getEarliestRunTime());
@@ -84,30 +85,30 @@ public class TaskStoreTest extends AndroidTestCase {
}
public void testWritingTwoFilesToDisk() throws Exception {
- final Task task1 = new Builder(8, mComponent)
+ final JobInfo task1 = new Builder(8, mComponent)
.setRequiresDeviceIdle(true)
.setPeriodic(10000L)
.setRequiresCharging(true)
.build();
- final Task task2 = new Builder(12, mComponent)
+ final JobInfo task2 = new Builder(12, mComponent)
.setMinimumLatency(5000L)
- .setBackoffCriteria(15000L, Task.BackoffPolicy.LINEAR)
+ .setBackoffCriteria(15000L, JobInfo.BackoffPolicy.LINEAR)
.setOverrideDeadline(30000L)
- .setRequiredNetworkCapabilities(Task.NetworkType.UNMETERED)
+ .setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.build();
- final TaskStatus taskStatus1 = new TaskStatus(task1, SOME_UID, true /* persisted */);
- final TaskStatus taskStatus2 = new TaskStatus(task2, SOME_UID, true /* persisted */);
+ final JobStatus taskStatus1 = new JobStatus(task1, SOME_UID, true /* persisted */);
+ final JobStatus taskStatus2 = new JobStatus(task2, SOME_UID, true /* persisted */);
mTaskStoreUnderTest.add(taskStatus1);
mTaskStoreUnderTest.add(taskStatus2);
Thread.sleep(IO_WAIT);
- mTaskStoreUnderTest.readTaskMapFromDisk(new TaskMapReadFinishedListener() {
+ mTaskStoreUnderTest.readJobMapFromDisk(new JobMapReadFinishedListener() {
@Override
- public void onTaskMapReadFinished(List<TaskStatus> tasks) {
+ public void onJobMapReadFinished(List<JobStatus> tasks) {
assertEquals("Incorrect # of persisted tasks.", 2, tasks.size());
- TaskStatus loaded1 = tasks.get(0);
- TaskStatus loaded2 = tasks.get(1);
- assertTasksEqual(task1, loaded1.getTask());
- assertTasksEqual(task2, loaded2.getTask());
+ JobStatus loaded1 = tasks.get(0);
+ JobStatus loaded2 = tasks.get(1);
+ assertTasksEqual(task1, loaded1.getJob());
+ assertTasksEqual(task2, loaded2.getJob());
// Check that the loaded task has the correct runtimes.
compareTimestampsSubjectToIoLatency("Early run-times not the same after read.",
@@ -124,7 +125,7 @@ public class TaskStoreTest extends AndroidTestCase {
}
public void testWritingTaskWithExtras() throws Exception {
- Task.Builder b = new Builder(8, mComponent)
+ JobInfo.Builder b = new Builder(8, mComponent)
.setRequiresDeviceIdle(true)
.setPeriodic(10000L)
.setRequiresCharging(true);
@@ -134,17 +135,17 @@ public class TaskStoreTest extends AndroidTestCase {
extras.putString("hi", "there");
extras.putInt("into", 3);
b.setExtras(extras);
- final Task task = b.build();
- TaskStatus taskStatus = new TaskStatus(task, SOME_UID, true /* persisted */);
+ final JobInfo task = b.build();
+ JobStatus taskStatus = new JobStatus(task, SOME_UID, true /* persisted */);
mTaskStoreUnderTest.add(taskStatus);
Thread.sleep(IO_WAIT);
- mTaskStoreUnderTest.readTaskMapFromDisk(new TaskMapReadFinishedListener() {
+ mTaskStoreUnderTest.readJobMapFromDisk(new JobMapReadFinishedListener() {
@Override
- public void onTaskMapReadFinished(List<TaskStatus> tasks) {
+ public void onJobMapReadFinished(List<JobStatus> tasks) {
assertEquals("Incorrect # of persisted tasks.", 1, tasks.size());
- TaskStatus loaded = tasks.get(0);
- assertTasksEqual(task, loaded.getTask());
+ JobStatus loaded = tasks.get(0);
+ assertTasksEqual(task, loaded.getJob());
}
});
@@ -153,7 +154,7 @@ public class TaskStoreTest extends AndroidTestCase {
/**
* Helper function to throw an error if the provided task and TaskStatus objects are not equal.
*/
- private void assertTasksEqual(Task first, Task second) {
+ private void assertTasksEqual(JobInfo first, JobInfo second) {
assertEquals("Different task ids.", first.getId(), second.getId());
assertEquals("Different components.", first.getService(), second.getService());
assertEquals("Different periodic status.", first.isPeriodic(), second.isPeriodic());
@@ -168,11 +169,11 @@ public class TaskStoreTest extends AndroidTestCase {
assertEquals("Invalid idle constraint.", first.isRequireDeviceIdle(),
second.isRequireDeviceIdle());
assertEquals("Invalid unmetered constraint.",
- first.getNetworkCapabilities() == Task.NetworkType.UNMETERED,
- second.getNetworkCapabilities() == Task.NetworkType.UNMETERED);
+ first.getNetworkCapabilities() == JobInfo.NetworkType.UNMETERED,
+ second.getNetworkCapabilities() == JobInfo.NetworkType.UNMETERED);
assertEquals("Invalid connectivity constraint.",
- first.getNetworkCapabilities() == Task.NetworkType.ANY,
- second.getNetworkCapabilities() == Task.NetworkType.ANY);
+ first.getNetworkCapabilities() == JobInfo.NetworkType.ANY,
+ second.getNetworkCapabilities() == JobInfo.NetworkType.ANY);
assertEquals("Invalid deadline constraint.",
first.hasLateConstraint(),
second.hasLateConstraint());
diff --git a/services/tests/servicestests/src/com/android/server/task/controllers/BatteryControllerTest.java b/services/tests/servicestests/src/com/android/server/task/controllers/BatteryControllerTest.java
deleted file mode 100644
index e617caf0cfa1..000000000000
--- a/services/tests/servicestests/src/com/android/server/task/controllers/BatteryControllerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2014 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.task.controllers;
-
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.test.AndroidTestCase;
-
-import com.android.server.task.StateChangedListener;
-
-import static com.android.server.task.controllers.BatteryController.getForTesting;
-
-import static org.mockito.Mockito.*;
-
-/**
- *
- */
-public class BatteryControllerTest extends AndroidTestCase {
- BatteryController mBatteryControllerUnderTest;
-
- StateChangedListener mStateChangedListenerStub = new StateChangedListener() {
- @Override
- public void onControllerStateChanged() {
-
- }
-
- @Override
- public void onTaskDeadlineExpired(TaskStatus taskStatus) {
-
- }
- };
- BatteryController.ChargingTracker mTrackerUnderTest;
-
- public void setUp() throws Exception {
- mBatteryControllerUnderTest = getForTesting(mStateChangedListenerStub, getTestContext());
- mTrackerUnderTest = mBatteryControllerUnderTest.getTracker();
- }
-
- public void testSendBatteryChargingIntent() throws Exception {
- Intent batteryConnectedIntent = new Intent(Intent.ACTION_POWER_CONNECTED)
- .setComponent(new ComponentName(getContext(), mTrackerUnderTest.getClass()));
- Intent batteryHealthyIntent = new Intent(Intent.ACTION_BATTERY_OKAY)
- .setComponent(new ComponentName(getContext(), mTrackerUnderTest.getClass()));
-
- mTrackerUnderTest.onReceiveInternal(batteryConnectedIntent);
- mTrackerUnderTest.onReceiveInternal(batteryHealthyIntent);
-
- assertTrue(mTrackerUnderTest.isOnStablePower());
- }
-
-}
diff --git a/telecomm/java/android/telecomm/CallCapabilities.java b/telecomm/java/android/telecomm/CallCapabilities.java
index b2b33a34393f..5aff19c0de47 100644
--- a/telecomm/java/android/telecomm/CallCapabilities.java
+++ b/telecomm/java/android/telecomm/CallCapabilities.java
@@ -17,7 +17,7 @@
package android.telecomm;
/** Defines actions a call currently supports. */
-public class CallCapabilities {
+public final class CallCapabilities {
/** Call can currently be put on hold or unheld. */
public static final int HOLD = 0x00000001;
@@ -27,24 +27,60 @@ public class CallCapabilities {
/** Call can currently be merged. */
public static final int MERGE_CALLS = 0x00000004;
- /* Call can currently be swapped with another call. */
+ /** Call can currently be swapped with another call. */
public static final int SWAP_CALLS = 0x00000008;
- /* Call currently supports adding another call to this one. */
+ /** Call currently supports adding another call to this one. */
public static final int ADD_CALL = 0x00000010;
- /* Call supports responding via text option. */
+ /** Call supports responding via text option. */
public static final int RESPOND_VIA_TEXT = 0x00000020;
- /* Call can be muted. */
+ /** Call can be muted. */
public static final int MUTE = 0x00000040;
- /* Call supports generic conference mode. */
+ /** Call supports generic conference mode. */
public static final int GENERIC_CONFERENCE = 0x00000080;
- /* Call currently supports switch between connections. */
+ /** Call currently supports switch between connections. */
public static final int CONNECTION_HANDOFF = 0x00000100;
public static final int ALL = HOLD | SUPPORT_HOLD | MERGE_CALLS | SWAP_CALLS | ADD_CALL
| RESPOND_VIA_TEXT | MUTE | GENERIC_CONFERENCE | CONNECTION_HANDOFF;
+
+ public static String toString(int capabilities) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("[Capabilities:");
+ if ((capabilities & HOLD) != 0) {
+ builder.append(" HOLD");
+ }
+ if ((capabilities & SUPPORT_HOLD) != 0) {
+ builder.append(" SUPPORT_HOLD");
+ }
+ if ((capabilities & MERGE_CALLS) != 0) {
+ builder.append(" MERGE_CALLS");
+ }
+ if ((capabilities & SWAP_CALLS) != 0) {
+ builder.append(" SWAP_CALLS");
+ }
+ if ((capabilities & ADD_CALL) != 0) {
+ builder.append(" ADD_CALL");
+ }
+ if ((capabilities & RESPOND_VIA_TEXT) != 0) {
+ builder.append(" RESPOND_VIA_TEXT");
+ }
+ if ((capabilities & MUTE) != 0) {
+ builder.append(" MUTE");
+ }
+ if ((capabilities & GENERIC_CONFERENCE) != 0) {
+ builder.append(" GENERIC_CONFERENCE");
+ }
+ if ((capabilities & CONNECTION_HANDOFF) != 0) {
+ builder.append(" HANDOFF");
+ }
+ builder.append("]");
+ return builder.toString();
+ }
+
+ private CallCapabilities() {}
}
diff --git a/telecomm/java/android/telecomm/CallService.java b/telecomm/java/android/telecomm/CallService.java
index d4521727bb45..0b5981ccbeac 100644
--- a/telecomm/java/android/telecomm/CallService.java
+++ b/telecomm/java/android/telecomm/CallService.java
@@ -61,8 +61,9 @@ public abstract class CallService extends Service {
private static final int MSG_ON_AUDIO_STATE_CHANGED = 11;
private static final int MSG_PLAY_DTMF_TONE = 12;
private static final int MSG_STOP_DTMF_TONE = 13;
- private static final int MSG_ADD_TO_CONFERENCE = 14;
+ private static final int MSG_CONFERENCE = 14;
private static final int MSG_SPLIT_FROM_CONFERENCE = 15;
+ private static final int MSG_ON_POST_DIAL_CONTINUE = 16;
/**
* Default Handler used to consolidate binder method calls onto a single thread.
@@ -127,29 +128,31 @@ public abstract class CallService extends Service {
case MSG_STOP_DTMF_TONE:
stopDtmfTone((String) msg.obj);
break;
- case MSG_ADD_TO_CONFERENCE: {
+ case MSG_CONFERENCE: {
SomeArgs args = (SomeArgs) msg.obj;
try {
- @SuppressWarnings("unchecked")
- List<String> callIds = (List<String>) args.arg2;
String conferenceCallId = (String) args.arg1;
- addToConference(conferenceCallId, callIds);
+ String callId = (String) args.arg2;
+ conference(conferenceCallId, callId);
} finally {
args.recycle();
}
break;
}
- case MSG_SPLIT_FROM_CONFERENCE: {
+ case MSG_ON_POST_DIAL_CONTINUE: {
SomeArgs args = (SomeArgs) msg.obj;
try {
- String conferenceCallId = (String) args.arg1;
- String callId = (String) args.arg2;
- splitFromConference(conferenceCallId, callId);
+ String callId = (String) args.arg1;
+ boolean proceed = (args.argi1 == 1);
+ onPostDialContinue(callId, proceed);
} finally {
args.recycle();
}
break;
}
+ case MSG_SPLIT_FROM_CONFERENCE:
+ splitFromConference((String) msg.obj);
+ break;
default:
break;
}
@@ -233,19 +236,24 @@ public abstract class CallService extends Service {
}
@Override
- public void addToConference(String conferenceCallId, List<String> callsToConference) {
+ public void conference(String conferenceCallId, String callId) {
SomeArgs args = SomeArgs.obtain();
args.arg1 = conferenceCallId;
- args.arg2 = callsToConference;
- mMessageHandler.obtainMessage(MSG_ADD_TO_CONFERENCE, args).sendToTarget();
+ args.arg2 = callId;
+ mMessageHandler.obtainMessage(MSG_CONFERENCE, args).sendToTarget();
}
@Override
- public void splitFromConference(String conferenceCallId, String callId) {
+ public void splitFromConference(String callId) {
+ mMessageHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, callId).sendToTarget();
+ }
+
+ @Override
+ public void onPostDialContinue(String callId, boolean proceed) {
SomeArgs args = SomeArgs.obtain();
- args.arg1 = conferenceCallId;
- args.arg2 = callId;
- mMessageHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, args).sendToTarget();
+ args.arg1 = callId;
+ args.argi1 = proceed ? 1 : 0;
+ mMessageHandler.obtainMessage(MSG_ON_POST_DIAL_CONTINUE, args).sendToTarget();
}
}
@@ -404,22 +412,23 @@ public abstract class CallService extends Service {
public abstract void onAudioStateChanged(String activeCallId, CallAudioState audioState);
/**
- * Adds the specified calls to the specified conference call.
+ * Conferences the specified call.
*
* @param conferenceCallId The unique ID of the conference call onto which the specified calls
* should be added.
- * @param callIds The calls to add to the conference call.
+ * @param callId The call to conference.
* @hide
*/
- public abstract void addToConference(String conferenceCallId, List<String> callIds);
+ public abstract void conference(String conferenceCallId, String callId);
/**
- * Removes the specified call from the specified conference call. This is a no-op if the call
- * is not already part of the conference call.
+ * Removes the specified call from a conference call.
*
- * @param conferenceCallId The conference call.
* @param callId The call to remove from the conference call
* @hide
*/
- public abstract void splitFromConference(String conferenceCallId, String callId);
+ public abstract void splitFromConference(String callId);
+
+ public void onPostDialContinue(String callId, boolean proceed) {}
+ public void onPostDialWait(Connection conn, String remaining) {}
}
diff --git a/telecomm/java/android/telecomm/CallServiceAdapter.java b/telecomm/java/android/telecomm/CallServiceAdapter.java
index 0c57828f9472..ce8932148d7d 100644
--- a/telecomm/java/android/telecomm/CallServiceAdapter.java
+++ b/telecomm/java/android/telecomm/CallServiceAdapter.java
@@ -179,12 +179,12 @@ public final class CallServiceAdapter {
* Indicates that the specified call can conference with any of the specified list of calls.
*
* @param callId The unique ID of the call.
- * @param conferenceCapableCallIds The unique IDs of the calls which can be conferenced.
+ * @param canConference Specified whether or not the call can be conferenced.
* @hide
*/
- public void setCanConferenceWith(String callId, List<String> conferenceCapableCallIds) {
+ public void setCanConference(String callId, boolean canConference) {
try {
- mAdapter.setCanConferenceWith(callId, conferenceCapableCallIds);
+ mAdapter.setCanConference(callId, canConference);
} catch (RemoteException ignored) {
}
}
@@ -193,13 +193,14 @@ public final class CallServiceAdapter {
* Indicates whether or not the specified call is currently conferenced into the specified
* conference call.
*
- * @param conferenceCallId The unique ID of the conference call.
* @param callId The unique ID of the call being conferenced.
+ * @param conferenceCallId The unique ID of the conference call. Null if call is not
+ * conferenced.
* @hide
*/
- public void setIsConferenced(String conferenceCallId, String callId, boolean isConferenced) {
+ public void setIsConferenced(String callId, String conferenceCallId) {
try {
- mAdapter.setIsConferenced(conferenceCallId, callId, isConferenced);
+ mAdapter.setIsConferenced(callId, conferenceCallId);
} catch (RemoteException ignored) {
}
}
@@ -217,4 +218,23 @@ public final class CallServiceAdapter {
} catch (RemoteException ignored) {
}
}
+
+ public void onPostDialWait(String callId, String remaining) {
+ try {
+ mAdapter.onPostDialWait(callId, remaining);
+ } catch (RemoteException ignored) {
+ }
+ }
+
+ /**
+ * Indicates that a new conference call has been created.
+ *
+ * @param callId The unique ID of the conference call.
+ */
+ public void addConferenceCall(String callId) {
+ try {
+ mAdapter.addConferenceCall(callId, null);
+ } catch (RemoteException ignored) {
+ }
+ }
}
diff --git a/telecomm/java/android/telecomm/Connection.java b/telecomm/java/android/telecomm/Connection.java
index 8cce8e62c1aa..7aee77085fb7 100644
--- a/telecomm/java/android/telecomm/Connection.java
+++ b/telecomm/java/android/telecomm/Connection.java
@@ -19,7 +19,10 @@ package android.telecomm;
import android.net.Uri;
import android.os.Bundle;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -35,6 +38,8 @@ public abstract class Connection {
void onDisconnected(Connection c, int cause, String message);
void onRequestingRingback(Connection c, boolean ringback);
void onDestroyed(Connection c);
+ void onConferenceCapableChanged(Connection c, boolean isConferenceCapable);
+ void onParentConnectionChanged(Connection c, Connection parent);
}
public static class ListenerBase implements Listener {
@@ -65,6 +70,14 @@ public abstract class Connection {
/** {@inheritDoc} */
@Override
public void onRequestingRingback(Connection c, boolean ringback) {}
+
+ /** ${inheritDoc} */
+ @Override
+ public void onConferenceCapableChanged(Connection c, boolean isConferenceCapable) {}
+
+ /** ${inheritDoc} */
+ @Override
+ public void onParentConnectionChanged(Connection c, Connection parent) {}
}
public final class State {
@@ -79,10 +92,14 @@ public abstract class Connection {
}
private final Set<Listener> mListeners = new HashSet<>();
+ private final List<Connection> mChildConnections = new ArrayList<>();
+
private int mState = State.NEW;
private CallAudioState mCallAudioState;
private Uri mHandle;
private boolean mRequestingRingback = false;
+ private boolean mIsConferenceCapable = false;
+ private Connection mParentConnection;
/**
* Create a new Connection.
@@ -176,6 +193,16 @@ public abstract class Connection {
}
/**
+ * Separates this Connection from a parent connection.
+ *
+ * @hide
+ */
+ public final void separate() {
+ Log.d(this, "separate");
+ onSeparate();
+ }
+
+ /**
* Abort this Connection. The Connection will immediately transition to
* the {@link State#DISCONNECTED} state, and send no notifications of this
* or any other future events.
@@ -240,6 +267,14 @@ public abstract class Connection {
}
/**
+ * TODO(santoscordon): Needs updated documentation.
+ */
+ public final void conference() {
+ Log.d(this, "conference");
+ onConference();
+ }
+
+ /**
* Inform this Connection that the state of its audio output has been changed externally.
*
* @param state The new audio state.
@@ -274,7 +309,7 @@ public abstract class Connection {
}
/**
- * @return Whether this connection is requesting that the system play a ringback tone
+ * Returns whether this connection is requesting that the system play a ringback tone
* on its behalf.
*/
public boolean isRequestingRingback() {
@@ -282,6 +317,38 @@ public abstract class Connection {
}
/**
+ * Returns whether this connection is a conference connection (has child connections).
+ */
+ public boolean isConferenceConnection() {
+ return !mChildConnections.isEmpty();
+ }
+
+ public void setParentConnection(Connection parentConnection) {
+ Log.d(this, "parenting %s to %s", this, parentConnection);
+ if (mParentConnection != parentConnection) {
+ if (mParentConnection != null) {
+ mParentConnection.removeChild(this);
+ }
+ mParentConnection = parentConnection;
+ if (mParentConnection != null) {
+ mParentConnection.addChild(this);
+ // do something if the child connections goes down to ZERO.
+ }
+ for (Listener l : mListeners) {
+ l.onParentConnectionChanged(this, mParentConnection);
+ }
+ }
+ }
+
+ public Connection getParentConnection() {
+ return mParentConnection;
+ }
+
+ public List<Connection> getChildConnections() {
+ return mChildConnections;
+ }
+
+ /**
* Sets the value of the {@link #getHandle()} property and notifies listeners.
*
* @param handle The new handle.
@@ -359,6 +426,32 @@ public abstract class Connection {
}
/**
+ * TODO(santoscordon): Needs documentation.
+ */
+ protected void setIsConferenceCapable(boolean isConferenceCapable) {
+ if (mIsConferenceCapable != isConferenceCapable) {
+ mIsConferenceCapable = isConferenceCapable;
+ for (Listener l : mListeners) {
+ l.onConferenceCapableChanged(this, mIsConferenceCapable);
+ }
+ }
+ }
+
+ /**
+ * TODO(santoscordon): Needs documentation.
+ */
+ protected void setDestroyed() {
+ // It is possible that onDestroy() will trigger the listener to remove itself which will
+ // result in a concurrent modification exception. To counteract this we make a copy of the
+ // listeners and iterate on that.
+ for (Listener l : new ArrayList<>(mListeners)) {
+ if (mListeners.contains(l)) {
+ l.onDestroyed(this);
+ }
+ }
+ }
+
+ /**
* Notifies this Connection and listeners that the {@link #getCallAudioState()} property
* has a new value.
*
@@ -418,6 +511,11 @@ public abstract class Connection {
protected void onDisconnect() {}
/**
+ * Notifies this Connection of a request to disconnect.
+ */
+ protected void onSeparate() {}
+
+ /**
* Notifies this Connection of a request to abort.
*/
protected void onAbort() {}
@@ -444,6 +542,33 @@ public abstract class Connection {
*/
protected void onReject() {}
+ /**
+ * Notifies this Connection whether the user wishes to proceed with the post-dial DTMF codes.
+ */
+ protected void onPostDialContinue(boolean proceed) {}
+
+ /**
+ * TODO(santoscordon): Needs documentation.
+ */
+ protected void onConference() {}
+
+ /**
+ * TODO(santoscordon): Needs documentation.
+ */
+ protected void onChildrenChanged(List<Connection> children) {}
+
+ private void addChild(Connection connection) {
+ Log.d(this, "adding child %s", connection);
+ mChildConnections.add(connection);
+ onChildrenChanged(mChildConnections);
+ }
+
+ private void removeChild(Connection connection) {
+ Log.d(this, "removing child %s", connection);
+ mChildConnections.remove(connection);
+ onChildrenChanged(mChildConnections);
+ }
+
private void setState(int state) {
Log.d(this, "setState: %s", stateToString(state));
onSetState(state);
diff --git a/telecomm/java/android/telecomm/ConnectionService.java b/telecomm/java/android/telecomm/ConnectionService.java
index 31de15c354dc..9dfad2d1ee2b 100644
--- a/telecomm/java/android/telecomm/ConnectionService.java
+++ b/telecomm/java/android/telecomm/ConnectionService.java
@@ -20,10 +20,15 @@ import android.net.Uri;
import android.os.Bundle;
import android.telephony.DisconnectCause;
+import android.os.SystemClock;
+
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* A {@link android.app.Service} that provides telephone connections to
@@ -32,7 +37,6 @@ import java.util.Map;
public abstract class ConnectionService extends CallService {
// Flag controlling whether PII is emitted into the logs
private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG);
-
private static final Connection NULL_CONNECTION = new Connection() {};
// Mappings from Connections to IDs as understood by the current CallService implementation
@@ -99,6 +103,20 @@ public abstract class ConnectionService extends CallService {
Log.d(this, "Adapter onRingback %b", ringback);
getAdapter().setRequestingRingback(id, ringback);
}
+
+ @Override
+ public void onConferenceCapableChanged(Connection c, boolean isConferenceCapable) {
+ String id = mIdByConnection.get(c);
+ getAdapter().setCanConference(id, isConferenceCapable);
+ }
+
+ /** ${inheritDoc} */
+ @Override
+ public void onParentConnectionChanged(Connection c, Connection parent) {
+ String id = mIdByConnection.get(c);
+ String parentId = parent == null ? null : mIdByConnection.get(parent);
+ getAdapter().setIsConferenced(id, parentId);
+ }
};
@Override
@@ -110,8 +128,7 @@ public abstract class ConnectionService extends CallService {
@Override
public void onResult(Uri handle, Subscription... result) {
boolean isCompatible = result.length > 0;
- Log.d(this, "adapter setIsCompatibleWith "
- + callInfo.getId() + " " + isCompatible);
+ Log.d(this, "adapter setIsCompatibleWith ");
getAdapter().setIsCompatibleWith(callInfo.getId(), isCompatible);
}
@@ -135,7 +152,7 @@ public abstract class ConnectionService extends CallService {
new Response<ConnectionRequest, Connection>() {
@Override
public void onResult(ConnectionRequest request, Connection... result) {
- if (result.length != 1) {
+ if (result != null && result.length != 1) {
Log.d(this, "adapter handleFailedOutgoingCall %s", callInfo);
getAdapter().handleFailedOutgoingCall(
request,
@@ -145,9 +162,10 @@ public abstract class ConnectionService extends CallService {
c.abort();
}
} else {
- addConnection(callInfo.getId(), result[0]);
- Log.d(this, "adapter handleSuccessfulOutgoingCall %s", callInfo.getId());
+ Log.d(this, "adapter handleSuccessfulOutgoingCall %s",
+ callInfo.getId());
getAdapter().handleSuccessfulOutgoingCall(callInfo.getId());
+ addConnection(callInfo.getId(), result[0]);
}
}
@@ -176,7 +194,7 @@ public abstract class ConnectionService extends CallService {
new Response<ConnectionRequest, Connection>() {
@Override
public void onResult(ConnectionRequest request, Connection... result) {
- if (result.length != 1) {
+ if (result != null && result.length != 1) {
Log.d(this, "adapter handleFailedOutgoingCall %s", callId);
getAdapter().handleFailedOutgoingCall(
request,
@@ -257,27 +275,43 @@ public abstract class ConnectionService extends CallService {
/** @hide */
@Override
- public final void addToConference(String conferenceCallId, List<String> callIds) {
- Log.d(this, "addToConference %s, %s", conferenceCallId, callIds);
-
- List<Connection> connections = new LinkedList<>();
- for (String id : callIds) {
- Connection connection = findConnectionForAction(id, "addToConference");
- if (connection == NULL_CONNECTION) {
- Log.w(this, "Connection missing in conference request %s.", id);
- return;
- }
- connections.add(connection);
+ public final void conference(final String conferenceCallId, String callId) {
+ Log.d(this, "conference %s, %s", conferenceCallId, callId);
+
+ Connection connection = findConnectionForAction(callId, "conference");
+ if (connection == NULL_CONNECTION) {
+ Log.w(this, "Connection missing in conference request %s.", callId);
+ return;
}
- // TODO(santoscordon): Find an existing conference call or create a new one. Then call
- // conferenceWith on it.
+ onCreateConferenceConnection(conferenceCallId, connection,
+ new Response<String, Connection>() {
+ /** ${inheritDoc} */
+ @Override
+ public void onResult(String ignored, Connection... result) {
+ Log.d(this, "onCreateConference.Response %s", (Object[]) result);
+ if (result != null && result.length == 1) {
+ Connection conferenceConnection = result[0];
+ if (!mIdByConnection.containsKey(conferenceConnection)) {
+ Log.v(this, "sending new conference call %s", conferenceCallId);
+ getAdapter().addConferenceCall(conferenceCallId);
+ addConnection(conferenceCallId, conferenceConnection);
+ }
+ }
+ }
+
+ /** ${inheritDoc} */
+ @Override
+ public void onError(String request, int code, String reason) {
+ // no-op
+ }
+ });
}
/** @hide */
@Override
- public final void splitFromConference(String conferenceCallId, String callId) {
- Log.d(this, "splitFromConference(%s, %s)", conferenceCallId, callId);
+ public final void splitFromConference(String callId) {
+ Log.d(this, "splitFromConference(%s)", callId);
Connection connection = findConnectionForAction(callId, "splitFromConference");
if (connection == NULL_CONNECTION) {
@@ -288,6 +322,32 @@ public abstract class ConnectionService extends CallService {
// TODO(santoscordon): Find existing conference call and invoke split(connection).
}
+ @Override
+ public final void onPostDialContinue(String callId, boolean proceed) {
+ Log.d(this, "onPostDialContinue(%s)", callId);
+
+ Connection connection = findConnectionForAction(callId, "onPostDialContinue");
+ if (connection == NULL_CONNECTION) {
+ Log.w(this, "Connection missing in post-dial request %s.", callId);
+ return;
+ }
+ connection.onPostDialContinue(proceed);
+ }
+
+ @Override
+ public final void onPostDialWait(Connection conn, String remaining) {
+ Log.d(this, "onPostDialWait(%s, %s)", conn, remaining);
+
+ getAdapter().onPostDialWait(mIdByConnection.get(conn), remaining);
+ }
+
+ /**
+ * Returns all connections currently associated with this connection service.
+ */
+ public Collection<Connection> getAllConnections() {
+ return mConnectionById.values();
+ }
+
/**
* Find a set of Subscriptions matching a given handle (e.g. phone number).
*
@@ -309,6 +369,21 @@ public abstract class ConnectionService extends CallService {
Response<ConnectionRequest, Connection> callback) {}
/**
+ * Returns a new or existing conference connection when the the user elects to convert the
+ * specified connection into a conference call. The specified connection can be any connection
+ * which had previously specified itself as conference-capable including both simple connections
+ * and connections previously returned from this method.
+ *
+ * @param connection The connection from which the user opted to start a conference call.
+ * @param token The token to be passed into the response callback.
+ * @param callback The callback for providing the potentially-new conference connection.
+ */
+ public void onCreateConferenceConnection(
+ String token,
+ Connection connection,
+ Response<String, Connection> callback) {}
+
+ /**
* Create a Connection to match an incoming connection notification.
*
* @param request Data encapsulating details of the desired Connection.
@@ -318,6 +393,20 @@ public abstract class ConnectionService extends CallService {
ConnectionRequest request,
Response<ConnectionRequest, Connection> callback) {}
+ /**
+ * Notifies that a connection has been added to this connection service and sent to Telecomm.
+ *
+ * @param connection The connection which was added.
+ */
+ public void onConnectionAdded(Connection connection) {}
+
+ /**
+ * Notified that a connection has been removed from this connection service.
+ *
+ * @param connection The connection which was removed.
+ */
+ public void onConnectionRemoved(Connection connection) {}
+
static String toLogSafePhoneNumber(String number) {
// For unknown number, log empty string.
if (number == null) {
@@ -367,12 +456,14 @@ public abstract class ConnectionService extends CallService {
mConnectionById.put(callId, connection);
mIdByConnection.put(connection, callId);
connection.addConnectionListener(mConnectionListener);
+ onConnectionAdded(connection);
}
private void removeConnection(Connection connection) {
connection.removeConnectionListener(mConnectionListener);
mConnectionById.remove(mIdByConnection.get(connection));
mIdByConnection.remove(connection);
+ onConnectionRemoved(connection);
}
private Connection findConnectionForAction(String callId, String action) {
diff --git a/telecomm/java/android/telecomm/InCallAdapter.java b/telecomm/java/android/telecomm/InCallAdapter.java
index 6838ede45470..86b7a506a61f 100644
--- a/telecomm/java/android/telecomm/InCallAdapter.java
+++ b/telecomm/java/android/telecomm/InCallAdapter.java
@@ -174,13 +174,14 @@ public final class InCallAdapter {
* will pause playing the tones and notify the {@link InCallService} that the call is in the
* {@link InCallService#setPostDialWait(String,String)} state. When the user decides to continue
* the postdial sequence, the {@link InCallService} should invoke the
- * {@link #postDialContinue(String)} method.
+ * {@link #postDialContinue(String,boolean)} method.
*
* @param callId The unique ID of the call for which postdial string playing should continue.
+ * @param proceed Whether or not to continue with the post-dial sequence.
*/
- public void postDialContinue(String callId) {
+ public void postDialContinue(String callId, boolean proceed) {
try {
- mAdapter.postDialContinue(callId);
+ mAdapter.postDialContinue(callId, proceed);
} catch (RemoteException e) {
}
}
@@ -198,15 +199,14 @@ public final class InCallAdapter {
}
/**
- * Instructs Telecomm to conference the specified calls together.
+ * Instructs Telecomm to conference the specified call.
*
* @param callId The unique ID of the call.
- * @param callIdToConference The unique ID of the call to conference with.
* @hide
*/
- void conferenceWith(String callId, String callIdToConference) {
+ public void conference(String callId) {
try {
- mAdapter.conferenceWith(callId, callIdToConference);
+ mAdapter.conference(callId);
} catch (RemoteException ignored) {
}
}
@@ -218,7 +218,7 @@ public final class InCallAdapter {
* @param callId The unique ID of the call.
* @hide
*/
- void splitFromConference(String callId) {
+ public void splitFromConference(String callId) {
try {
mAdapter.splitFromConference(callId);
} catch (RemoteException ignored) {
diff --git a/telecomm/java/android/telecomm/InCallCall.java b/telecomm/java/android/telecomm/InCallCall.java
index b531ccd684a6..432e378455f8 100644
--- a/telecomm/java/android/telecomm/InCallCall.java
+++ b/telecomm/java/android/telecomm/InCallCall.java
@@ -39,7 +39,6 @@ public final class InCallCall implements Parcelable {
private final GatewayInfo mGatewayInfo;
private final CallServiceDescriptor mCurrentCallServiceDescriptor;
private final CallServiceDescriptor mHandoffCallServiceDescriptor;
- private final List<String> mConferenceCapableCallIds;
private final String mParentCallId;
private final List<String> mChildCallIds;
@@ -57,8 +56,7 @@ public final class InCallCall implements Parcelable {
CallServiceDescriptor descriptor,
CallServiceDescriptor handoffDescriptor) {
this(id, state, disconnectCauseCode, disconnectCauseMsg, capabilities, connectTimeMillis,
- handle, gatewayInfo, descriptor, handoffDescriptor, Collections.EMPTY_LIST, null,
- Collections.EMPTY_LIST);
+ handle, gatewayInfo, descriptor, handoffDescriptor, null, Collections.EMPTY_LIST);
}
/** @hide */
@@ -73,7 +71,6 @@ public final class InCallCall implements Parcelable {
GatewayInfo gatewayInfo,
CallServiceDescriptor descriptor,
CallServiceDescriptor handoffDescriptor,
- List<String> conferenceCapableCallIds,
String parentCallId,
List<String> childCallIds) {
mId = id;
@@ -86,7 +83,6 @@ public final class InCallCall implements Parcelable {
mGatewayInfo = gatewayInfo;
mCurrentCallServiceDescriptor = descriptor;
mHandoffCallServiceDescriptor = handoffDescriptor;
- mConferenceCapableCallIds = conferenceCapableCallIds;
mParentCallId = parentCallId;
mChildCallIds = childCallIds;
}
@@ -151,14 +147,6 @@ public final class InCallCall implements Parcelable {
}
/**
- * The calls with which this call can conference.
- * @hide
- */
- public List<String> getConferenceCapableCallIds() {
- return mConferenceCapableCallIds;
- }
-
- /**
* The conference call to which this call is conferenced. Null if not conferenced.
* @hide
*/
@@ -191,14 +179,12 @@ public final class InCallCall implements Parcelable {
GatewayInfo gatewayInfo = source.readParcelable(classLoader);
CallServiceDescriptor descriptor = source.readParcelable(classLoader);
CallServiceDescriptor handoffDescriptor = source.readParcelable(classLoader);
- List<String> conferenceCapableCallIds = new ArrayList<>();
- source.readList(conferenceCapableCallIds, classLoader);
String parentCallId = source.readString();
List<String> childCallIds = new ArrayList<>();
source.readList(childCallIds, classLoader);
return new InCallCall(id, state, disconnectCauseCode, disconnectCauseMsg, capabilities,
connectTimeMillis, handle, gatewayInfo, descriptor, handoffDescriptor,
- conferenceCapableCallIds, parentCallId, childCallIds);
+ parentCallId, childCallIds);
}
@Override
@@ -226,8 +212,12 @@ public final class InCallCall implements Parcelable {
destination.writeParcelable(mGatewayInfo, 0);
destination.writeParcelable(mCurrentCallServiceDescriptor, 0);
destination.writeParcelable(mHandoffCallServiceDescriptor, 0);
- destination.writeList(mConferenceCapableCallIds);
destination.writeString(mParentCallId);
destination.writeList(mChildCallIds);
}
+
+ @Override
+ public String toString() {
+ return String.format("[%s, parent:%s, children:%s]", mId, mParentCallId, mChildCallIds);
+ }
}
diff --git a/telecomm/java/com/android/internal/telecomm/ICallService.aidl b/telecomm/java/com/android/internal/telecomm/ICallService.aidl
index 771a3ae9ef38..827f331f43bc 100644
--- a/telecomm/java/com/android/internal/telecomm/ICallService.aidl
+++ b/telecomm/java/com/android/internal/telecomm/ICallService.aidl
@@ -56,7 +56,9 @@ oneway interface ICallService {
void stopDtmfTone(String callId);
- void addToConference(String conferenceCallId, in List<String> callIds);
+ void conference(String conferenceCallId, String callId);
- void splitFromConference(String conferenceCallId, String callId);
+ void splitFromConference(String callId);
+
+ void onPostDialContinue(String callId, boolean proceed);
}
diff --git a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
index f94eb322d025..ab269bbe38a8 100644
--- a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
+++ b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl
@@ -47,9 +47,13 @@ oneway interface ICallServiceAdapter {
void setRequestingRingback(String callId, boolean ringing);
- void setCanConferenceWith(String callId, in List<String> conferenceCapableCallIds);
+ void setCanConference(String callId, boolean canConference);
- void setIsConferenced(String conferenceCallId, String callId, boolean isConferenced);
+ void setIsConferenced(String callId, String conferenceCallId);
+
+ void addConferenceCall(String callId, in CallInfo callInfo);
void removeCall(String callId);
+
+ void onPostDialWait(String callId, String remaining);
}
diff --git a/telecomm/java/com/android/internal/telecomm/IInCallAdapter.aidl b/telecomm/java/com/android/internal/telecomm/IInCallAdapter.aidl
index 6a27217a9275..5717456d5543 100644
--- a/telecomm/java/com/android/internal/telecomm/IInCallAdapter.aidl
+++ b/telecomm/java/com/android/internal/telecomm/IInCallAdapter.aidl
@@ -44,11 +44,11 @@ oneway interface IInCallAdapter {
void stopDtmfTone(String callId);
- void postDialContinue(String callId);
+ void postDialContinue(String callId, boolean proceed);
void handoffCall(String callId);
- void conferenceWith(String callId, String callIdToConference);
+ void conference(String callId);
void splitFromConference(String callId);
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 68bf6281fe18..949bc5dd932c 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -16,7 +16,7 @@
package android.telephony;
-import android.annotation.PrivateApi;
+import android.annotation.SystemApi;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.content.ComponentName;
@@ -1743,11 +1743,11 @@ public class TelephonyManager {
}
/**
- * Expose the rest of ITelephony to @PrivateApi
+ * Expose the rest of ITelephony to @SystemApi
*/
/** @hide */
- @PrivateApi
+ @SystemApi
public void dial(String number) {
try {
getITelephony().dial(number);
@@ -1757,7 +1757,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void call(String callingPackage, String number) {
try {
getITelephony().call(callingPackage, number);
@@ -1767,7 +1767,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean showCallScreen() {
try {
getTelecommService().showCallScreen(false);
@@ -1779,7 +1779,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean showCallScreenWithDialpad(boolean showDialpad) {
try {
getTelecommService().showCallScreen(showDialpad);
@@ -1791,7 +1791,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean endCall() {
try {
return getITelephony().endCall();
@@ -1802,7 +1802,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void answerRingingCall() {
try {
getITelephony().answerRingingCall();
@@ -1812,7 +1812,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void silenceRinger() {
try {
getTelecommService().silenceRinger();
@@ -1822,7 +1822,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isOffhook() {
try {
return getITelephony().isOffhook();
@@ -1833,7 +1833,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isRinging() {
try {
return getITelephony().isRinging();
@@ -1844,7 +1844,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isIdle() {
try {
return getITelephony().isIdle();
@@ -1855,7 +1855,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isRadioOn() {
try {
return getITelephony().isRadioOn();
@@ -1866,7 +1866,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isSimPinEnabled() {
try {
return getITelephony().isSimPinEnabled();
@@ -1877,7 +1877,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void cancelMissedCallsNotification() {
try {
getITelephony().cancelMissedCallsNotification();
@@ -1887,7 +1887,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean supplyPin(String pin) {
try {
return getITelephony().supplyPin(pin);
@@ -1898,7 +1898,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean supplyPuk(String puk, String pin) {
try {
return getITelephony().supplyPuk(puk, pin);
@@ -1909,7 +1909,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public int[] supplyPinReportResult(String pin) {
try {
return getITelephony().supplyPinReportResult(pin);
@@ -1920,7 +1920,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public int[] supplyPukReportResult(String puk, String pin) {
try {
return getITelephony().supplyPukReportResult(puk, pin);
@@ -1931,7 +1931,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean handlePinMmi(String dialString) {
try {
return getITelephony().handlePinMmi(dialString);
@@ -1942,7 +1942,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void toggleRadioOnOff() {
try {
getITelephony().toggleRadioOnOff();
@@ -1952,7 +1952,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean setRadio(boolean turnOn) {
try {
return getITelephony().setRadio(turnOn);
@@ -1963,7 +1963,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean setRadioPower(boolean turnOn) {
try {
return getITelephony().setRadioPower(turnOn);
@@ -1974,7 +1974,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void updateServiceLocation() {
try {
getITelephony().updateServiceLocation();
@@ -1984,7 +1984,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public int enableApnType(String type) {
try {
return getITelephony().enableApnType(type);
@@ -1995,7 +1995,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public int disableApnType(String type) {
try {
return getITelephony().disableApnType(type);
@@ -2006,7 +2006,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean enableDataConnectivity() {
try {
return getITelephony().enableDataConnectivity();
@@ -2017,7 +2017,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean disableDataConnectivity() {
try {
return getITelephony().disableDataConnectivity();
@@ -2028,7 +2028,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean isDataConnectivityPossible() {
try {
return getITelephony().isDataConnectivityPossible();
@@ -2039,7 +2039,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean needsOtaServiceProvisioning() {
try {
return getITelephony().needsOtaServiceProvisioning();
@@ -2050,7 +2050,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public void setDataEnabled(boolean enable) {
try {
getITelephony().setDataEnabled(enable);
@@ -2060,7 +2060,7 @@ public class TelephonyManager {
}
/** @hide */
- @PrivateApi
+ @SystemApi
public boolean getDataEnabled() {
try {
return getITelephony().getDataEnabled();
diff --git a/tests/JobSchedulerTestApp/Android.mk b/tests/JobSchedulerTestApp/Android.mk
new file mode 100644
index 000000000000..7336d8c6a00d
--- /dev/null
+++ b/tests/JobSchedulerTestApp/Android.mk
@@ -0,0 +1,15 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := JobSchedulerTestApp
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+include $(BUILD_PACKAGE)
+
diff --git a/tests/JobSchedulerTestApp/AndroidManifest.xml b/tests/JobSchedulerTestApp/AndroidManifest.xml
new file mode 100644
index 000000000000..96541972b9b8
--- /dev/null
+++ b/tests/JobSchedulerTestApp/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.demo.jobSchedulerApp" >
+
+ <uses-sdk
+ android:minSdkVersion="18"
+ android:targetSdkVersion="18" />
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+
+ <application
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name="com.android.demo.jobSchedulerApp.MainActivity"
+ android:label="@string/app_name"
+ android:windowSoftInputMode="stateHidden" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <service
+ android:name=".service.TestJobService"
+ android:permission="android.permission.BIND_JOB_SERVICE"
+ android:exported="true"/>
+ </application>
+
+</manifest>
diff --git a/tests/JobSchedulerTestApp/res/drawable-hdpi/ic_launcher.png b/tests/JobSchedulerTestApp/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 000000000000..a0f7005a31c1
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/tests/JobSchedulerTestApp/res/drawable-mdpi/ic_launcher.png b/tests/JobSchedulerTestApp/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 000000000000..a085462c2542
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_action_refresh.png b/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_action_refresh.png
new file mode 100644
index 000000000000..4f5d2558fb4a
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_action_refresh.png
Binary files differ
diff --git a/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_launcher.png b/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 000000000000..4f78eb846f0c
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/tests/JobSchedulerTestApp/res/drawable-xxhdpi/ic_launcher.png b/tests/JobSchedulerTestApp/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000000..b198ee3e9fff
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/tests/JobSchedulerTestApp/res/layout/activity_main.xml b/tests/JobSchedulerTestApp/res/layout/activity_main.xml
new file mode 100644
index 000000000000..7f4961b94040
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/layout/activity_main.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="100dp">
+ <TextView
+ android:id="@+id/onstart_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@color/none_received"
+ android:gravity="center"
+ android:text="@string/onstarttask"/>
+ <TextView
+ android:id="@+id/onstop_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@color/none_received"
+ android:gravity="center"
+ android:text="@string/onstoptask"/>
+ </LinearLayout>
+ <Button
+ android:id="@+id/finished_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:layout_marginBottom="5dp"
+ android:onClick="finishJob"
+ android:text="@string/finish_job_button_text"/>
+
+ <TextView
+ android:id="@+id/task_params"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/defaultparamtext"
+ android:gravity="center"
+ android:textSize="20dp"
+
+ android:padding="15dp"
+ android:layout_marginBottom="10dp" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/constraints"
+ android:textSize="18dp"/>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_marginLeft="10dp">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/connectivity"
+ android:layout_marginRight="10dp"/>
+ <RadioGroup
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <RadioButton android:id="@+id/checkbox_any"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/any"/>
+ <RadioButton android:id="@+id/checkbox_unmetered"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/unmetered"/>
+ </RadioGroup>
+
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/timing"/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="15dp"
+ android:textSize="17dp"
+ android:text="@string/delay"/>
+ <EditText
+ android:id="@+id/delay_time"
+ android:layout_width="60dp"
+ android:layout_height="wrap_content"
+ android:inputType="number"/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/deadline"
+ android:textSize="17dp"/>
+ <EditText
+ android:id="@+id/deadline_time"
+ android:layout_width="60dp"
+ android:layout_height="wrap_content"
+ android:inputType="number"/>
+ </LinearLayout>
+
+ </LinearLayout>
+ <Button
+ android:id="@+id/schedule_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="40dp"
+ android:onClick="scheduleJob"
+ android:text="@string/schedule_job_button_text"/>
+ </LinearLayout>
+</LinearLayout>
diff --git a/tests/JobSchedulerTestApp/res/values-v11/styles.xml b/tests/JobSchedulerTestApp/res/values-v11/styles.xml
new file mode 100644
index 000000000000..ff6530178183
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/values-v11/styles.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2013 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>
+
+ <!--
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+ <!-- API 11 theme customizations can go here. -->
+ </style>
+
+</resources> \ No newline at end of file
diff --git a/tests/JobSchedulerTestApp/res/values-v14/styles.xml b/tests/JobSchedulerTestApp/res/values-v14/styles.xml
new file mode 100644
index 000000000000..a4a443afe085
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/values-v14/styles.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2013 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>
+
+ <!--
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- API 14 theme customizations can go here. -->
+ </style>
+
+</resources> \ No newline at end of file
diff --git a/core/res/res/drawable/notification_quantum_bg_dim.xml b/tests/JobSchedulerTestApp/res/values/color.xml
index eb9a4ab45969..7bd3a91b269f 100644
--- a/core/res/res/drawable/notification_quantum_bg_dim.xml
+++ b/tests/JobSchedulerTestApp/res/values/color.xml
@@ -14,16 +14,8 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-
-<ripple
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:tint="#ffffffff"
- android:tintMode="src_over"
- >
- <item>
- <shape>
- <solid android:color="#d4ffffff" />
- <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
- </shape>
- </item>
-</ripple> \ No newline at end of file
+<resources>
+ <color name="none_received">#999999</color>
+ <color name="start_received">#00FF00</color>
+ <color name="stop_received">#FF0000</color>
+</resources> \ No newline at end of file
diff --git a/tests/JobSchedulerTestApp/res/values/strings.xml b/tests/JobSchedulerTestApp/res/values/strings.xml
new file mode 100644
index 000000000000..824d4b198446
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/values/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2013 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>
+ <string name="onstoptask">onStopTask</string>
+ <string name="onstarttask">onStartTask</string>
+ <string name="defaultparamtext">task params will show up here.</string>
+ <string name="schedule_job_button_text">Schedule Job</string>
+ <string name="app_name">Job Scheduler Test</string>
+ <string name="finish_job_button_text">taskFinished</string>
+ <string name="manual_sync_text">Manual Sync</string>
+ <string name="constraints">Constraints</string>
+ <string name="connectivity">Connectivity:</string>
+ <string name="any">Any</string>
+ <string name="unmetered">WiFi</string>
+ <string name="timing">Timing:</string>
+ <string name="delay">Delay:</string>
+ <string name="deadline">Deadline:</string>
+</resources>
diff --git a/tests/JobSchedulerTestApp/res/values/styles.xml b/tests/JobSchedulerTestApp/res/values/styles.xml
new file mode 100644
index 000000000000..43a8f2b0885e
--- /dev/null
+++ b/tests/JobSchedulerTestApp/res/values/styles.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2013 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>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Light">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+</resources> \ No newline at end of file
diff --git a/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java
new file mode 100644
index 000000000000..15050efc5eab
--- /dev/null
+++ b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/MainActivity.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2013 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.demo.jobSchedulerApp;
+
+import android.app.Activity;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Messenger;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.demo.jobSchedulerApp.service.TestJobService;
+
+public class MainActivity extends Activity {
+
+ private static final String TAG = "MainActivity";
+
+ public static final int MSG_UNCOLOUR_START = 0;
+ public static final int MSG_UNCOLOUR_STOP = 1;
+ public static final int MSG_SERVICE_OBJ = 2;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ Resources res = getResources();
+ defaultColor = res.getColor(R.color.none_received);
+ startJobColor = res.getColor(R.color.start_received);
+ stopJobColor = res.getColor(R.color.stop_received);
+
+ // Set up UI.
+ mShowStartView = (TextView) findViewById(R.id.onstart_textview);
+ mShowStopView = (TextView) findViewById(R.id.onstop_textview);
+ mParamsTextView = (TextView) findViewById(R.id.task_params);
+ mDelayEditText = (EditText) findViewById(R.id.delay_time);
+ mDeadlineEditText = (EditText) findViewById(R.id.deadline_time);
+ mWiFiConnectivityRadioButton = (RadioButton) findViewById(R.id.checkbox_unmetered);
+ mAnyConnectivityRadioButton = (RadioButton) findViewById(R.id.checkbox_any);
+
+ mServiceComponent = new ComponentName(this, TestJobService.class);
+ // Start service and provide it a way to communicate with us.
+ Intent startServiceIntent = new Intent(this, TestJobService.class);
+ startServiceIntent.putExtra("messenger", new Messenger(mHandler));
+ startService(startServiceIntent);
+ }
+ // UI fields.
+ int defaultColor;
+ int startJobColor;
+ int stopJobColor;
+
+ TextView mShowStartView;
+ TextView mShowStopView;
+ TextView mParamsTextView;
+ EditText mDelayEditText;
+ EditText mDeadlineEditText;
+ RadioButton mWiFiConnectivityRadioButton;
+ RadioButton mAnyConnectivityRadioButton;
+ ComponentName mServiceComponent;
+ /** Service object to interact scheduled jobs. */
+ TestJobService mTestService;
+
+ private static int kJobId = 0;
+
+ Handler mHandler = new Handler(/* default looper */) {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_UNCOLOUR_START:
+ mShowStartView.setBackgroundColor(defaultColor);
+ break;
+ case MSG_UNCOLOUR_STOP:
+ mShowStopView.setBackgroundColor(defaultColor);
+ break;
+ case MSG_SERVICE_OBJ:
+ mTestService = (TestJobService) msg.obj;
+ mTestService.setUiCallback(MainActivity.this);
+ }
+ }
+ };
+
+ private boolean ensureTestService() {
+ if (mTestService == null) {
+ Toast.makeText(MainActivity.this, "Service null, never got callback?",
+ Toast.LENGTH_SHORT).show();
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * UI onclick listener to schedule a job. What this job is is defined in
+ * TestJobService#scheduleJob()
+ */
+ public void scheduleJob(View v) {
+ if (!ensureTestService()) {
+ return;
+ }
+
+ JobInfo.Builder builder = new JobInfo.Builder(kJobId++, mServiceComponent);
+
+ String delay = mDelayEditText.getText().toString();
+ if (delay != null && !TextUtils.isEmpty(delay)) {
+ builder.setMinimumLatency(Long.valueOf(delay));
+ }
+ String deadline = mDeadlineEditText.getText().toString();
+ if (deadline != null && !TextUtils.isEmpty(deadline)) {
+ builder.setOverrideDeadline(Long.valueOf(deadline));
+ }
+ boolean requiresUnmetered = mWiFiConnectivityRadioButton.isSelected();
+ boolean requiresAnyConnectivity = mAnyConnectivityRadioButton.isSelected();
+ if (requiresUnmetered) {
+ builder.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED);
+ } else if (requiresAnyConnectivity) {
+ builder.setRequiredNetworkCapabilities(JobInfo.NetworkType.ANY);
+ }
+
+ mTestService.scheduleJob(builder.build());
+
+ }
+
+ /**
+ * UI onclick listener to call jobFinished() in our service.
+ */
+ public void finishJob(View v) {
+ if (!ensureTestService()) {
+ return;
+ }
+ mTestService.callJobFinished();
+ mParamsTextView.setText("");
+ }
+
+ public void onReceivedStartJob(JobParameters params) {
+ mShowStartView.setBackgroundColor(startJobColor);
+ Message m = Message.obtain(mHandler, MSG_UNCOLOUR_START);
+ mHandler.sendMessageDelayed(m, 1000L); // uncolour in 1 second.
+ mParamsTextView.setText("Executing: " + params.getJobId() + " " + params.getExtras());
+ }
+
+ public void onReceivedStopJob() {
+ mShowStopView.setBackgroundColor(stopJobColor);
+ Message m = Message.obtain(mHandler, MSG_UNCOLOUR_STOP);
+ mHandler.sendMessageDelayed(m, 2000L); // uncolour in 1 second.
+ mParamsTextView.setText("");
+ }
+}
diff --git a/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/service/TestJobService.java b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/service/TestJobService.java
new file mode 100644
index 000000000000..bf8e8870cf2a
--- /dev/null
+++ b/tests/JobSchedulerTestApp/src/com/android/demo/jobSchedulerApp/service/TestJobService.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.demo.jobSchedulerApp.service;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.app.job.JobParameters;
+import android.app.job.JobService;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.demo.jobSchedulerApp.MainActivity;
+
+import java.util.LinkedList;
+
+
+/**
+ * Service to handle sync requests.
+ * <p>
+ * This service is invoked in response to Intents with action android.content.SyncAdapter, and
+ * returns a Binder connection to SyncAdapter.
+ * <p>
+ * For performance, only one sync adapter will be initialized within this application's context.
+ * <p>
+ * Note: The SyncService itself is not notified when a new sync occurs. It's role is to manage the
+ * lifecycle of our and provide a handle to said SyncAdapter to the OS on
+ * request.
+ */
+public class TestJobService extends JobService {
+ private static final String TAG = "SyncService";
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ Log.i(TAG, "Service created");
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ Log.i(TAG, "Service destroyed");
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Messenger callback = intent.getParcelableExtra("messenger");
+ Message m = Message.obtain();
+ m.what = MainActivity.MSG_SERVICE_OBJ;
+ m.obj = this;
+ try {
+ callback.send(m);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error passing service object back to activity.");
+ }
+ return START_NOT_STICKY;
+ }
+
+ @Override
+ public boolean onStartJob(JobParameters params) {
+ jobParamsMap.add(params);
+ if (mActivity != null) {
+ mActivity.onReceivedStartJob(params);
+ }
+ Log.i(TAG, "on start job: " + params.getJobId());
+ return true;
+ }
+
+ @Override
+ public boolean onStopJob(JobParameters params) {
+ jobParamsMap.remove(params);
+ mActivity.onReceivedStopJob();
+ Log.i(TAG, "on stop job: " + params.getJobId());
+ return true;
+ }
+
+ MainActivity mActivity;
+ private final LinkedList<JobParameters> jobParamsMap = new LinkedList<JobParameters>();
+
+ public void setUiCallback(MainActivity activity) {
+ mActivity = activity;
+ }
+
+ /** Send job to the JobScheduler. */
+ public void scheduleJob(JobInfo t) {
+ Log.d(TAG, "Scheduling job");
+ JobScheduler tm =
+ (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
+ tm.schedule(t);
+ }
+
+ public boolean callJobFinished() {
+ JobParameters params = jobParamsMap.poll();
+ if (params == null) {
+ return false;
+ } else {
+ jobFinished(params, false);
+ return true;
+ }
+ }
+
+}
diff --git a/tests/VoiceInteraction/AndroidManifest.xml b/tests/VoiceInteraction/AndroidManifest.xml
index e1a585447993..33f000d725a8 100644
--- a/tests/VoiceInteraction/AndroidManifest.xml
+++ b/tests/VoiceInteraction/AndroidManifest.xml
@@ -3,7 +3,7 @@
<application>
<activity android:name="VoiceInteractionMain" android:label="Voice Interaction"
- android:theme="@android:style/Theme.Quantum">
+ android:theme="@android:style/Theme.Material">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
@@ -24,7 +24,7 @@
android:process=":session">
</service>
<activity android:name="TestInteractionActivity" android:label="Voice Interaction Target"
- android:theme="@android:style/Theme.Quantum.Light.Voice">
+ android:theme="@android:style/Theme.Material.Light.Voice">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp
index 12d53898a2d0..2028ff4ebc12 100644
--- a/tools/aapt/AaptAssets.cpp
+++ b/tools/aapt/AaptAssets.cpp
@@ -1457,9 +1457,9 @@ status_t AaptAssets::filter(Bundle* bundle)
if (AaptConfig::isSameExcept(config, mconfig, ResTable_config::CONFIG_DENSITY)) {
// See if there is a better density resource
if (mconfig.density < bestDensity &&
- mconfig.density > preferredDensity &&
+ mconfig.density >= preferredDensity &&
bestDensity > preferredDensity) {
- // This density is between our best density and
+ // This density is our preferred density, or between our best density and
// the preferred density, therefore it is better.
bestDensity = mconfig.density;
} else if (mconfig.density > bestDensity &&
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index e599643bfdb4..f10904c871f4 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -166,6 +166,35 @@ private:
ResTable_config mParams;
};
+class AnnotationProcessor {
+public:
+ AnnotationProcessor() : mDeprecated(false), mSystemApi(false) { }
+
+ void preprocessComment(String8& comment) {
+ if (comment.size() > 0) {
+ if (comment.contains("@deprecated")) {
+ mDeprecated = true;
+ }
+ if (comment.removeAll("@SystemApi")) {
+ mSystemApi = true;
+ }
+ }
+ }
+
+ void printAnnotations(FILE* fp, const char* indentStr) {
+ if (mDeprecated) {
+ fprintf(fp, "%s@Deprecated\n", indentStr);
+ }
+ if (mSystemApi) {
+ fprintf(fp, "%s@android.annotation.SystemApi\n", indentStr);
+ }
+ }
+
+private:
+ bool mDeprecated;
+ bool mSystemApi;
+};
+
// ==========================================================================
// ==========================================================================
// ==========================================================================
@@ -1742,16 +1771,13 @@ static status_t writeLayoutClasses(
NA = idents.size();
- bool deprecated = false;
-
String16 comment = symbols->getComment(realClassName);
+ AnnotationProcessor ann;
fprintf(fp, "%s/** ", indentStr);
if (comment.size() > 0) {
String8 cmt(comment);
+ ann.preprocessComment(cmt);
fprintf(fp, "%s\n", cmt.string());
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
} else {
fprintf(fp, "Attributes that can be used with a %s.\n", nclassName.string());
}
@@ -1823,9 +1849,7 @@ static status_t writeLayoutClasses(
}
fprintf(fp, "%s */\n", getIndentSpace(indent));
- if (deprecated) {
- fprintf(fp, "%s@Deprecated\n", indentStr);
- }
+ ann.printAnnotations(fp, indentStr);
fprintf(fp,
"%spublic static final int[] %s = {\n"
@@ -1871,17 +1895,14 @@ static status_t writeLayoutClasses(
//printf("%s:%s/%s: 0x%08x\n", String8(package16).string(),
// String8(attr16).string(), String8(name16).string(), typeSpecFlags);
const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0;
-
- bool deprecated = false;
-
+
+ AnnotationProcessor ann;
fprintf(fp, "%s/**\n", indentStr);
if (comment.size() > 0) {
String8 cmt(comment);
+ ann.preprocessComment(cmt);
fprintf(fp, "%s <p>\n%s @attr description\n", indentStr, indentStr);
fprintf(fp, "%s %s\n", indentStr, cmt.string());
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
} else {
fprintf(fp,
"%s <p>This symbol is the offset where the {@link %s.R.attr#%s}\n"
@@ -1893,10 +1914,8 @@ static status_t writeLayoutClasses(
}
if (typeComment.size() > 0) {
String8 cmt(typeComment);
+ ann.preprocessComment(cmt);
fprintf(fp, "\n\n%s %s\n", indentStr, cmt.string());
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
}
if (comment.size() > 0) {
if (pub) {
@@ -1915,9 +1934,7 @@ static status_t writeLayoutClasses(
getSymbolPackage(name8, assets, pub).string(),
getSymbolName(name8).string());
fprintf(fp, "%s*/\n", indentStr);
- if (deprecated) {
- fprintf(fp, "%s@Deprecated\n", indentStr);
- }
+ ann.printAnnotations(fp, indentStr);
fprintf(fp,
"%spublic static final int %s_%s = %d;\n",
indentStr, nclassName.string(),
@@ -2056,16 +2073,14 @@ static status_t writeSymbolClass(
String8 name8(sym.name);
String16 comment(sym.comment);
bool haveComment = false;
- bool deprecated = false;
+ AnnotationProcessor ann;
if (comment.size() > 0) {
haveComment = true;
String8 cmt(comment);
+ ann.preprocessComment(cmt);
fprintf(fp,
"%s/** %s\n",
getIndentSpace(indent), cmt.string());
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
} else if (sym.isPublic && !includePrivate) {
sym.sourcePos.warning("No comment for public symbol %s:%s/%s",
assets->getPackage().string(), className.string(),
@@ -2074,6 +2089,7 @@ static status_t writeSymbolClass(
String16 typeComment(sym.typeComment);
if (typeComment.size() > 0) {
String8 cmt(typeComment);
+ ann.preprocessComment(cmt);
if (!haveComment) {
haveComment = true;
fprintf(fp,
@@ -2082,16 +2098,11 @@ static status_t writeSymbolClass(
fprintf(fp,
"%s %s\n", getIndentSpace(indent), cmt.string());
}
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
}
if (haveComment) {
fprintf(fp,"%s */\n", getIndentSpace(indent));
}
- if (deprecated) {
- fprintf(fp, "%s@Deprecated\n", getIndentSpace(indent));
- }
+ ann.printAnnotations(fp, getIndentSpace(indent));
fprintf(fp, id_format,
getIndentSpace(indent),
flattenSymbol(name8).string(), (int)sym.int32Val);
@@ -2107,25 +2118,21 @@ static status_t writeSymbolClass(
}
String8 name8(sym.name);
String16 comment(sym.comment);
- bool deprecated = false;
+ AnnotationProcessor ann;
if (comment.size() > 0) {
String8 cmt(comment);
+ ann.preprocessComment(cmt);
fprintf(fp,
"%s/** %s\n"
"%s */\n",
getIndentSpace(indent), cmt.string(),
getIndentSpace(indent));
- if (strstr(cmt.string(), "@deprecated") != NULL) {
- deprecated = true;
- }
} else if (sym.isPublic && !includePrivate) {
sym.sourcePos.warning("No comment for public symbol %s:%s/%s",
assets->getPackage().string(), className.string(),
String8(sym.name).string());
}
- if (deprecated) {
- fprintf(fp, "%s@Deprecated\n", getIndentSpace(indent));
- }
+ ann.printAnnotations(fp, getIndentSpace(indent));
fprintf(fp, "%spublic static final String %s=\"%s\";\n",
getIndentSpace(indent),
flattenSymbol(name8).string(), sym.stringVal.string());
diff --git a/tools/layoutlib/Android.mk b/tools/layoutlib/Android.mk
index cb68340b3f5e..08486e643431 100644
--- a/tools/layoutlib/Android.mk
+++ b/tools/layoutlib/Android.mk
@@ -16,6 +16,8 @@
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
+LOCAL_JAVACFLAGS := -source 6 -target 6
+
#
# Define rules to build temp_layoutlib.jar, which contains a subset of
# the classes in framework.jar. The layoutlib_create tool is used to
diff --git a/tools/layoutlib/bridge/Android.mk b/tools/layoutlib/bridge/Android.mk
index e3d48fca5eb2..cfd597e4011d 100644
--- a/tools/layoutlib/bridge/Android.mk
+++ b/tools/layoutlib/bridge/Android.mk
@@ -18,6 +18,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_JAVA_RESOURCE_DIRS := resources
+LOCAL_JAVACFLAGS := -source 6 -target 6
LOCAL_JAVA_LIBRARIES := \
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index e9daffd8b024..a4174790b17b 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -977,7 +977,7 @@ public final class Canvas_Delegate {
/*package*/ static void native_drawText(long nativeCanvas,
final char[] text, final int index, final int count,
final float startX, final float startY, final int flags, long paint,
- long typeface) {
+ final long typeface) {
draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/,
new GcSnapshot.Drawable() {
@@ -985,6 +985,11 @@ public final class Canvas_Delegate {
public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) {
// WARNING: the logic in this method is similar to Paint_Delegate.measureText.
// Any change to this method should be reflected in Paint.measureText
+
+ // assert that the typeface passed is actually the one stored in paint.
+ assert (typeface == paintDelegate.mNativeTypeface);
+
+
// Paint.TextAlign indicates how the text is positioned relative to X.
// LEFT is the default and there's nothing to do.
float x = startX;
diff --git a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
index 9ea45386055f..d73adab65da1 100644
--- a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
@@ -21,6 +21,8 @@ import com.android.layoutlib.bridge.Bridge;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+import android.content.res.AssetManager;
+
import java.awt.Font;
import java.io.File;
import java.util.ArrayList;
@@ -47,7 +49,6 @@ public class FontFamily_Delegate {
private static final String FONT_SUFFIX_BOLDITALIC = "BoldItalic.ttf";
private static final String FONT_SUFFIX_BOLD = "Bold.ttf";
private static final String FONT_SUFFIX_ITALIC = "Italic.ttf";
- private static final String FONT_SUBSTRING_COMPACT = "UI";
/**
* A class associating {@link Font} with its metadata.
@@ -56,11 +57,6 @@ public class FontFamily_Delegate {
Font mFont;
/** Regular, Bold, Italic, or BoldItalic. */
int mStyle;
- /**
- * The variant of the Font - compact or elegant.
- * @see Paint#setElegantTextHeight(boolean)
- */
- boolean mIsCompact;
}
// ---- delegate manager ----
@@ -75,6 +71,14 @@ public class FontFamily_Delegate {
// ---- delegate data ----
private List<FontInfo> mFonts = new ArrayList<FontInfo>();
+ /**
+ * The variant of the Font Family - compact or elegant.
+ * 0 is unspecified, 1 is compact and 2 is elegant. This needs to be kept in sync with values in
+ * android.graphics.FontFamily
+ *
+ * @see Paint#setElegantTextHeight(boolean)
+ */
+ private FontVariant mVariant;
// Path of fonts that haven't been created since sFontLoader hasn't been initialized.
private List<String> mPath = new ArrayList<String>();
@@ -93,37 +97,22 @@ public class FontFamily_Delegate {
sPostInitDelegate.clear();
}
- public Font getFont(int style, boolean isCompact) {
+ public Font getFont(int style) {
FontInfo plainFont = null;
- FontInfo styledFont = null; // Font matching the style but not isCompact
for (FontInfo font : mFonts) {
if (font.mStyle == style) {
- if (font.mIsCompact == isCompact) {
- return font.mFont;
- }
- styledFont = font;
+ return font.mFont;
}
- if (font.mStyle == Font.PLAIN) {
- if (plainFont == null) {
- plainFont = font;
- continue;
- }
- if (font.mIsCompact == isCompact) {
- // Override the previous selection of plain font since we've found a better one.
- plainFont = font;
- }
+ if (font.mStyle == Font.PLAIN && plainFont == null) {
+ plainFont = font;
}
}
- if (styledFont != null) {
- return styledFont.mFont;
- }
// No font with the mentioned style is found. Try to derive one.
if (plainFont != null && style > 0 && style < 4) {
- styledFont = new FontInfo();
+ FontInfo styledFont = new FontInfo();
styledFont.mFont = plainFont.mFont.deriveFont(style);
styledFont.mStyle = style;
- styledFont.mIsCompact = plainFont.mIsCompact;
// Add the font to the list of fonts so that we don't have to derive it the next time.
mFonts.add(styledFont);
return styledFont.mFont;
@@ -131,11 +120,20 @@ public class FontFamily_Delegate {
return null;
}
+ public FontVariant getVariant() {
+ return mVariant;
+ }
+
+
// ---- native methods ----
@LayoutlibDelegate
- /*package*/ static long nCreateFamily() {
+ /*package*/ static long nCreateFamily(String lang, int variant) {
+ // TODO: support lang. This is required for japanese locale.
FontFamily_Delegate delegate = new FontFamily_Delegate();
+ // variant can be 0, 1 or 2.
+ assert variant < 3;
+ delegate.mVariant = FontVariant.values()[variant];
if (sFontLocation != null) {
delegate.init();
} else {
@@ -164,6 +162,13 @@ public class FontFamily_Delegate {
return false;
}
+ @LayoutlibDelegate
+ /*package*/ static boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr, String path) {
+ Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
+ "FontFamily.addFontFromAsset is not supported.", null /*throwable*/, null /*data*/);
+ return false;
+ }
+
private void init() {
for (String path : mPath) {
addFont(path);
@@ -195,13 +200,6 @@ public class FontFamily_Delegate {
style = Font.ITALIC;
}
fontInfo.mStyle = style;
-
- // Names of compact fonts end with UI-<style>.ttf. For example, NotoNakshUI-Regular.ttf.
- // This should go away when this info is passed on by nAddFont().
- int hyphenIndex = fontName.lastIndexOf('-');
- fontInfo.mIsCompact = hyphenIndex > 0 &&
- fontName.substring(0, hyphenIndex).endsWith(FONT_SUBSTRING_COMPACT);
-
}
private static Font loadFont(String path) {
@@ -214,7 +212,7 @@ public class FontFamily_Delegate {
} catch (Exception e) {
Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN,
String.format("Unable to load font %1$s", relativePath),
- null /*throwable*/, null /*data*/);
+ e /*throwable*/, null /*data*/);
}
} else {
Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
@@ -224,4 +222,12 @@ public class FontFamily_Delegate {
return null;
}
+
+
+ // ---- Public helper class ----
+
+ public enum FontVariant {
+ // The order needs to be kept in sync with android.graphics.FontFamily.
+ NONE, COMPACT, ELEGANT
+ }
}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 911f4e7af94a..6ee307eeb92a 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -21,6 +21,7 @@ import com.android.layoutlib.bridge.Bridge;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+import android.graphics.FontFamily_Delegate.FontVariant;
import android.graphics.Paint.FontMetrics;
import android.graphics.Paint.FontMetricsInt;
import android.text.TextUtils;
@@ -30,7 +31,6 @@ import java.awt.Font;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.Toolkit;
-import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.util.Collections;
@@ -81,7 +81,8 @@ public class Paint_Delegate {
private float mTextScaleX;
private float mTextSkewX;
private int mHintingMode = Paint.HINTING_ON;
- private boolean mIsCompact = true;
+ // Variant of the font.
+ private FontVariant mFontVariant = FontVariant.NONE;
private Xfermode_Delegate mXfermode;
private ColorFilter_Delegate mColorFilter;
@@ -92,6 +93,8 @@ public class Paint_Delegate {
private Locale mLocale = Locale.getDefault();
+ // Used only to assert invariants.
+ public long mNativeTypeface;
// ---- Public Helper methods ----
@@ -437,7 +440,7 @@ public class Paint_Delegate {
/*package*/ static boolean isElegantTextHeight(Paint thisPaint) {
// get the delegate from the native int.
Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint);
- return delegate != null && !delegate.mIsCompact;
+ return delegate != null && delegate.mFontVariant == FontVariant.ELEGANT;
}
@LayoutlibDelegate
@@ -448,7 +451,7 @@ public class Paint_Delegate {
return;
}
- delegate.mIsCompact = !elegant;
+ delegate.mFontVariant = elegant ? FontVariant.ELEGANT : FontVariant.COMPACT;
}
@LayoutlibDelegate
@@ -887,6 +890,7 @@ public class Paint_Delegate {
}
delegate.mTypeface = Typeface_Delegate.getDelegate(typeface);
+ delegate.mNativeTypeface = typeface;
delegate.updateFontObject();
return typeface;
}
@@ -965,15 +969,10 @@ public class Paint_Delegate {
}
@LayoutlibDelegate
- /*package*/ static float native_getTextRunAdvances(long native_object,
- long native_typeface /*ignored*/,
+ /*package*/ static float native_getTextRunAdvances(long native_object, long native_typeface,
char[] text, int index, int count, int contextIndex, int contextCount,
int flags, float[] advances, int advancesIndex) {
- // native_typeface is passed here since Framework's old implementation did not have the
- // typeface object associated with the Paint. Since, we follow the new framework way,
- // we store the typeface with the paint and use it directly.
-
if (advances != null)
for (int i = advancesIndex; i< advancesIndex+count; i++)
advances[i]=0;
@@ -982,6 +981,12 @@ public class Paint_Delegate {
if (delegate == null) {
return 0.f;
}
+
+ // native_typeface is passed here since Framework's old implementation did not have the
+ // typeface object associated with the Paint. Since, we follow the new framework way,
+ // we store the typeface with the paint and use it directly.
+ assert (native_typeface == delegate.mNativeTypeface);
+
boolean isRtl = isRtl(flags);
int limit = index + count;
@@ -1022,37 +1027,41 @@ public class Paint_Delegate {
}
@LayoutlibDelegate
- /*package*/ static void native_getTextPath(long native_object, int bidiFlags,
- char[] text, int index, int count, float x, float y, long path) {
+ /*package*/ static void native_getTextPath(long native_object, long native_typeface,
+ int bidiFlags, char[] text, int index, int count, float x, float y, long path) {
// FIXME
Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
"Paint.getTextPath is not supported.", null, null /*data*/);
}
@LayoutlibDelegate
- /*package*/ static void native_getTextPath(long native_object, int bidiFlags,
- String text, int start, int end, float x, float y, long path) {
+ /*package*/ static void native_getTextPath(long native_object, long native_typeface,
+ int bidiFlags, String text, int start, int end, float x, float y, long path) {
// FIXME
Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
"Paint.getTextPath is not supported.", null, null /*data*/);
}
@LayoutlibDelegate
- /*package*/ static void nativeGetStringBounds(long nativePaint, String text, int start,
- int end, int bidiFlags, Rect bounds) {
- nativeGetCharArrayBounds(nativePaint, text.toCharArray(), start, end - start, bidiFlags,
- bounds);
+ /*package*/ static void nativeGetStringBounds(long nativePaint, long native_typeface,
+ String text, int start, int end, int bidiFlags, Rect bounds) {
+ nativeGetCharArrayBounds(nativePaint, native_typeface, text.toCharArray(), start,
+ end - start, bidiFlags, bounds);
}
@LayoutlibDelegate
- /*package*/ static void nativeGetCharArrayBounds(long nativePaint, char[] text, int index,
- int count, int bidiFlags, Rect bounds) {
+ /*package*/ static void nativeGetCharArrayBounds(long nativePaint, long native_typeface,
+ char[] text, int index, int count, int bidiFlags, Rect bounds) {
// get the delegate from the native int.
Paint_Delegate delegate = sManager.getDelegate(nativePaint);
if (delegate == null) {
return;
}
+
+ // assert that the typeface passed is actually the one that we had stored.
+ assert (native_typeface == delegate.mNativeTypeface);
+
delegate.measureText(text, index, count, isRtl(bidiFlags)).roundOut(bounds);
}
@@ -1079,6 +1088,7 @@ public class Paint_Delegate {
mJoin = paint.mJoin;
mTextAlign = paint.mTextAlign;
mTypeface = paint.mTypeface;
+ mNativeTypeface = paint.mNativeTypeface;
mStrokeWidth = paint.mStrokeWidth;
mStrokeMiter = paint.mStrokeMiter;
mTextSize = paint.mTextSize;
@@ -1102,6 +1112,7 @@ public class Paint_Delegate {
mJoin = Paint.Join.MITER.nativeInt;
mTextAlign = 0;
mTypeface = Typeface_Delegate.getDelegate(Typeface.sDefaults[0].native_instance);
+ mNativeTypeface = 0;
mStrokeWidth = 1.f;
mStrokeMiter = 4.f;
mTextSize = 20.f;
@@ -1124,7 +1135,7 @@ public class Paint_Delegate {
private void updateFontObject() {
if (mTypeface != null) {
// Get the fonts from the TypeFace object.
- List<Font> fonts = mTypeface.getFonts(mIsCompact);
+ List<Font> fonts = mTypeface.getFonts(mFontVariant);
// create new font objects as well as FontMetrics, based on the current text size
// and skew info.
diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
index 9746b48faf05..908bb642bc8d 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
@@ -22,6 +22,7 @@ import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
import android.content.res.AssetManager;
+import android.graphics.FontFamily_Delegate.FontVariant;
import java.awt.Font;
import java.io.File;
@@ -69,17 +70,28 @@ public final class Typeface_Delegate {
return sManager.getDelegate(nativeTypeface);
}
- public List<Font> getFonts(boolean compact) {
+ public List<Font> getFonts(FontVariant variant) {
List<Font> fonts = new ArrayList<Font>(mFontFamilies.length);
+ // If we are unable to find fonts matching the variant, we return the fonts from the
+ // other variant since we always want to draw something, rather than nothing.
+ // TODO: check this behaviour with platform.
+ List<Font> otherVariantFonts = new ArrayList<Font>();
for (FontFamily_Delegate ffd : mFontFamilies) {
if (ffd != null) {
- Font font = ffd.getFont(mStyle, compact);
+ Font font = ffd.getFont(mStyle);
if (font != null) {
- fonts.add(font);
+ if (ffd.getVariant() == variant || ffd.getVariant() == FontVariant.NONE) {
+ fonts.add(font);
+ } else {
+ otherVariantFonts.add(font);
+ }
}
}
}
- return fonts;
+ if (fonts.size() > 0) {
+ return fonts;
+ }
+ return otherVariantFonts;
}
// ---- native methods ----
diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
index af22f44ea25b..36102f1123e0 100644
--- a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
@@ -151,7 +151,7 @@ public final class BridgeInflater extends LayoutInflater {
@Override
public View inflate(int resource, ViewGroup root) {
Context context = getContext();
- if (context instanceof ContextThemeWrapper) {
+ while (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
}
if (context instanceof BridgeContext) {
@@ -217,7 +217,7 @@ public final class BridgeInflater extends LayoutInflater {
private void setupViewInContext(View view, AttributeSet attrs) {
Context context = getContext();
- if (context instanceof ContextThemeWrapper) {
+ while (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
}
if (context instanceof BridgeContext) {
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index cfe8e1580851..2f40003cc784 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -195,8 +195,8 @@ public class IWindowManagerImpl implements IWindowManager {
}
@Override
- public IWindowSession openSession(IInputMethodClient arg0, IInputContext arg1)
- throws RemoteException {
+ public IWindowSession openSession(IWindowSessionCallback argn1, IInputMethodClient arg0,
+ IInputContext arg1) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
@@ -276,6 +276,11 @@ public class IWindowManagerImpl implements IWindowManager {
}
@Override
+ public float getCurrentAnimatorScale() throws RemoteException {
+ return 0;
+ }
+
+ @Override
public void setAppGroupId(IBinder arg0, int arg1) throws RemoteException {
// TODO Auto-generated method stub
diff --git a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
index 0dddf3d0970a..dafc96b1e534 100644
--- a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
@@ -48,7 +48,7 @@ public class MenuInflater_Delegate {
AttributeSet attrs) {
if (menuItem instanceof BridgeMenuItemImpl) {
Context context = thisInflater.getContext();
- if (context instanceof ContextThemeWrapper) {
+ while (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
}
if (context instanceof BridgeContext) {
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
index cdb839adb451..8d1d0c16cb9a 100644
--- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
@@ -42,7 +42,7 @@ public class BridgeMenuItemImpl extends MenuItemImpl {
CharSequence title, int showAsAction) {
super(menu, group, id, categoryOrder, ordering, title, showAsAction);
Context context = menu.getContext();
- if (context instanceof ContextThemeWrapper) {
+ while (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
}
if (context instanceof BridgeContext) {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
index ffab4ded0db1..cc69af278d5d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -214,7 +214,8 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
Capability.EXTENDED_VIEWINFO,
Capability.FIXED_SCALABLE_NINE_PATCH,
Capability.RTL,
- Capability.ACTION_BAR);
+ Capability.ACTION_BAR,
+ Capability.SIMULATE_PLATFORM);
BridgeAssetManager.initSystem();
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 00c0f938ae8f..17d990bfe840 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -33,6 +33,11 @@ public class BridgePowerManager implements IPowerManager {
}
@Override
+ public boolean isPowerSaveMode() throws RemoteException {
+ return false;
+ }
+
+ @Override
public IBinder asBinder() {
// pass for now.
return null;
diff --git a/tools/layoutlib/create/README.txt b/tools/layoutlib/create/README.txt
index 6e0a3002c7c4..32625ae86b58 100644
--- a/tools/layoutlib/create/README.txt
+++ b/tools/layoutlib/create/README.txt
@@ -119,8 +119,8 @@ name.
The class is then fed to RefactorClassAdapter which is like RenameClassAdapter but updates the
references in all classes. This is used to update the references of classes in the java package that
-were added in the Dalvik VM but are not a part of the standard JVM. The existing classes are
-modified to update all references to these non-standard classes. An alternate implementation of
+were added in the Dalvik VM but are not a part of the Desktop VM. The existing classes are
+modified to update all references to these non-desktop classes. An alternate implementation of
these (com.android.tools.layoutlib.java.*) is injected.
RenameClassAdapter and RefactorClassAdapter both inherit from AbstractClassAdapter which changes the
@@ -130,11 +130,15 @@ the StackMapTable correctly and Java 7 VM enforces that classes with version gre
valid StackMapTable. As a side benefit of this, we can continue to support Java 6 because Java 7 on
Mac has horrible font rendering support.
+ReplaceMethodCallsAdapter replaces calls to certain methods. Currently, it only rewrites calls to
+java.lang.System.arraycopy([CI[CII)V, which is not part of the Desktop VM to call the more general
+method java.lang.System.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V.
+
The ClassAdapters are chained together to achieve the desired output. (Look at section 2.2.7
Transformation chains in the asm user guide, link in the References.) The order of execution of
these is:
ClassReader -> [DelegateClassAdapter] -> TransformClassAdapter -> [RenameClassAdapter] ->
-RefactorClassAdapter -> ClassWriter
+RefactorClassAdapter -> [ReplaceMethodCallsAdapter] -> ClassWriter
- Method stubs
--------------
@@ -169,7 +173,7 @@ This is the easiest: we currently inject the following classes:
- AutoCloseable and Objects are part of Java 7. To enable us to still run on Java 6, new classes are
injected. The implementation for these classes has been taken from Android's libcore
(platform/libcore/luni/src/main/java/java/...).
-- Charsets, IntegralToString and UnsafeByteSequence are not part of the standard JAVA VM. They are
+- Charsets, IntegralToString and UnsafeByteSequence are not part of the Desktop VM. They are
added to the Dalvik VM for performance reasons. An implementation that is very close to the
original (which is at platform/libcore/luni/src/main/java/...) is injected. Since these classees
were in part of the java package, where we can't inject classes, all references to these have been
@@ -209,7 +213,7 @@ This won't rename/replace the inner static methods of a given class.
This is very similar to the Renaming classes except that it also updates the reference in all
classes. This is done for classes which are added to the Dalvik VM for performance reasons but are
-not present in the Standard Java VM. An implementation for these classes is also injected.
+not present in the Desktop VM. An implementation for these classes is also injected.
5- Method erasure based on return type
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java
index 3e75c9ebc477..8373e300f9b5 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java
@@ -32,6 +32,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -63,7 +64,8 @@ public class AsmAnalyzer {
private final Set<String> mExcludedClasses;
/** Glob patterns of files to keep as is. */
private final String[] mIncludeFileGlobs;
- /** Copy these files into the output as is. */
+ /** Internal names of classes that contain method calls that need to be rewritten. */
+ private final Set<String> mReplaceMethodCallClasses = new HashSet<String>();
/**
* Creates a new analyzer.
@@ -109,6 +111,7 @@ public class AsmAnalyzer {
mGen.setKeep(found);
mGen.setDeps(deps);
mGen.setCopyFiles(filesFound);
+ mGen.setRewriteMethodCallClasses(mReplaceMethodCallClasses);
}
}
@@ -118,7 +121,7 @@ public class AsmAnalyzer {
*
* @param classes The map of class name => ASM ClassReader. Class names are
* in the form "android.view.View".
- * @param fileFound The map of file name => InputStream. The file name is
+ * @param filesFound The map of file name => InputStream. The file name is
* in the form "android/data/dataFile".
*/
void parseZip(List<String> jarPathList, Map<String, ClassReader> classes,
@@ -143,8 +146,8 @@ public class AsmAnalyzer {
String className = classReaderToClassName(cr);
classes.put(className, cr);
} else {
- for (int i = 0; i < includeFilePatterns.length; ++i) {
- if (includeFilePatterns[i].matcher(entry.getName()).matches()) {
+ for (Pattern includeFilePattern : includeFilePatterns) {
+ if (includeFilePattern.matcher(entry.getName()).matches()) {
filesFound.put(entry.getName(), zip.getInputStream(entry));
break;
}
@@ -321,6 +324,7 @@ public class AsmAnalyzer {
deps, new_deps);
for (ClassReader cr : inOutKeepClasses.values()) {
+ visitor.setClassName(cr.getClassName());
cr.accept(visitor, 0 /* flags */);
}
@@ -367,6 +371,8 @@ public class AsmAnalyzer {
/** New classes to keep as-is found by this visitor. */
private final Map<String, ClassReader> mOutKeep;
+ private String mClassName;
+
/**
* Creates a new visitor that will find all the dependencies for the visited class.
* Types which are already in the zipClasses, keepClasses or inDeps are not marked.
@@ -390,6 +396,10 @@ public class AsmAnalyzer {
mOutDeps = outDeps;
}
+ private void setClassName(String className) {
+ mClassName = className;
+ }
+
/**
* Considers the given class name as a dependency.
* If it does, add to the mOutDeps map.
@@ -429,7 +439,7 @@ public class AsmAnalyzer {
// - android classes are added to dependencies
// - non-android classes are added to the list of classes to keep as-is (they don't need
// to be stubbed).
- if (className.indexOf("android") >= 0) { // TODO make configurable
+ if (className.contains("android")) { // TODO make configurable
mOutDeps.put(className, cr);
} else {
mOutKeep.put(className, cr);
@@ -594,7 +604,7 @@ public class AsmAnalyzer {
// type and exceptions do not use generic types.
considerSignature(signature);
- return new MyMethodVisitor();
+ return new MyMethodVisitor(mClassName);
}
@Override
@@ -614,8 +624,11 @@ public class AsmAnalyzer {
private class MyMethodVisitor extends MethodVisitor {
- public MyMethodVisitor() {
+ private String mOwnerClass;
+
+ public MyMethodVisitor(String ownerClass) {
super(Opcodes.ASM4);
+ mOwnerClass = ownerClass;
}
@@ -709,6 +722,13 @@ public class AsmAnalyzer {
considerName(owner);
// desc is the method's descriptor (see Type).
considerDesc(desc);
+
+
+ // Check if method is java.lang.System.arrayCopy([CI[CII)V
+ if (owner.equals("java/lang/System") && name.equals("arraycopy")
+ && desc.equals("([CI[CII)V")) {
+ mReplaceMethodCallClasses.add(mOwnerClass);
+ }
}
// instruction multianewarray, whatever that is
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
index 207d8ae7b2d9..c96a1434b145 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
@@ -21,7 +21,6 @@ import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -55,6 +54,8 @@ public class AsmGenerator {
private Map<String, ClassReader> mDeps;
/** All files that are to be copied as-is. */
private Map<String, InputStream> mCopyFiles;
+ /** All classes where certain method calls need to be rewritten. */
+ private Set<String> mReplaceMethodCallsClasses;
/** Counter of number of classes renamed during transform. */
private int mRenameCount;
/** FQCN Names of the classes to rename: map old-FQCN => new-FQCN */
@@ -133,7 +134,7 @@ public class AsmGenerator {
assert i + 1 < n;
String oldFqcn = binaryToInternalClassName(refactorClasses[i]);
String newFqcn = binaryToInternalClassName(refactorClasses[i + 1]);
- mRefactorClasses.put(oldFqcn, newFqcn);;
+ mRefactorClasses.put(oldFqcn, newFqcn);
}
// create the map of renamed class -> return type of method to delete.
@@ -203,23 +204,12 @@ public class AsmGenerator {
mCopyFiles = copyFiles;
}
- /** Gets the map of classes to output as-is, except if they have native methods */
- public Map<String, ClassReader> getKeep() {
- return mKeep;
- }
-
- /** Gets the map of dependencies that must be completely stubbed */
- public Map<String, ClassReader> getDeps() {
- return mDeps;
- }
-
- /** Gets the map of files to output as-is. */
- public Map<String, InputStream> getCopyFiles() {
- return mCopyFiles;
+ public void setRewriteMethodCallClasses(Set<String> rewriteMethodCallClasses) {
+ mReplaceMethodCallsClasses = rewriteMethodCallClasses;
}
/** Generates the final JAR */
- public void generate() throws FileNotFoundException, IOException {
+ public void generate() throws IOException {
TreeMap<String, byte[]> all = new TreeMap<String, byte[]>();
for (Class<?> clazz : mInjectClasses) {
@@ -329,14 +319,14 @@ public class AsmGenerator {
String newName = transformName(className);
// transformName returns its input argument if there's no need to rename the class
- if (newName != className) {
+ if (!newName.equals(className)) {
mRenameCount++;
// This class is being renamed, so remove it from the list of classes not renamed.
mClassesNotRenamed.remove(className);
}
mLog.debug("Transform %s%s%s%s", className,
- newName == className ? "" : " (renamed to " + newName + ")",
+ newName.equals(className) ? "" : " (renamed to " + newName + ")",
hasNativeMethods ? " -- has natives" : "",
stubNativesOnly ? " -- stub natives only" : "");
@@ -344,8 +334,14 @@ public class AsmGenerator {
// original class reader.
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
- ClassVisitor cv = new RefactorClassAdapter(cw, mRefactorClasses);
- if (newName != className) {
+ ClassVisitor cv = cw;
+
+ if (mReplaceMethodCallsClasses.contains(className)) {
+ cv = new ReplaceMethodCallsAdapter(cv);
+ }
+
+ cv = new RefactorClassAdapter(cv, mRefactorClasses);
+ if (!newName.equals(className)) {
cv = new RenameClassAdapter(cv, className, newName);
}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
index 2e952fcff4c2..ad106569a0a7 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
@@ -193,8 +193,7 @@ public class Main {
private static boolean processArgs(Log log, String[] args,
ArrayList<String> osJarPath, String[] osDestJar) {
boolean needs_dest = true;
- for (int i = 0; i < args.length; i++) {
- String s = args[i];
+ for (String s : args) {
if (s.equals("-v")) {
log.setVerbose(true);
} else if (s.equals("-p")) {
@@ -212,7 +211,7 @@ public class Main {
osJarPath.add(s);
}
} else {
- log.error("Unknow argument: %s", s);
+ log.error("Unknown argument: %s", s);
return false;
}
}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ReplaceMethodCallsAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ReplaceMethodCallsAdapter.java
new file mode 100644
index 000000000000..e57eba107999
--- /dev/null
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ReplaceMethodCallsAdapter.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2014 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.tools.layoutlib.create;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+/**
+ * Replaces calls to certain methods that do not exist in the Desktop VM.
+ */
+public class ReplaceMethodCallsAdapter extends ClassVisitor {
+ public ReplaceMethodCallsAdapter(ClassVisitor cv) {
+ super(Opcodes.ASM4, cv);
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature,
+ String[] exceptions) {
+ return new MyMethodVisitor(super.visitMethod(access, name, desc, signature, exceptions));
+ }
+
+ private class MyMethodVisitor extends MethodVisitor {
+
+ public MyMethodVisitor(MethodVisitor mv) {
+ super(Opcodes.ASM4, mv);
+ }
+
+ @Override
+ public void visitMethodInsn(int opcode, String owner, String name, String desc) {
+ // Check if method is java.lang.System.arrayCopy([CI[CII)V
+ if (owner.equals("java/lang/System") && name.equals("arraycopy")
+ && desc.equals("([CI[CII)V")) {
+ desc = "(Ljava/lang/Object;ILjava/lang/Object;II)V";
+ }
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+ }
+}
diff --git a/tools/layoutlib/rename_font/build_font.py b/tools/layoutlib/rename_font/build_font.py
index aea32418f7f0..bd9b14c39161 100755
--- a/tools/layoutlib/rename_font/build_font.py
+++ b/tools/layoutlib/rename_font/build_font.py
@@ -27,7 +27,7 @@ import sys
from fontTools import ttx
import re
import os
-from lxml import etree
+import xml.etree.ElementTree as etree
import shutil
import glob
from multiprocessing import Pool
@@ -84,14 +84,13 @@ def convert_font(input_path):
ttx.main(ttx_args)
# now parse the xml file to change its PS name.
tree = etree.parse(ttx_path)
- encoding = tree.docinfo.encoding
root = tree.getroot()
for name in root.iter('name'):
[old_ps_name, version] = get_font_info(name)
if old_ps_name is not None and version is not None:
new_ps_name = old_ps_name + version
update_name(name, new_ps_name)
- tree.write(ttx_path, xml_declaration=True, encoding=encoding )
+ tree.write(ttx_path, xml_declaration=True, encoding='utf-8' )
# generate the udpated font now.
ttx_args = ['-q', '-d', dest_dir, ttx_path]
ttx.main(ttx_args)
diff --git a/tools/layoutlib/rename_font/test.py b/tools/layoutlib/rename_font/test.py
index d4c86cb6a23e..b0b69d811833 100755
--- a/tools/layoutlib/rename_font/test.py
+++ b/tools/layoutlib/rename_font/test.py
@@ -14,7 +14,7 @@ import build_font
from fontTools import ttx
import os
-from lxml import etree
+import xml.etree.ElementTree as etree
import shutil
import tempfile