summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt429
-rw-r--r--api/system-current.txt429
-rw-r--r--api/test-current.txt429
-rw-r--r--core/java/android/app/LoadedApk.java23
-rw-r--r--core/java/android/app/PendingIntent.java2
-rw-r--r--core/java/android/content/pm/PackageParser.java4
-rw-r--r--core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java226
-rw-r--r--core/java/android/hardware/radio/ITuner.aidl2
-rw-r--r--core/java/android/hardware/radio/TunerAdapter.java8
-rw-r--r--core/java/android/os/BatteryStats.java4
-rwxr-xr-xcore/java/android/provider/Settings.java23
-rw-r--r--core/java/android/service/autofill/AutofillService.java18
-rw-r--r--core/java/android/service/autofill/FillEventHistory.java36
-rw-r--r--core/java/android/view/SurfaceView.java3
-rw-r--r--core/java/android/view/Window.java35
-rw-r--r--core/java/android/webkit/WebViewFactory.java263
-rw-r--r--core/java/android/webkit/WebViewLibraryLoader.java323
-rw-r--r--core/java/android/widget/ArrayAdapter.java7
-rw-r--r--core/java/android/widget/BaseAdapter.java14
-rw-r--r--core/java/com/android/internal/app/NightDisplayController.java4
-rw-r--r--core/java/com/android/internal/app/procstats/ProcessState.java31
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java26
-rw-r--r--core/java/com/android/internal/os/WrapperInit.java2
-rw-r--r--core/java/com/android/internal/os/Zygote.java5
-rw-r--r--core/jni/com_android_internal_os_Zygote.cpp22
-rw-r--r--core/res/res/values-bn/strings.xml3
-rw-r--r--core/res/res/values-ca/strings.xml10
-rw-r--r--core/res/res/values-eu/strings.xml2
-rw-r--r--core/res/res/values-hy/strings.xml6
-rw-r--r--core/res/res/values-in/strings.xml2
-rw-r--r--core/res/res/values-iw/strings.xml3
-rw-r--r--core/res/res/values-kn/strings.xml3
-rw-r--r--core/res/res/values-mcc204-mnc12/config.xml25
-rw-r--r--core/res/res/values-mcc206-mnc10/config.xml24
-rw-r--r--core/res/res/values-mcc208-mnc15/config.xml24
-rw-r--r--core/res/res/values-mcc208-mnc26/config.xml26
-rwxr-xr-xcore/res/res/values-mcc214-mnc02/config.xml46
-rw-r--r--core/res/res/values-mcc214-mnc04/config.xml44
-rwxr-xr-xcore/res/res/values-mcc214-mnc05/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc06/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc08/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc09/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc10/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc11/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc12/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc13/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc14/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc15/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc16/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc17/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc18/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc19/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc20/config.xml43
-rwxr-xr-xcore/res/res/values-mcc214-mnc21/config.xml43
-rw-r--r--core/res/res/values-mcc219-mnc02/config.xml25
-rw-r--r--core/res/res/values-mcc232-mnc10/config.xml26
-rw-r--r--core/res/res/values-mcc232-mnc11/config.xml25
-rw-r--r--core/res/res/values-mcc232-mnc12/config.xml25
-rw-r--r--core/res/res/values-mcc232-mnc13/config.xml25
-rw-r--r--core/res/res/values-mcc234-mnc08/config.xml26
-rw-r--r--core/res/res/values-mcc234-mnc10/config.xml31
-rw-r--r--core/res/res/values-mcc234-mnc20/config.xml11
-rw-r--r--core/res/res/values-mcc234-mnc26/config.xml31
-rw-r--r--core/res/res/values-mcc234-mnc30/config.xml30
-rw-r--r--core/res/res/values-mcc234-mnc31/config.xml30
-rw-r--r--core/res/res/values-mcc234-mnc32/config.xml30
-rw-r--r--core/res/res/values-mcc234-mnc33/config.xml32
-rw-r--r--core/res/res/values-mcc234-mnc34/config.xml30
-rw-r--r--core/res/res/values-mcc234-mnc86/config.xml30
-rw-r--r--core/res/res/values-mcc302-mnc370/config.xml10
-rw-r--r--core/res/res/values-mcc302-mnc370/strings.xml (renamed from core/res/res/values-mcc425-mnc08/config.xml)10
-rw-r--r--core/res/res/values-mcc302-mnc500/config.xml25
-rw-r--r--core/res/res/values-mcc302-mnc510/config.xml25
-rw-r--r--core/res/res/values-mcc302-mnc610/config.xml5
-rw-r--r--core/res/res/values-mcc302-mnc640/config.xml5
-rw-r--r--core/res/res/values-mcc302-mnc660/config.xml8
-rw-r--r--core/res/res/values-mcc302-mnc720/config.xml10
-rw-r--r--core/res/res/values-mcc302-mnc720/strings.xml (renamed from core/res/res/values-mcc206-mnc05/config.xml)9
-rw-r--r--core/res/res/values-mcc302-mnc780/config.xml6
-rw-r--r--core/res/res/values-mcc310-mnc150/config.xml17
-rw-r--r--core/res/res/values-mcc310-mnc410/config.xml19
-rw-r--r--core/res/res/values-mcc340-mnc01/config.xml6
-rw-r--r--core/res/res/values-mcc404/config.xml5
-rw-r--r--core/res/res/values-mcc405/config.xml5
-rw-r--r--core/res/res/values-mcc425-mnc07/config.xml5
-rw-r--r--core/res/res/values-mcc510-mnc21/config.xml25
-rw-r--r--core/res/res/values-mcc520/config.xml25
-rw-r--r--core/res/res/values-mcc530-mnc24/config.xml25
-rw-r--r--core/res/res/values-mcc722-mnc36/config.xml25
-rw-r--r--core/res/res/values-mcc730-mnc01/config.xml25
-rw-r--r--core/res/res/values-mcc730-mnc07/config.xml25
-rw-r--r--core/res/res/values-mcc730-mnc08/config.xml25
-rw-r--r--core/res/res/values-mcc730-mnc10/config.xml25
-rw-r--r--core/res/res/values-mk/strings.xml2
-rw-r--r--core/res/res/values-mr/strings.xml3
-rw-r--r--core/res/res/values-my/strings.xml2
-rw-r--r--core/res/res/values-ne/strings.xml3
-rw-r--r--core/res/res/values-pa/strings.xml3
-rw-r--r--core/res/res/values-pt-rBR/strings.xml2
-rw-r--r--core/res/res/values-pt/strings.xml2
-rw-r--r--core/res/res/values-ru/strings.xml2
-rw-r--r--core/res/res/values-sl/strings.xml3
-rw-r--r--core/res/res/values-te/strings.xml3
-rw-r--r--core/res/res/values-ur/strings.xml3
-rw-r--r--core/res/res/values/config.xml20
-rw-r--r--core/res/res/values/strings.xml2
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--media/java/android/media/AudioAttributes.java7
-rw-r--r--media/java/android/media/IMediaRouterClient.aidl1
-rw-r--r--media/java/android/media/IMediaRouterService.aidl1
-rw-r--r--media/java/android/media/MediaRouter.java75
-rw-r--r--packages/InputDevices/res/values-b+sr+Latn/strings.xml44
-rw-r--r--packages/InputDevices/res/values-be/strings.xml44
-rw-r--r--packages/InputDevices/res/values-bs/strings.xml44
-rw-r--r--packages/InputDevices/res/values-en-rAU/strings.xml44
-rw-r--r--packages/InputDevices/res/values-gu/strings.xml44
-rw-r--r--packages/InputDevices/res/values-pa/strings.xml44
-rw-r--r--packages/InputDevices/res/values-pt-rBR/strings.xml44
-rw-r--r--packages/InputDevices/res/values-sq/strings.xml44
-rw-r--r--packages/MtpDocumentsProvider/res/values-af/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-am/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ar/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-az/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-be/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-bg/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-bn/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-bs/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ca/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-cs/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-da/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-de/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-el/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-es/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-et/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-eu/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-fa/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-fi/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-fr/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-gl/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-gu/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-hi/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-hr/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-hu/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-hy/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-in/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-is/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-it/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-iw/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ja/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ka/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-kk/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-km/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-kn/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ko/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ky/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-lo/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-lt/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-lv/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-mk/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ml/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-mn/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-mr/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ms/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-my/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-nb/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ne/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-nl/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-pa/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-pl/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-pt/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ro/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ru/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-si/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sk/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sl/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sq/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sr/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sv/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-sw/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ta/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-te/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-th/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-tl/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-tr/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-uk/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-ur/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-uz/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-vi/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml25
-rw-r--r--packages/MtpDocumentsProvider/res/values-zu/strings.xml25
-rw-r--r--packages/PrintSpooler/res/layout/print_activity.xml4
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java23
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java56
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-ru/strings.xml10
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/CustomDialogPreference.java112
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java118
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java12
-rw-r--r--packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java27
-rw-r--r--packages/SystemUI/res/layout/notification_snooze.xml3
-rw-r--r--packages/SystemUI/res/values/ids.xml8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java168
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java7
-rw-r--r--proto/src/metrics_constants.proto10
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java54
-rw-r--r--services/autofill/java/com/android/server/autofill/RemoteFillService.java1
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java12
-rw-r--r--services/core/java/com/android/server/TextServicesManagerService.java26
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerConstants.java76
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java147
-rw-r--r--services/core/java/com/android/server/am/ProcessRecord.java37
-rw-r--r--services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java39
-rw-r--r--services/core/java/com/android/server/job/JobPackageTracker.java24
-rw-r--r--services/core/java/com/android/server/job/JobSchedulerService.java7
-rw-r--r--services/core/java/com/android/server/job/JobStore.java16
-rw-r--r--services/core/java/com/android/server/job/controllers/JobStatus.java55
-rw-r--r--services/core/java/com/android/server/media/AudioPlaybackMonitor.java124
-rw-r--r--services/core/java/com/android/server/media/MediaRouterService.java118
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java23
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java29
-rw-r--r--services/core/java/com/android/server/radio/RadioService.java1
-rw-r--r--services/core/java/com/android/server/radio/Tuner.java28
-rw-r--r--services/core/java/com/android/server/wm/DockedStackDividerController.java3
-rw-r--r--services/core/jni/Android.mk1
-rw-r--r--services/core/jni/NativeCallbackThread.cpp13
-rw-r--r--services/core/jni/com_android_server_power_PowerManagerService.cpp6
-rw-r--r--services/core/jni/com_android_server_radio_Tuner.cpp74
-rw-r--r--services/java/com/android/server/SystemServer.java9
-rw-r--r--services/tests/notification/Android.mk6
-rw-r--r--services/tests/servicestests/src/com/android/server/job/JobStoreTest.java3
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java26
-rw-r--r--test-runner/src/android/test/AndroidTestRunner.java17
-rw-r--r--test-runner/src/android/test/DatabaseTestUtils.java57
-rw-r--r--test-runner/src/android/test/InstrumentationTestRunner.java97
-rw-r--r--test-runner/src/android/test/InstrumentationUtils.java48
-rw-r--r--test-runner/src/android/test/PerformanceCollectorTestCase.java38
-rw-r--r--test-runner/src/android/test/TimedTest.java37
-rw-r--r--test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java35
-rw-r--r--test-runner/src/android/test/suitebuilder/TestGrouping.java43
-rw-r--r--test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java14
-rw-r--r--test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java116
-rw-r--r--test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java2
-rw-r--r--tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java60
-rw-r--r--tools/aapt2/Android.bp1
-rw-r--r--tools/aapt2/LoadedApk.cpp13
-rw-r--r--tools/aapt2/LoadedApk.h9
-rw-r--r--tools/aapt2/cmd/Optimize.cpp91
-rw-r--r--tools/aapt2/configuration/ConfigurationParser.cpp457
-rw-r--r--tools/aapt2/configuration/ConfigurationParser.h19
-rw-r--r--tools/aapt2/configuration/ConfigurationParser_test.cpp37
-rw-r--r--tools/aapt2/filter/AbiFilter.cpp51
-rw-r--r--tools/aapt2/filter/AbiFilter.h54
-rw-r--r--tools/aapt2/filter/AbiFilter_test.cpp66
-rw-r--r--tools/aapt2/filter/Filter.h77
-rw-r--r--tools/aapt2/filter/Filter_test.cpp54
271 files changed, 3715 insertions, 5879 deletions
diff --git a/api/current.txt b/api/current.txt
index 8088240d43de..d2c67adf491b 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3162,6 +3162,7 @@ package android.animation {
public final class AnimatorSet extends android.animation.Animator {
ctor public AnimatorSet();
+ method public android.animation.AnimatorSet clone();
method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
method public long getCurrentPlayTime();
method public long getDuration();
@@ -3280,6 +3281,7 @@ package android.animation {
public final class ObjectAnimator extends android.animation.ValueAnimator {
ctor public ObjectAnimator();
+ method public android.animation.ObjectAnimator clone();
method public java.lang.String getPropertyName();
method public java.lang.Object getTarget();
method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3305,6 +3307,7 @@ package android.animation {
method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
method public void setAutoCancel(boolean);
+ method public android.animation.ObjectAnimator setDuration(long);
method public void setProperty(android.util.Property);
method public void setPropertyName(java.lang.String);
}
@@ -3386,6 +3389,7 @@ package android.animation {
ctor public ValueAnimator();
method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
method public static boolean areAnimatorsEnabled();
+ method public android.animation.ValueAnimator clone();
method public float getAnimatedFraction();
method public java.lang.Object getAnimatedValue();
method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -4959,6 +4963,7 @@ package android.app {
ctor public IntentService(java.lang.String);
method public android.os.IBinder onBind(android.content.Intent);
method protected abstract void onHandleIntent(android.content.Intent);
+ method public void onStart(android.content.Intent, int);
method public void setIntentRedelivery(boolean);
}
@@ -11066,6 +11071,7 @@ package android.content.res {
public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+ method public void mark(int);
}
public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -11373,6 +11379,7 @@ package android.database {
method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
method public void deactivate();
method public void fillWindow(int, android.database.CursorWindow);
+ method protected void finalize();
method public byte[] getBlob(int);
method public int getColumnCount();
method public int getColumnIndex(java.lang.String);
@@ -13847,6 +13854,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setOpacity(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
}
@@ -13927,6 +13935,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setAntiAlias(boolean);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setGravity(int);
method public void setMipMap(boolean);
method public void setTargetDensity(android.graphics.Canvas);
@@ -14052,6 +14061,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+ method public void setDither(boolean);
method public void setEnterFadeDuration(int);
method public void setExitFadeDuration(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14118,6 +14128,7 @@ package android.graphics.drawable {
method public void setColors(int[]);
method public void setCornerRadii(float[]);
method public void setCornerRadius(float);
+ method public void setDither(boolean);
method public void setGradientCenter(float, float);
method public void setGradientRadius(float);
method public void setGradientType(int);
@@ -14212,6 +14223,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setDrawable(int, android.graphics.drawable.Drawable);
method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
method public void setId(int, int);
@@ -14252,6 +14264,7 @@ package android.graphics.drawable {
method public android.graphics.Paint getPaint();
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setTargetDensity(android.graphics.Canvas);
method public void setTargetDensity(android.util.DisplayMetrics);
method public void setTargetDensity(int);
@@ -14314,6 +14327,7 @@ package android.graphics.drawable {
method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setIntrinsicHeight(int);
method public void setIntrinsicWidth(int);
method public void setPadding(int, int, int, int);
@@ -14355,27 +14369,32 @@ package android.graphics.drawable.shapes {
public class ArcShape extends android.graphics.drawable.shapes.RectShape {
ctor public ArcShape(float, float);
+ method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
method public final float getStartAngle();
method public final float getSweepAngle();
}
public class OvalShape extends android.graphics.drawable.shapes.RectShape {
ctor public OvalShape();
+ method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
}
public class PathShape extends android.graphics.drawable.shapes.Shape {
ctor public PathShape(android.graphics.Path, float, float);
+ method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
}
public class RectShape extends android.graphics.drawable.shapes.Shape {
ctor public RectShape();
+ method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
method protected final android.graphics.RectF rect();
}
public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+ method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
}
public abstract class Shape implements java.lang.Cloneable {
@@ -14460,6 +14479,7 @@ package android.hardware {
method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
method public final void cancelAutoFocus();
method public final boolean enableShutterSound(boolean);
+ method protected void finalize();
method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
method public static int getNumberOfCameras();
method public android.hardware.Camera.Parameters getParameters();
@@ -15069,6 +15089,7 @@ package android.hardware.camera2 {
method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+ method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -15425,6 +15446,7 @@ package android.hardware.camera2 {
public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
method public int describeContents();
method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+ method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
method public java.lang.Object getTag();
method public boolean isReprocess();
method public void writeToParcel(android.os.Parcel, int);
@@ -15503,6 +15525,7 @@ package android.hardware.camera2 {
public class CaptureResult extends android.hardware.camera2.CameraMetadata {
method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
method public long getFrameNumber();
+ method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
method public android.hardware.camera2.CaptureRequest getRequest();
method public int getSequenceId();
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -17936,6 +17959,7 @@ package android.icu.text {
}
public class DateIntervalFormat extends android.icu.text.UFormat {
+ method public synchronized java.lang.Object clone();
method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -18719,6 +18743,7 @@ package android.icu.text {
public final class RuleBasedCollator extends android.icu.text.Collator {
ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+ method public android.icu.text.RuleBasedCollator cloneAsThawed();
method public int compare(java.lang.String, java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -18745,6 +18770,7 @@ package android.icu.text {
method public void setFrenchCollation(boolean);
method public void setFrenchCollationDefault();
method public void setLowerCaseFirst(boolean);
+ method public android.icu.text.RuleBasedCollator setMaxVariable(int);
method public void setNumericCollation(boolean);
method public void setNumericCollationDefault();
method public void setStrengthDefault();
@@ -21265,6 +21291,7 @@ package android.media {
ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+ method protected void finalize();
method public int getAudioFormat();
method public int getAudioSessionId();
method public int getAudioSource();
@@ -21369,6 +21396,7 @@ package android.media {
method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
method public int attachAuxEffect(int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+ method protected void finalize();
method public void flush();
method public int getAudioFormat();
method public int getAudioSessionId();
@@ -21767,6 +21795,7 @@ package android.media {
method public boolean clearQueue();
method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
method public boolean closeJetFile();
+ method protected void finalize();
method public static android.media.JetPlayer getJetPlayer();
method public static int getMaxTracks();
method public boolean loadJetFile(java.lang.String);
@@ -21806,6 +21835,7 @@ package android.media {
ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+ method protected void finalize();
method public static boolean isSystemIdSupported(int);
method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -21862,6 +21892,7 @@ package android.media {
method public static android.view.Surface createPersistentInputSurface();
method public final int dequeueInputBuffer(long);
method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+ method protected void finalize();
method public final void flush();
method public android.media.MediaCodecInfo getCodecInfo();
method public java.nio.ByteBuffer getInputBuffer(int);
@@ -22273,6 +22304,7 @@ package android.media {
public final class MediaCrypto {
ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+ method protected void finalize();
method public static final boolean isCryptoSchemeSupported(java.util.UUID);
method public final void release();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -22293,6 +22325,7 @@ package android.media {
ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+ method protected void finalize();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
method public final void setMediaCasSession(android.media.MediaCas.Session);
}
@@ -22335,6 +22368,7 @@ package android.media {
public final class MediaDrm {
ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
method public void closeSession(byte[]);
+ method protected void finalize();
method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
method public byte[] getPropertyByteArray(java.lang.String);
@@ -22431,6 +22465,7 @@ package android.media {
public final class MediaExtractor {
ctor public MediaExtractor();
method public boolean advance();
+ method protected void finalize();
method public long getCachedDuration();
method public android.media.MediaExtractor.CasInfo getCasInfo(int);
method public android.media.DrmInitData getDrmInitData();
@@ -22732,6 +22767,7 @@ package android.media {
method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
method public void deselectTrack(int) throws java.lang.IllegalStateException;
+ method protected void finalize();
method public int getAudioSessionId();
method public int getCurrentPosition();
method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -22927,6 +22963,7 @@ package android.media {
public class MediaRecorder {
ctor public MediaRecorder();
+ method protected void finalize();
method public static final int getAudioSourceMax();
method public int getMaxAmplitude() throws java.lang.IllegalStateException;
method public android.os.PersistableBundle getMetrics();
@@ -23198,6 +23235,7 @@ package android.media {
public final class MediaSync {
ctor public MediaSync();
method public final android.view.Surface createInputSurface();
+ method protected void finalize();
method public void flush();
method public android.media.PlaybackParams getPlaybackParams();
method public android.media.SyncParams getSyncParams();
@@ -23317,6 +23355,10 @@ package android.media {
public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
method public synchronized void apply();
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
}
@@ -23363,6 +23405,7 @@ package android.media {
}
public class Ringtone {
+ method protected void finalize();
method public android.media.AudioAttributes getAudioAttributes();
method public deprecated int getStreamType();
method public java.lang.String getTitle(android.content.Context);
@@ -23416,6 +23459,7 @@ package android.media {
ctor public deprecated SoundPool(int, int, int);
method public final void autoPause();
method public final void autoResume();
+ method protected void finalize();
method public int load(java.lang.String, int);
method public int load(android.content.Context, int, int);
method public int load(android.content.res.AssetFileDescriptor, int);
@@ -23484,6 +23528,7 @@ package android.media {
public class ToneGenerator {
ctor public ToneGenerator(int, int);
+ method protected void finalize();
method public final int getAudioSessionId();
method public void release();
method public boolean startTone(int);
@@ -23616,6 +23661,7 @@ package android.media {
public final class VolumeShaper implements java.lang.AutoCloseable {
method public void apply(android.media.VolumeShaper.Operation);
method public void close();
+ method protected void finalize();
method public float getVolume();
method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
}
@@ -23670,6 +23716,7 @@ package android.media.audiofx {
}
public class AudioEffect {
+ method protected void finalize();
method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
method public boolean getEnabled() throws java.lang.IllegalStateException;
method public int getId() throws java.lang.IllegalStateException;
@@ -23922,6 +23969,7 @@ package android.media.audiofx {
public class Visualizer {
ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+ method protected void finalize();
method public int getCaptureSize() throws java.lang.IllegalStateException;
method public static int[] getCaptureSizeRange();
method public boolean getEnabled();
@@ -30585,6 +30633,7 @@ package android.os {
method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
method public void readFromParcel(android.os.Parcel);
method public void setClassLoader(java.lang.ClassLoader);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
field public static final android.os.Bundle EMPTY;
@@ -30815,6 +30864,7 @@ package android.os {
public abstract class FileObserver {
ctor public FileObserver(java.lang.String);
ctor public FileObserver(java.lang.String, int);
+ method protected void finalize();
method public abstract void onEvent(int, java.lang.String);
method public void startWatching();
method public void stopWatching();
@@ -30968,6 +31018,7 @@ package android.os {
ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
method public void close();
+ method protected void finalize();
method public java.io.InputStream getInputStream();
method public java.io.OutputStream getOutputStream();
method public boolean isPurgingAllowed();
@@ -31267,6 +31318,7 @@ package android.os {
method public int describeContents();
method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
field public static final android.os.PersistableBundle EMPTY;
@@ -35589,6 +35641,7 @@ package android.renderscript {
method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+ method public synchronized void resize(int);
method public void setFace(android.renderscript.Type.CubemapFace);
method public void setLOD(int);
method public void setX(int);
@@ -40275,6 +40328,7 @@ package android.telephony.gsm {
public static deprecated class SmsMessage.SubmitPdu {
ctor public deprecated SmsMessage.SubmitPdu();
+ method public deprecated java.lang.String toString();
field public deprecated byte[] encodedMessage;
field public deprecated byte[] encodedScAddress;
}
@@ -40338,6 +40392,7 @@ package android.test {
method public java.util.List<junit.framework.TestCase> getTestCases();
method public java.lang.String getTestClassName();
method public junit.framework.TestResult getTestResult();
+ method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
method protected void runFailed(java.lang.String);
method public void runTest();
method public void runTest(junit.framework.TestResult);
@@ -40598,10 +40653,12 @@ package android.test.mock {
ctor protected MockContentProvider();
ctor public MockContentProvider(android.content.Context);
ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+ method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
method public java.lang.String getType(android.net.Uri);
method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
method public boolean onCreate();
+ method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
@@ -40871,6 +40928,10 @@ package android.test.mock {
public deprecated class MockResources extends android.content.res.Resources {
ctor public MockResources();
+ method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+ method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+ method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+ method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
}
}
@@ -42119,6 +42180,7 @@ package android.text.style {
public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
ctor public MetricAffectingSpan();
+ method public android.text.style.MetricAffectingSpan getUnderlying();
method public abstract void updateMeasureState(android.text.TextPaint);
}
@@ -42799,14 +42861,28 @@ package android.transition {
public class TransitionSet extends android.transition.Transition {
ctor public TransitionSet();
ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+ method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet addTarget(android.view.View);
+ method public android.transition.TransitionSet addTarget(int);
+ method public android.transition.TransitionSet addTarget(java.lang.String);
+ method public android.transition.TransitionSet addTarget(java.lang.Class);
method public android.transition.TransitionSet addTransition(android.transition.Transition);
method public void captureEndValues(android.transition.TransitionValues);
method public void captureStartValues(android.transition.TransitionValues);
+ method public android.transition.TransitionSet clone();
method public int getOrdering();
method public android.transition.Transition getTransitionAt(int);
method public int getTransitionCount();
+ method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet removeTarget(int);
+ method public android.transition.TransitionSet removeTarget(android.view.View);
+ method public android.transition.TransitionSet removeTarget(java.lang.Class);
+ method public android.transition.TransitionSet removeTarget(java.lang.String);
method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+ method public android.transition.TransitionSet setDuration(long);
+ method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
method public android.transition.TransitionSet setOrdering(int);
+ method public android.transition.TransitionSet setStartDelay(long);
field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
field public static final int ORDERING_TOGETHER = 0; // 0x0
}
@@ -42971,6 +43047,9 @@ package android.util {
public class Base64InputStream extends java.io.FilterInputStream {
ctor public Base64InputStream(java.io.InputStream, int);
+ method public int available();
+ method public void mark(int);
+ method public void reset();
}
public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -45086,6 +45165,7 @@ package android.view {
method public android.graphics.Canvas lockCanvas();
method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
method protected final void onDraw(android.graphics.Canvas);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setOpaque(boolean);
method public void setSurfaceTexture(android.graphics.SurfaceTexture);
method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -46109,6 +46189,7 @@ package android.view {
method public int getLayoutMode();
method public android.animation.LayoutTransition getLayoutTransition();
method public int getNestedScrollAxes();
+ method public android.view.ViewGroupOverlay getOverlay();
method public int getPersistentDrawingCache();
method public boolean getTouchscreenBlocksFocus();
method public int indexOfChild(android.view.View);
@@ -46539,6 +46620,7 @@ package android.view {
method public final boolean isActive();
method public abstract boolean isFloating();
method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+ method public boolean isWideColorGamut();
method public final void makeActive();
method protected abstract void onActive();
method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -47387,6 +47469,7 @@ package android.view.animation {
ctor public Animation(android.content.Context, android.util.AttributeSet);
method protected void applyTransformation(float, android.view.animation.Transformation);
method public void cancel();
+ method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
method public long computeDurationHint();
method protected void ensureInterpolator();
method public int getBackgroundColor();
@@ -47458,6 +47541,7 @@ package android.view.animation {
ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
ctor public AnimationSet(boolean);
method public void addAnimation(android.view.animation.Animation);
+ method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
method public java.util.List<android.view.animation.Animation> getAnimations();
}
@@ -48308,6 +48392,10 @@ package android.webkit {
public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
method public static android.webkit.CookieSyncManager getInstance();
+ method public deprecated void resetSync();
+ method public deprecated void startSync();
+ method public deprecated void stopSync();
+ method public deprecated void sync();
method protected deprecated void syncFromRamToFlash();
field protected static final java.lang.String LOGTAG = "websync";
field protected android.webkit.WebViewDatabase mDataBase;
@@ -48860,6 +48948,7 @@ package android.webkit {
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public static void setWebContentsDebuggingEnabled(boolean);
method public void setWebViewClient(android.webkit.WebViewClient);
+ method public deprecated boolean shouldDelayChildPressedState();
method public deprecated boolean showFindDialog(java.lang.String, boolean);
method public static void shutdownSafeBrowsing();
method public void stopLoading();
@@ -48992,6 +49081,7 @@ package android.widget {
method public void clearTextFilter();
method public void deferNotifyDataSetChanged();
method public void fling(int);
+ method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCacheColorHint();
method public int getCheckedItemCount();
method public long[] getCheckedItemIds();
@@ -49158,6 +49248,9 @@ package android.widget {
ctor public ActionMenuView(android.content.Context);
ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
method public void dismissPopupMenus();
+ method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public android.view.Menu getMenu();
method public android.graphics.drawable.Drawable getOverflowIcon();
method public int getPopupTheme();
@@ -49333,7 +49426,6 @@ package android.widget {
method public void addAll(T...);
method public void clear();
method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
- method public java.lang.CharSequence[] getAutofillOptions();
method public android.content.Context getContext();
method public int getCount();
method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -49423,6 +49515,7 @@ package android.widget {
method public void notifyDataSetChanged();
method public void notifyDataSetInvalidated();
method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void setAutofillOptions(java.lang.CharSequence...);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
}
@@ -49701,6 +49794,7 @@ package android.widget {
ctor public EditText(android.content.Context, android.util.AttributeSet, int);
ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
method public void extendSelection(int);
+ method public android.text.Editable getText();
method public void selectAll();
method public void setSelection(int, int);
method public void setSelection(int);
@@ -49822,6 +49916,8 @@ package android.widget {
ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
method public boolean getMeasureAllChildren();
method protected void onLayout(boolean, int, int, int, int);
@@ -49868,6 +49964,9 @@ package android.widget {
ctor public GridLayout(android.content.Context, android.util.AttributeSet);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getAlignmentMode();
method public int getColumnCount();
method public int getOrientation();
@@ -50080,6 +50179,9 @@ package android.widget {
ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getBaselineAlignedChildIndex();
method public android.graphics.drawable.Drawable getDividerDrawable();
method public int getDividerPadding();
@@ -50466,6 +50568,8 @@ package android.widget {
method public final synchronized void incrementSecondaryProgressBy(int);
method public boolean isAnimating();
method public synchronized boolean isIndeterminate();
+ method protected synchronized void onDraw(android.graphics.Canvas);
+ method protected synchronized void onMeasure(int, int);
method public void onRestoreInstanceState(android.os.Parcelable);
method public android.os.Parcelable onSaveInstanceState();
method public synchronized void setIndeterminate(boolean);
@@ -50521,6 +50625,7 @@ package android.widget {
ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
method public void check(int);
method public void clearCheck();
+ method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCheckedRadioButtonId();
method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
}
@@ -50563,6 +50668,7 @@ package android.widget {
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getGravity();
method protected void onLayout(boolean, int, int, int, int);
method public void setGravity(int);
@@ -51106,6 +51212,7 @@ package android.widget {
public class TableLayout extends android.widget.LinearLayout {
ctor public TableLayout(android.content.Context);
ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public boolean isColumnCollapsed(int);
method public boolean isColumnShrinkable(int);
method public boolean isColumnStretchable(int);
@@ -51130,6 +51237,7 @@ package android.widget {
public class TableRow extends android.widget.LinearLayout {
ctor public TableRow(android.content.Context);
ctor public TableRow(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public android.view.View getVirtualChildAt(int);
method public int getVirtualChildCount();
}
@@ -51471,6 +51579,7 @@ package android.widget {
ctor public ToggleButton(android.content.Context);
method public java.lang.CharSequence getTextOff();
method public java.lang.CharSequence getTextOn();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setTextOff(java.lang.CharSequence);
method public void setTextOn(java.lang.CharSequence);
}
@@ -51482,6 +51591,9 @@ package android.widget {
ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
method public void collapseActionView();
method public void dismissPopupMenus();
+ method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getContentInsetEnd();
method public int getContentInsetEndWithActions();
method public int getContentInsetLeft();
@@ -52003,6 +52115,8 @@ package dalvik.system {
public class BaseDexClassLoader extends java.lang.ClassLoader {
ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
method public java.lang.String findLibrary(java.lang.String);
+ method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+ method protected synchronized java.lang.Package getPackage(java.lang.String);
}
public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -52224,6 +52338,10 @@ package java.io {
public class BufferedInputStream extends java.io.FilterInputStream {
ctor public BufferedInputStream(java.io.InputStream);
ctor public BufferedInputStream(java.io.InputStream, int);
+ method public synchronized int available() throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
+ method public synchronized long skip(long) throws java.io.IOException;
field protected volatile byte[] buf;
field protected int count;
field protected int marklimit;
@@ -52234,6 +52352,9 @@ package java.io {
public class BufferedOutputStream extends java.io.FilterOutputStream {
ctor public BufferedOutputStream(java.io.OutputStream);
ctor public BufferedOutputStream(java.io.OutputStream, int);
+ method public synchronized void flush() throws java.io.IOException;
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
}
@@ -52259,7 +52380,12 @@ package java.io {
public class ByteArrayInputStream extends java.io.InputStream {
ctor public ByteArrayInputStream(byte[]);
ctor public ByteArrayInputStream(byte[], int, int);
+ method public synchronized int available();
+ method public void mark(int);
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected byte[] buf;
field protected int count;
field protected int mark;
@@ -52272,9 +52398,11 @@ package java.io {
method public synchronized void reset();
method public synchronized int size();
method public synchronized byte[] toByteArray();
+ method public synchronized java.lang.String toString();
method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
method public deprecated synchronized java.lang.String toString(int);
method public synchronized void write(int);
+ method public synchronized void write(byte[], int, int);
method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
@@ -52294,12 +52422,17 @@ package java.io {
public class CharArrayWriter extends java.io.Writer {
ctor public CharArrayWriter();
ctor public CharArrayWriter(int);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+ method public java.io.CharArrayWriter append(char);
method public void close();
method public void flush();
method public void reset();
method public int size();
method public char[] toCharArray();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String, int, int);
method public void writeTo(java.io.Writer) throws java.io.IOException;
field protected char[] buf;
field protected int count;
@@ -52386,6 +52519,8 @@ package java.io {
public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
ctor public DataOutputStream(java.io.OutputStream);
method public final int size();
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
method public final void writeBoolean(boolean) throws java.io.IOException;
method public final void writeByte(int) throws java.io.IOException;
method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -52485,6 +52620,7 @@ package java.io {
ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public int read() throws java.io.IOException;
@@ -52501,6 +52637,7 @@ package java.io {
ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
@@ -52614,6 +52751,8 @@ package java.io {
public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
ctor public LineNumberInputStream(java.io.InputStream);
method public int getLineNumber();
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
method public void setLineNumber(int);
}
@@ -52843,8 +52982,10 @@ package java.io {
ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
ctor public PipedInputStream();
ctor public PipedInputStream(int);
+ method public synchronized int available() throws java.io.IOException;
method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
method protected synchronized void receive(int) throws java.io.IOException;
field protected static final int PIPE_SIZE = 1024; // 0x400
field protected byte[] buffer;
@@ -52856,6 +52997,7 @@ package java.io {
ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
ctor public PipedOutputStream();
method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+ method public synchronized void flush() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
}
@@ -52866,7 +53008,9 @@ package java.io {
ctor public PipedReader(int);
method public void close() throws java.io.IOException;
method public void connect(java.io.PipedWriter) throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
method public synchronized int read(char[], int, int) throws java.io.IOException;
+ method public synchronized boolean ready() throws java.io.IOException;
}
public class PipedWriter extends java.io.Writer {
@@ -52891,6 +53035,8 @@ package java.io {
method public java.io.PrintStream append(char);
method public boolean checkError();
method protected void clearError();
+ method public void close();
+ method public void flush();
method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
method public void print(boolean);
@@ -52915,6 +53061,8 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
+ method public void write(byte[], int, int);
}
public class PrintWriter extends java.io.Writer {
@@ -52926,6 +53074,9 @@ package java.io {
ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+ method public java.io.PrintWriter append(java.lang.CharSequence);
+ method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+ method public java.io.PrintWriter append(char);
method public boolean checkError();
method protected void clearError();
method public void close();
@@ -52954,13 +53105,18 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(char[]);
+ method public void write(java.lang.String, int, int);
+ method public void write(java.lang.String);
field protected java.io.Writer out;
}
public class PushbackInputStream extends java.io.FilterInputStream {
ctor public PushbackInputStream(java.io.InputStream, int);
ctor public PushbackInputStream(java.io.InputStream);
+ method public synchronized void close() throws java.io.IOException;
method public void unread(int) throws java.io.IOException;
method public void unread(byte[], int, int) throws java.io.IOException;
method public void unread(byte[]) throws java.io.IOException;
@@ -53084,7 +53240,11 @@ package java.io {
public deprecated class StringBufferInputStream extends java.io.InputStream {
ctor public StringBufferInputStream(java.lang.String);
+ method public synchronized int available();
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected java.lang.String buffer;
field protected int count;
field protected int pos;
@@ -53099,10 +53259,16 @@ package java.io {
public class StringWriter extends java.io.Writer {
ctor public StringWriter();
ctor public StringWriter(int);
+ method public java.io.StringWriter append(java.lang.CharSequence);
+ method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+ method public java.io.StringWriter append(char);
method public void close() throws java.io.IOException;
method public void flush();
method public java.lang.StringBuffer getBuffer();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String);
+ method public void write(java.lang.String, int, int);
}
public class SyncFailedException extends java.io.IOException {
@@ -53117,6 +53283,7 @@ package java.io {
public class UncheckedIOException extends java.lang.RuntimeException {
ctor public UncheckedIOException(java.lang.String, java.io.IOException);
ctor public UncheckedIOException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class UnsupportedEncodingException extends java.io.IOException {
@@ -53126,6 +53293,7 @@ package java.io {
public class WriteAbortedException extends java.io.ObjectStreamException {
ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+ method public java.lang.Throwable getCause();
field public java.lang.Exception detail;
}
@@ -53893,6 +54061,7 @@ package java.lang {
ctor public ClassNotFoundException();
ctor public ClassNotFoundException(java.lang.String);
ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -53997,6 +54166,7 @@ package java.lang {
ctor public ExceptionInInitializerError();
ctor public ExceptionInInitializerError(java.lang.Throwable);
ctor public ExceptionInInitializerError(java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -54784,8 +54954,16 @@ package java.lang {
method public synchronized java.lang.StringBuffer append(float);
method public synchronized java.lang.StringBuffer append(double);
method public synchronized java.lang.StringBuffer appendCodePoint(int);
+ method public synchronized int capacity();
+ method public synchronized char charAt(int);
+ method public synchronized int codePointAt(int);
+ method public synchronized int codePointBefore(int);
+ method public synchronized int codePointCount(int, int);
method public synchronized java.lang.StringBuffer delete(int, int);
method public synchronized java.lang.StringBuffer deleteCharAt(int);
+ method public synchronized void ensureCapacity(int);
+ method public synchronized void getChars(int, int, char[], int);
+ method public synchronized int indexOf(java.lang.String, int);
method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -54798,9 +54976,18 @@ package java.lang {
method public java.lang.StringBuffer insert(int, long);
method public java.lang.StringBuffer insert(int, float);
method public java.lang.StringBuffer insert(int, double);
+ method public synchronized int lastIndexOf(java.lang.String, int);
+ method public synchronized int length();
+ method public synchronized int offsetByCodePoints(int, int);
method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
method public synchronized java.lang.StringBuffer reverse();
+ method public synchronized void setCharAt(int, char);
+ method public synchronized void setLength(int);
+ method public synchronized java.lang.CharSequence subSequence(int, int);
+ method public synchronized java.lang.String substring(int);
+ method public synchronized java.lang.String substring(int, int);
method public synchronized java.lang.String toString();
+ method public synchronized void trimToSize();
}
public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -55455,6 +55642,7 @@ package java.lang.reflect {
ctor protected InvocationTargetException();
ctor public InvocationTargetException(java.lang.Throwable);
ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getTargetException();
}
@@ -55570,6 +55758,7 @@ package java.lang.reflect {
public class UndeclaredThrowableException extends java.lang.RuntimeException {
ctor public UndeclaredThrowableException(java.lang.Throwable);
ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getUndeclaredThrowable();
}
@@ -56467,6 +56656,7 @@ package java.net {
method public java.lang.String getQuery();
method public java.lang.String getRef();
method public java.lang.String getUserInfo();
+ method public synchronized int hashCode();
method public java.net.URLConnection openConnection() throws java.io.IOException;
method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -56696,7 +56886,6 @@ package java.nio {
method public final int arrayOffset();
method public abstract java.nio.CharBuffer asReadOnlyBuffer();
method public final char charAt(int);
- method public java.util.stream.IntStream chars();
method public abstract java.nio.CharBuffer compact();
method public int compareTo(java.nio.CharBuffer);
method public abstract java.nio.CharBuffer duplicate();
@@ -57553,6 +57742,7 @@ package java.nio.file {
public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
ctor public DirectoryIteratorException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -58518,9 +58708,11 @@ package java.security {
public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
ctor public KeyStore.PasswordProtection(char[]);
ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+ method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
method public synchronized char[] getPassword();
method public java.lang.String getProtectionAlgorithm();
method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+ method public synchronized boolean isDestroyed();
}
public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -58700,6 +58892,7 @@ package java.security {
public class PrivilegedActionException extends java.lang.Exception {
ctor public PrivilegedActionException(java.lang.Exception);
+ method public java.lang.Throwable getCause();
method public java.lang.Exception getException();
}
@@ -58722,22 +58915,30 @@ package java.security {
method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.util.Enumeration<java.lang.Object> elements();
+ method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+ method public java.lang.Object get(java.lang.Object);
method public java.lang.String getInfo();
method public java.lang.String getName();
method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
method public synchronized java.util.Set<java.security.Provider.Service> getServices();
method public double getVersion();
+ method public java.util.Set<java.lang.Object> keySet();
+ method public java.util.Enumeration<java.lang.Object> keys();
method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
method public synchronized void putAll(java.util.Map<?, ?>);
method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
method protected synchronized void putService(java.security.Provider.Service);
+ method public synchronized java.lang.Object remove(java.lang.Object);
method protected synchronized void removeService(java.security.Provider.Service);
method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.lang.String toString();
+ method public java.util.Collection<java.lang.Object> values();
}
public static class Provider.Service {
@@ -58783,7 +58984,9 @@ package java.security {
method public final java.security.Provider getProvider();
method public static byte[] getSeed(int);
method protected final int next(int);
+ method public synchronized void nextBytes(byte[]);
method public synchronized void setSeed(byte[]);
+ method public void setSeed(long);
}
public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -59330,6 +59533,7 @@ package java.security.cert {
public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
ctor protected PKIXRevocationChecker();
+ method public java.security.cert.PKIXRevocationChecker clone();
method public java.util.List<java.security.cert.Extension> getOcspExtensions();
method public java.net.URI getOcspResponder();
method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -61582,7 +61786,6 @@ package java.time {
public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -61590,8 +61793,6 @@ package java.time {
method public java.time.DayOfWeek minus(long);
method public static java.time.DayOfWeek of(int);
method public java.time.DayOfWeek plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.DayOfWeek valueOf(java.lang.String);
method public static final java.time.DayOfWeek[] values();
enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -61667,6 +61868,8 @@ package java.time {
method public boolean isBefore(java.time.Instant);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+ method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant minusMillis(long);
method public java.time.Instant minusNanos(long);
method public java.time.Instant minusSeconds(long);
@@ -61676,6 +61879,7 @@ package java.time {
method public static java.time.Instant ofEpochSecond(long);
method public static java.time.Instant ofEpochSecond(long, long);
method public static java.time.Instant parse(java.lang.CharSequence);
+ method public java.time.Instant plus(java.time.temporal.TemporalAmount);
method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant plusMillis(long);
method public java.time.Instant plusNanos(long);
@@ -61683,6 +61887,7 @@ package java.time {
method public long toEpochMilli();
method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
method public java.time.Instant with(java.time.temporal.TemporalField, long);
field public static final java.time.Instant EPOCH;
field public static final java.time.Instant MAX;
@@ -61692,6 +61897,7 @@ package java.time {
public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
method public java.time.LocalDateTime atStartOfDay();
method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+ method public java.time.LocalDateTime atTime(java.time.LocalTime);
method public java.time.LocalDateTime atTime(int, int);
method public java.time.LocalDateTime atTime(int, int, int);
method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -61706,6 +61912,8 @@ package java.time {
method public int getMonthValue();
method public int getYear();
method public int lengthOfMonth();
+ method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate minusDays(long);
method public java.time.LocalDate minusMonths(long);
method public java.time.LocalDate minusWeeks(long);
@@ -61719,12 +61927,16 @@ package java.time {
method public static java.time.LocalDate ofYearDay(int, int);
method public static java.time.LocalDate parse(java.lang.CharSequence);
method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate plusDays(long);
method public java.time.LocalDate plusMonths(long);
method public java.time.LocalDate plusWeeks(long);
method public java.time.LocalDate plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+ method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+ method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
method public java.time.LocalDate withDayOfMonth(int);
method public java.time.LocalDate withDayOfYear(int);
method public java.time.LocalDate withMonth(int);
@@ -61749,6 +61961,8 @@ package java.time {
method public int getSecond();
method public int getYear();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime minusDays(long);
method public java.time.LocalDateTime minusHours(long);
method public java.time.LocalDateTime minusMinutes(long);
@@ -61771,6 +61985,7 @@ package java.time {
method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.LocalDateTime parse(java.lang.CharSequence);
method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime plusDays(long);
method public java.time.LocalDateTime plusHours(long);
@@ -61784,6 +61999,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalDateTime withDayOfMonth(int);
method public java.time.LocalDateTime withDayOfYear(int);
@@ -61813,6 +62029,8 @@ package java.time {
method public boolean isBefore(java.time.LocalTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime minusHours(long);
method public java.time.LocalTime minusMinutes(long);
method public java.time.LocalTime minusNanos(long);
@@ -61827,6 +62045,7 @@ package java.time {
method public static java.time.LocalTime ofSecondOfDay(long);
method public static java.time.LocalTime parse(java.lang.CharSequence);
method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime plusHours(long);
method public java.time.LocalTime plusMinutes(long);
@@ -61836,6 +62055,7 @@ package java.time {
method public int toSecondOfDay();
method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalTime withHour(int);
method public java.time.LocalTime withMinute(int);
@@ -61852,7 +62072,6 @@ package java.time {
method public int firstDayOfYear(boolean);
method public java.time.Month firstMonthOfQuarter();
method public static java.time.Month from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -61863,8 +62082,6 @@ package java.time {
method public java.time.Month minus(long);
method public static java.time.Month of(int);
method public java.time.Month plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.Month valueOf(java.lang.String);
method public static final java.time.Month[] values();
enum_constant public static final java.time.Month APRIL;
@@ -61931,6 +62148,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetDateTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime minusDays(long);
method public java.time.OffsetDateTime minusHours(long);
method public java.time.OffsetDateTime minusMinutes(long);
@@ -61948,6 +62167,7 @@ package java.time {
method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime plusDays(long);
method public java.time.OffsetDateTime plusHours(long);
@@ -61967,6 +62187,7 @@ package java.time {
method public java.time.ZonedDateTime toZonedDateTime();
method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetDateTime withDayOfMonth(int);
method public java.time.OffsetDateTime withDayOfYear(int);
@@ -61999,6 +62220,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime minusHours(long);
method public java.time.OffsetTime minusMinutes(long);
method public java.time.OffsetTime minusNanos(long);
@@ -62011,6 +62234,7 @@ package java.time {
method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetTime parse(java.lang.CharSequence);
method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime plusHours(long);
method public java.time.OffsetTime plusMinutes(long);
@@ -62019,6 +62243,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetTime withHour(int);
method public java.time.OffsetTime withMinute(int);
@@ -62045,6 +62270,7 @@ package java.time {
method public java.time.Period minusMonths(long);
method public java.time.Period minusYears(long);
method public java.time.Period multipliedBy(int);
+ method public java.time.Period negated();
method public java.time.Period normalized();
method public static java.time.Period of(int, int, int);
method public static java.time.Period ofDays(int);
@@ -62083,6 +62309,8 @@ package java.time {
method public boolean isSupported(java.time.temporal.TemporalUnit);
method public boolean isValidMonthDay(java.time.MonthDay);
method public int length();
+ method public java.time.Year minus(java.time.temporal.TemporalAmount);
+ method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
method public java.time.Year minusYears(long);
method public static java.time.Year now();
method public static java.time.Year now(java.time.ZoneId);
@@ -62090,9 +62318,11 @@ package java.time {
method public static java.time.Year of(int);
method public static java.time.Year parse(java.lang.CharSequence);
method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.Year plus(java.time.temporal.TemporalAmount);
method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
method public java.time.Year plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Year with(java.time.temporal.TemporalAdjuster);
method public java.time.Year with(java.time.temporal.TemporalField, long);
field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -62117,6 +62347,8 @@ package java.time {
method public boolean isValidDay(int);
method public int lengthOfMonth();
method public int lengthOfYear();
+ method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+ method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth minusMonths(long);
method public java.time.YearMonth minusYears(long);
method public static java.time.YearMonth now();
@@ -62126,10 +62358,12 @@ package java.time {
method public static java.time.YearMonth of(int, int);
method public static java.time.YearMonth parse(java.lang.CharSequence);
method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth plusMonths(long);
method public java.time.YearMonth plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
method public java.time.YearMonth withMonth(int);
method public java.time.YearMonth withYear(int);
@@ -62153,7 +62387,6 @@ package java.time {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public int compareTo(java.time.ZoneOffset);
method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getId();
method public long getLong(java.time.temporal.TemporalField);
method public java.time.zone.ZoneRules getRules();
@@ -62164,8 +62397,6 @@ package java.time {
method public static java.time.ZoneOffset ofHoursMinutes(int, int);
method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
method public static java.time.ZoneOffset ofTotalSeconds(int);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
field public static final java.time.ZoneOffset MAX;
field public static final java.time.ZoneOffset MIN;
field public static final java.time.ZoneOffset UTC;
@@ -62186,6 +62417,8 @@ package java.time {
method public int getYear();
method public java.time.ZoneId getZone();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime minusDays(long);
method public java.time.ZonedDateTime minusHours(long);
method public java.time.ZonedDateTime minusMinutes(long);
@@ -62206,6 +62439,7 @@ package java.time {
method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime plusDays(long);
method public java.time.ZonedDateTime plusHours(long);
@@ -62215,10 +62449,12 @@ package java.time {
method public java.time.ZonedDateTime plusSeconds(long);
method public java.time.ZonedDateTime plusWeeks(long);
method public java.time.ZonedDateTime plusYears(long);
+ method public java.time.LocalDate toLocalDate();
method public java.time.LocalDateTime toLocalDateTime();
method public java.time.OffsetDateTime toOffsetDateTime();
method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
method public java.time.ZonedDateTime withDayOfMonth(int);
method public java.time.ZonedDateTime withDayOfYear(int);
@@ -62263,17 +62499,27 @@ package java.time.chrono {
method public default boolean isSupported(java.time.temporal.TemporalUnit);
method public abstract int lengthOfMonth();
method public default int lengthOfYear();
+ method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
method public default long toEpochDay();
method public abstract java.lang.String toString();
method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
}
abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+ method public D minus(java.time.temporal.TemporalAmount);
+ method public D minus(long, java.time.temporal.TemporalUnit);
+ method public D plus(java.time.temporal.TemporalAmount);
+ method public D plus(long, java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public D with(java.time.temporal.TemporalAdjuster);
+ method public D with(java.time.temporal.TemporalField, long);
}
public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -62290,6 +62536,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
method public default long toEpochSecond(java.time.ZoneOffset);
@@ -62297,6 +62546,7 @@ package java.time.chrono {
method public abstract D toLocalDate();
method public abstract java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
}
@@ -62334,6 +62584,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
method public default long toEpochSecond();
@@ -62342,6 +62595,7 @@ package java.time.chrono {
method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
method public default java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -62408,6 +62662,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -62419,23 +62674,24 @@ package java.time.chrono {
method public java.time.chrono.HijrahChronology getChronology();
method public java.time.chrono.HijrahEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isLeapYear();
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.HijrahDate now();
method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
method public static java.time.chrono.HijrahDate now(java.time.Clock);
method public static java.time.chrono.HijrahDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
}
public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
method public int getValue();
method public static java.time.chrono.HijrahEra of(int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
method public static final java.time.chrono.HijrahEra[] values();
enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -62460,6 +62716,7 @@ package java.time.chrono {
method public java.time.Period period(int, int, int);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -62492,6 +62749,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -62503,17 +62761,19 @@ package java.time.chrono {
method public java.time.chrono.JapaneseChronology getChronology();
method public java.time.chrono.JapaneseEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isSupported(java.time.temporal.TemporalField);
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.JapaneseDate now();
method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
method public static java.time.chrono.JapaneseDate now(java.time.Clock);
method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
method public static java.time.chrono.JapaneseDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
}
public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -62545,6 +62805,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -62557,13 +62818,17 @@ package java.time.chrono {
method public java.time.chrono.MinguoEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.MinguoDate now();
method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
method public static java.time.chrono.MinguoDate now(java.time.Clock);
method public static java.time.chrono.MinguoDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
}
public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -62593,6 +62858,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -62605,13 +62871,17 @@ package java.time.chrono {
method public java.time.chrono.ThaiBuddhistEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.ThaiBuddhistDate now();
method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
}
public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -62790,7 +63060,6 @@ package java.time.temporal {
method public int checkValidIntValue(long);
method public long checkValidValue(long);
method public java.time.temporal.TemporalUnit getBaseUnit();
- method public java.lang.String getDisplayName(java.util.Locale);
method public long getFrom(java.time.temporal.TemporalAccessor);
method public java.time.temporal.TemporalUnit getRangeUnit();
method public boolean isDateBased();
@@ -62838,7 +63107,6 @@ package java.time.temporal {
method public java.time.Duration getDuration();
method public boolean isDateBased();
method public boolean isDurationEstimated();
- method public boolean isSupportedBy(java.time.temporal.Temporal);
method public boolean isTimeBased();
method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
method public static final java.time.temporal.ChronoUnit[] values();
@@ -63178,7 +63446,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -63189,11 +63456,7 @@ package java.util {
method public void ensureCapacity(int);
method public void forEach(java.util.function.Consumer<? super E>);
method public E get(int);
- method public boolean removeIf(java.util.function.Predicate<? super E>);
- method public void replaceAll(java.util.function.UnaryOperator<E>);
method public int size();
- method public void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
method public void trimToSize();
}
@@ -63564,6 +63827,7 @@ package java.util {
method public default boolean removeIf(java.util.function.Predicate<? super E>);
method public abstract boolean retainAll(java.util.Collection<?>);
method public abstract int size();
+ method public default java.util.Spliterator<E> spliterator();
method public default java.util.stream.Stream<E> stream();
method public abstract java.lang.Object[] toArray();
method public abstract <T> T[] toArray(T[]);
@@ -63904,18 +64168,7 @@ package java.util {
ctor public HashMap();
ctor public HashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -63926,7 +64179,6 @@ package java.util {
method public java.lang.Object clone();
method public java.util.Iterator<E> iterator();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -63944,9 +64196,11 @@ package java.util {
method public boolean containsValue(java.lang.Object);
method public synchronized java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public synchronized V get(java.lang.Object);
method public synchronized V getOrDefault(java.lang.Object, V);
+ method public synchronized int hashCode();
method public synchronized boolean isEmpty();
method public java.util.Set<K> keySet();
method public synchronized java.util.Enumeration<K> keys();
@@ -63961,6 +64215,7 @@ package java.util {
method public synchronized V replace(K, V);
method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public synchronized int size();
+ method public synchronized java.lang.String toString();
method public java.util.Collection<V> values();
}
@@ -63970,8 +64225,6 @@ package java.util {
ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -64082,7 +64335,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface List<E> implements java.util.Collection {
@@ -64705,6 +64957,7 @@ package java.util {
ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
method public int getOffset(int, int, int, int, int, int);
method public int getRawOffset();
+ method public synchronized int hashCode();
method public boolean inDaylightTime(java.util.Date);
method public void setDSTSavings(int);
method public void setEndRule(int, int, int, int);
@@ -64977,7 +65230,6 @@ package java.util {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public java.util.NavigableMap<K, V> headMap(K, boolean);
method public java.util.SortedMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -64989,9 +65241,6 @@ package java.util {
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.SortedMap<K, V> subMap(K, K);
method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -65019,7 +65268,6 @@ package java.util {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.SortedSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65056,30 +65304,49 @@ package java.util {
ctor public Vector(int);
ctor public Vector();
ctor public Vector(java.util.Collection<? extends E>);
+ method public synchronized boolean add(E);
+ method public synchronized boolean addAll(java.util.Collection<? extends E>);
+ method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
method public synchronized void addElement(E);
method public synchronized int capacity();
method public synchronized java.lang.Object clone();
+ method public synchronized boolean containsAll(java.util.Collection<?>);
method public synchronized void copyInto(java.lang.Object[]);
method public synchronized E elementAt(int);
method public java.util.Enumeration<E> elements();
method public synchronized void ensureCapacity(int);
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized E firstElement();
method public synchronized void forEach(java.util.function.Consumer<? super E>);
method public synchronized E get(int);
+ method public synchronized int hashCode();
method public synchronized int indexOf(java.lang.Object, int);
method public synchronized void insertElementAt(E, int);
+ method public synchronized boolean isEmpty();
+ method public synchronized java.util.Iterator<E> iterator();
method public synchronized E lastElement();
+ method public synchronized int lastIndexOf(java.lang.Object);
method public synchronized int lastIndexOf(java.lang.Object, int);
+ method public synchronized java.util.ListIterator<E> listIterator(int);
+ method public synchronized java.util.ListIterator<E> listIterator();
+ method public synchronized E remove(int);
+ method public synchronized boolean removeAll(java.util.Collection<?>);
method public synchronized void removeAllElements();
method public synchronized boolean removeElement(java.lang.Object);
method public synchronized void removeElementAt(int);
method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+ method protected synchronized void removeRange(int, int);
method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+ method public synchronized boolean retainAll(java.util.Collection<?>);
+ method public synchronized E set(int, E);
method public synchronized void setElementAt(E, int);
method public synchronized void setSize(int);
method public synchronized int size();
method public synchronized void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
+ method public synchronized java.util.List<E> subList(int, int);
+ method public synchronized java.lang.Object[] toArray();
+ method public synchronized <T> T[] toArray(T[]);
+ method public synchronized java.lang.String toString();
method public synchronized void trimToSize();
field protected int capacityIncrement;
field protected int elementCount;
@@ -65092,8 +65359,6 @@ package java.util {
ctor public WeakHashMap();
ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
}
@@ -65128,7 +65393,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -65319,13 +65583,9 @@ package java.util.concurrent {
ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
ctor public ConcurrentHashMap(int, float);
ctor public ConcurrentHashMap(int, float, int);
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public boolean contains(java.lang.Object);
method public java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -65334,14 +65594,11 @@ package java.util.concurrent {
method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachValue(long, java.util.function.Consumer<? super V>);
method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
method public java.util.Enumeration<K> keys();
method public long mappingCount();
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
- method public V putIfAbsent(K, V);
method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -65361,10 +65618,6 @@ package java.util.concurrent {
method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -65425,7 +65678,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -65436,7 +65688,6 @@ package java.util.concurrent {
method public E peek();
method public E poll();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -65468,9 +65719,6 @@ package java.util.concurrent {
method public K ceilingKey(K);
method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
method public java.util.Comparator<? super K> comparator();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableSet<K> descendingKeySet();
method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -65478,25 +65726,18 @@ package java.util.concurrent {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
method public K higherKey(K);
+ method public java.util.NavigableSet<K> keySet();
method public java.util.Map.Entry<K, V> lastEntry();
method public K lastKey();
method public java.util.Map.Entry<K, V> lowerEntry(K);
method public K lowerKey(K);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -65524,7 +65765,6 @@ package java.util.concurrent {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.NavigableSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65571,9 +65811,7 @@ package java.util.concurrent {
ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
method public void forEach(java.util.function.Consumer<? super E>);
method public java.util.Iterator<E> iterator();
- method public boolean removeIf(java.util.function.Predicate<? super E>);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class CountDownLatch {
@@ -65732,6 +65970,7 @@ package java.util.concurrent {
method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
method public boolean hasQueuedSubmissions();
method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
method public boolean isQuiescent();
method public boolean isShutdown();
method public boolean isTerminated();
@@ -65741,6 +65980,9 @@ package java.util.concurrent {
method public void shutdown();
method public java.util.List<java.lang.Runnable> shutdownNow();
method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+ method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
}
@@ -65864,7 +66106,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public E takeFirst() throws java.lang.InterruptedException;
method public E takeLast() throws java.lang.InterruptedException;
@@ -65885,7 +66126,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -65905,7 +66145,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public void transfer(E) throws java.lang.InterruptedException;
method public boolean tryTransfer(E);
@@ -65953,7 +66192,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -66057,7 +66295,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -66069,9 +66306,11 @@ package java.util.concurrent {
method public static java.util.concurrent.ThreadLocalRandom current();
method public double nextDouble(double);
method public double nextDouble(double, double);
+ method public double nextGaussian();
method public int nextInt(int, int);
method public long nextLong(long);
method public long nextLong(long, long);
+ method public void setSeed(long);
}
public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -66085,6 +66324,7 @@ package java.util.concurrent {
method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
method public void execute(java.lang.Runnable);
+ method protected void finalize();
method public int getActiveCount();
method public long getCompletedTaskCount();
method public int getCorePoolSize();
@@ -66955,8 +67195,11 @@ package java.util.jar {
ctor public JarFile(java.io.File) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+ method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+ method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
method public java.util.jar.JarEntry getJarEntry(java.lang.String);
method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+ method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
}
@@ -67036,6 +67279,8 @@ package java.util.logging {
public class ConsoleHandler extends java.util.logging.StreamHandler {
ctor public ConsoleHandler();
+ method public void close();
+ method public void publish(java.util.logging.LogRecord);
}
public class ErrorManager {
@@ -67825,6 +68070,7 @@ package java.util.zip {
method public int deflate(byte[]);
method public int deflate(byte[], int, int, int);
method public void end();
+ method protected void finalize();
method public void finish();
method public boolean finished();
method public int getAdler();
@@ -67857,6 +68103,8 @@ package java.util.zip {
ctor public DeflaterInputStream(java.io.InputStream);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
field protected final byte[] buf;
field protected final java.util.zip.Deflater def;
}
@@ -67887,6 +68135,7 @@ package java.util.zip {
ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected java.util.zip.CRC32 crc;
}
@@ -67894,6 +68143,7 @@ package java.util.zip {
ctor public Inflater(boolean);
ctor public Inflater();
method public void end();
+ method protected void finalize();
method public boolean finished();
method public int getAdler();
method public long getBytesRead();
@@ -68020,6 +68270,7 @@ package java.util.zip {
ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
method public void close() throws java.io.IOException;
method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+ method protected void finalize() throws java.io.IOException;
method public java.lang.String getComment();
method public java.util.zip.ZipEntry getEntry(java.lang.String);
method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -68126,6 +68377,7 @@ package java.util.zip {
method public void setComment(java.lang.String);
method public void setLevel(int);
method public void setMethod(int);
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field public static final int CENATT = 36; // 0x24
field public static final int CENATX = 38; // 0x26
field public static final int CENCOM = 32; // 0x20
@@ -68282,6 +68534,7 @@ package javax.crypto {
public class ExemptionMechanism {
ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+ method protected void finalize();
method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -70670,6 +70923,7 @@ package javax.xml.transform {
ctor public TransformerException(java.lang.String, java.lang.Throwable);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
method public java.lang.String getLocationAsString();
method public javax.xml.transform.SourceLocator getLocator();
@@ -70940,6 +71194,7 @@ package javax.xml.xpath {
public class XPathException extends java.lang.Exception {
ctor public XPathException(java.lang.String);
ctor public XPathException(java.lang.Throwable);
+ method public java.lang.Throwable getCause();
}
public abstract interface XPathExpression {
diff --git a/api/system-current.txt b/api/system-current.txt
index e63a93c07cb0..648bb54ac711 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3293,6 +3293,7 @@ package android.animation {
public final class AnimatorSet extends android.animation.Animator {
ctor public AnimatorSet();
+ method public android.animation.AnimatorSet clone();
method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
method public long getCurrentPlayTime();
method public long getDuration();
@@ -3411,6 +3412,7 @@ package android.animation {
public final class ObjectAnimator extends android.animation.ValueAnimator {
ctor public ObjectAnimator();
+ method public android.animation.ObjectAnimator clone();
method public java.lang.String getPropertyName();
method public java.lang.Object getTarget();
method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3436,6 +3438,7 @@ package android.animation {
method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
method public void setAutoCancel(boolean);
+ method public android.animation.ObjectAnimator setDuration(long);
method public void setProperty(android.util.Property);
method public void setPropertyName(java.lang.String);
}
@@ -3517,6 +3520,7 @@ package android.animation {
ctor public ValueAnimator();
method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
method public static boolean areAnimatorsEnabled();
+ method public android.animation.ValueAnimator clone();
method public float getAnimatedFraction();
method public java.lang.Object getAnimatedValue();
method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -5141,6 +5145,7 @@ package android.app {
ctor public IntentService(java.lang.String);
method public android.os.IBinder onBind(android.content.Intent);
method protected abstract void onHandleIntent(android.content.Intent);
+ method public void onStart(android.content.Intent, int);
method public void setIntentRedelivery(boolean);
}
@@ -11853,6 +11858,7 @@ package android.content.res {
public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+ method public void mark(int);
}
public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -12160,6 +12166,7 @@ package android.database {
method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
method public void deactivate();
method public void fillWindow(int, android.database.CursorWindow);
+ method protected void finalize();
method public byte[] getBlob(int);
method public int getColumnCount();
method public int getColumnIndex(java.lang.String);
@@ -14634,6 +14641,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setOpacity(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
}
@@ -14714,6 +14722,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setAntiAlias(boolean);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setGravity(int);
method public void setMipMap(boolean);
method public void setTargetDensity(android.graphics.Canvas);
@@ -14839,6 +14848,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+ method public void setDither(boolean);
method public void setEnterFadeDuration(int);
method public void setExitFadeDuration(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14905,6 +14915,7 @@ package android.graphics.drawable {
method public void setColors(int[]);
method public void setCornerRadii(float[]);
method public void setCornerRadius(float);
+ method public void setDither(boolean);
method public void setGradientCenter(float, float);
method public void setGradientRadius(float);
method public void setGradientType(int);
@@ -14999,6 +15010,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setDrawable(int, android.graphics.drawable.Drawable);
method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
method public void setId(int, int);
@@ -15039,6 +15051,7 @@ package android.graphics.drawable {
method public android.graphics.Paint getPaint();
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setTargetDensity(android.graphics.Canvas);
method public void setTargetDensity(android.util.DisplayMetrics);
method public void setTargetDensity(int);
@@ -15101,6 +15114,7 @@ package android.graphics.drawable {
method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setIntrinsicHeight(int);
method public void setIntrinsicWidth(int);
method public void setPadding(int, int, int, int);
@@ -15142,27 +15156,32 @@ package android.graphics.drawable.shapes {
public class ArcShape extends android.graphics.drawable.shapes.RectShape {
ctor public ArcShape(float, float);
+ method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
method public final float getStartAngle();
method public final float getSweepAngle();
}
public class OvalShape extends android.graphics.drawable.shapes.RectShape {
ctor public OvalShape();
+ method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
}
public class PathShape extends android.graphics.drawable.shapes.Shape {
ctor public PathShape(android.graphics.Path, float, float);
+ method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
}
public class RectShape extends android.graphics.drawable.shapes.Shape {
ctor public RectShape();
+ method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
method protected final android.graphics.RectF rect();
}
public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+ method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
}
public abstract class Shape implements java.lang.Cloneable {
@@ -15247,6 +15266,7 @@ package android.hardware {
method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
method public final void cancelAutoFocus();
method public final boolean enableShutterSound(boolean);
+ method protected void finalize();
method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
method public static int getNumberOfCameras();
method public android.hardware.Camera.Parameters getParameters();
@@ -15864,6 +15884,7 @@ package android.hardware.camera2 {
method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+ method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -16224,6 +16245,7 @@ package android.hardware.camera2 {
public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
method public int describeContents();
method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+ method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
method public java.lang.Object getTag();
method public boolean isReprocess();
method public void writeToParcel(android.os.Parcel, int);
@@ -16302,6 +16324,7 @@ package android.hardware.camera2 {
public class CaptureResult extends android.hardware.camera2.CameraMetadata {
method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
method public long getFrameNumber();
+ method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
method public android.hardware.camera2.CaptureRequest getRequest();
method public int getSequenceId();
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -19451,6 +19474,7 @@ package android.icu.text {
}
public class DateIntervalFormat extends android.icu.text.UFormat {
+ method public synchronized java.lang.Object clone();
method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -20234,6 +20258,7 @@ package android.icu.text {
public final class RuleBasedCollator extends android.icu.text.Collator {
ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+ method public android.icu.text.RuleBasedCollator cloneAsThawed();
method public int compare(java.lang.String, java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -20260,6 +20285,7 @@ package android.icu.text {
method public void setFrenchCollation(boolean);
method public void setFrenchCollationDefault();
method public void setLowerCaseFirst(boolean);
+ method public android.icu.text.RuleBasedCollator setMaxVariable(int);
method public void setNumericCollation(boolean);
method public void setNumericCollationDefault();
method public void setStrengthDefault();
@@ -23112,6 +23138,7 @@ package android.media {
ctor public AudioRecord(android.media.AudioAttributes, android.media.AudioFormat, int, int) throws java.lang.IllegalArgumentException;
method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+ method protected void finalize();
method public int getAudioFormat();
method public int getAudioSessionId();
method public int getAudioSource();
@@ -23218,6 +23245,7 @@ package android.media {
method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
method public int attachAuxEffect(int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+ method protected void finalize();
method public void flush();
method public int getAudioFormat();
method public int getAudioSessionId();
@@ -23616,6 +23644,7 @@ package android.media {
method public boolean clearQueue();
method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
method public boolean closeJetFile();
+ method protected void finalize();
method public static android.media.JetPlayer getJetPlayer();
method public static int getMaxTracks();
method public boolean loadJetFile(java.lang.String);
@@ -23655,6 +23684,7 @@ package android.media {
ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+ method protected void finalize();
method public static boolean isSystemIdSupported(int);
method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -23711,6 +23741,7 @@ package android.media {
method public static android.view.Surface createPersistentInputSurface();
method public final int dequeueInputBuffer(long);
method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+ method protected void finalize();
method public final void flush();
method public android.media.MediaCodecInfo getCodecInfo();
method public java.nio.ByteBuffer getInputBuffer(int);
@@ -24122,6 +24153,7 @@ package android.media {
public final class MediaCrypto {
ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+ method protected void finalize();
method public static final boolean isCryptoSchemeSupported(java.util.UUID);
method public final void release();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -24142,6 +24174,7 @@ package android.media {
ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+ method protected void finalize();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
method public final void setMediaCasSession(android.media.MediaCas.Session);
}
@@ -24184,6 +24217,7 @@ package android.media {
public final class MediaDrm {
ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
method public void closeSession(byte[]);
+ method protected void finalize();
method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
method public byte[] getPropertyByteArray(java.lang.String);
@@ -24280,6 +24314,7 @@ package android.media {
public final class MediaExtractor {
ctor public MediaExtractor();
method public boolean advance();
+ method protected void finalize();
method public long getCachedDuration();
method public android.media.MediaExtractor.CasInfo getCasInfo(int);
method public android.media.DrmInitData getDrmInitData();
@@ -24581,6 +24616,7 @@ package android.media {
method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
method public void deselectTrack(int) throws java.lang.IllegalStateException;
+ method protected void finalize();
method public int getAudioSessionId();
method public int getCurrentPosition();
method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -24776,6 +24812,7 @@ package android.media {
public class MediaRecorder {
ctor public MediaRecorder();
+ method protected void finalize();
method public static final int getAudioSourceMax();
method public int getMaxAmplitude() throws java.lang.IllegalStateException;
method public android.os.PersistableBundle getMetrics();
@@ -25049,6 +25086,7 @@ package android.media {
public final class MediaSync {
ctor public MediaSync();
method public final android.view.Surface createInputSurface();
+ method protected void finalize();
method public void flush();
method public android.media.PlaybackParams getPlaybackParams();
method public android.media.SyncParams getSyncParams();
@@ -25177,6 +25215,10 @@ package android.media {
public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
method public synchronized void apply();
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
}
@@ -25223,6 +25265,7 @@ package android.media {
}
public class Ringtone {
+ method protected void finalize();
method public android.media.AudioAttributes getAudioAttributes();
method public deprecated int getStreamType();
method public java.lang.String getTitle(android.content.Context);
@@ -25276,6 +25319,7 @@ package android.media {
ctor public deprecated SoundPool(int, int, int);
method public final void autoPause();
method public final void autoResume();
+ method protected void finalize();
method public int load(java.lang.String, int);
method public int load(android.content.Context, int, int);
method public int load(android.content.res.AssetFileDescriptor, int);
@@ -25344,6 +25388,7 @@ package android.media {
public class ToneGenerator {
ctor public ToneGenerator(int, int);
+ method protected void finalize();
method public final int getAudioSessionId();
method public void release();
method public boolean startTone(int);
@@ -25476,6 +25521,7 @@ package android.media {
public final class VolumeShaper implements java.lang.AutoCloseable {
method public void apply(android.media.VolumeShaper.Operation);
method public void close();
+ method protected void finalize();
method public float getVolume();
method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
}
@@ -25530,6 +25576,7 @@ package android.media.audiofx {
}
public class AudioEffect {
+ method protected void finalize();
method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
method public boolean getEnabled() throws java.lang.IllegalStateException;
method public int getId() throws java.lang.IllegalStateException;
@@ -25782,6 +25829,7 @@ package android.media.audiofx {
public class Visualizer {
ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+ method protected void finalize();
method public int getCaptureSize() throws java.lang.IllegalStateException;
method public static int[] getCaptureSizeRange();
method public boolean getEnabled();
@@ -33302,6 +33350,7 @@ package android.os {
method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
method public void readFromParcel(android.os.Parcel);
method public void setClassLoader(java.lang.ClassLoader);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
field public static final android.os.Bundle EMPTY;
@@ -33543,6 +33592,7 @@ package android.os {
public abstract class FileObserver {
ctor public FileObserver(java.lang.String);
ctor public FileObserver(java.lang.String, int);
+ method protected void finalize();
method public abstract void onEvent(int, java.lang.String);
method public void startWatching();
method public void stopWatching();
@@ -33717,6 +33767,7 @@ package android.os {
ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
method public void close();
+ method protected void finalize();
method public java.io.InputStream getInputStream();
method public java.io.OutputStream getOutputStream();
method public boolean isPurgingAllowed();
@@ -34016,6 +34067,7 @@ package android.os {
method public int describeContents();
method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
field public static final android.os.PersistableBundle EMPTY;
@@ -38653,6 +38705,7 @@ package android.renderscript {
method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+ method public synchronized void resize(int);
method public void setFace(android.renderscript.Type.CubemapFace);
method public void setLOD(int);
method public void setX(int);
@@ -43786,6 +43839,7 @@ package android.telephony.gsm {
public static deprecated class SmsMessage.SubmitPdu {
ctor public deprecated SmsMessage.SubmitPdu();
+ method public deprecated java.lang.String toString();
field public deprecated byte[] encodedMessage;
field public deprecated byte[] encodedScAddress;
}
@@ -43858,6 +43912,7 @@ package android.test {
method public java.util.List<junit.framework.TestCase> getTestCases();
method public java.lang.String getTestClassName();
method public junit.framework.TestResult getTestResult();
+ method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
method protected void runFailed(java.lang.String);
method public void runTest();
method public void runTest(junit.framework.TestResult);
@@ -44118,10 +44173,12 @@ package android.test.mock {
ctor protected MockContentProvider();
ctor public MockContentProvider(android.content.Context);
ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+ method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
method public java.lang.String getType(android.net.Uri);
method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
method public boolean onCreate();
+ method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
@@ -44416,6 +44473,10 @@ package android.test.mock {
public deprecated class MockResources extends android.content.res.Resources {
ctor public MockResources();
+ method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+ method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+ method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+ method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
}
}
@@ -45664,6 +45725,7 @@ package android.text.style {
public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
ctor public MetricAffectingSpan();
+ method public android.text.style.MetricAffectingSpan getUnderlying();
method public abstract void updateMeasureState(android.text.TextPaint);
}
@@ -46344,14 +46406,28 @@ package android.transition {
public class TransitionSet extends android.transition.Transition {
ctor public TransitionSet();
ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+ method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet addTarget(android.view.View);
+ method public android.transition.TransitionSet addTarget(int);
+ method public android.transition.TransitionSet addTarget(java.lang.String);
+ method public android.transition.TransitionSet addTarget(java.lang.Class);
method public android.transition.TransitionSet addTransition(android.transition.Transition);
method public void captureEndValues(android.transition.TransitionValues);
method public void captureStartValues(android.transition.TransitionValues);
+ method public android.transition.TransitionSet clone();
method public int getOrdering();
method public android.transition.Transition getTransitionAt(int);
method public int getTransitionCount();
+ method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet removeTarget(int);
+ method public android.transition.TransitionSet removeTarget(android.view.View);
+ method public android.transition.TransitionSet removeTarget(java.lang.Class);
+ method public android.transition.TransitionSet removeTarget(java.lang.String);
method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+ method public android.transition.TransitionSet setDuration(long);
+ method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
method public android.transition.TransitionSet setOrdering(int);
+ method public android.transition.TransitionSet setStartDelay(long);
field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
field public static final int ORDERING_TOGETHER = 0; // 0x0
}
@@ -46516,6 +46592,9 @@ package android.util {
public class Base64InputStream extends java.io.FilterInputStream {
ctor public Base64InputStream(java.io.InputStream, int);
+ method public int available();
+ method public void mark(int);
+ method public void reset();
}
public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -48633,6 +48712,7 @@ package android.view {
method public android.graphics.Canvas lockCanvas();
method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
method protected final void onDraw(android.graphics.Canvas);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setOpaque(boolean);
method public void setSurfaceTexture(android.graphics.SurfaceTexture);
method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -49656,6 +49736,7 @@ package android.view {
method public int getLayoutMode();
method public android.animation.LayoutTransition getLayoutTransition();
method public int getNestedScrollAxes();
+ method public android.view.ViewGroupOverlay getOverlay();
method public int getPersistentDrawingCache();
method public boolean getTouchscreenBlocksFocus();
method public int indexOfChild(android.view.View);
@@ -50086,6 +50167,7 @@ package android.view {
method public final boolean isActive();
method public abstract boolean isFloating();
method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+ method public boolean isWideColorGamut();
method public final void makeActive();
method protected abstract void onActive();
method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -50938,6 +51020,7 @@ package android.view.animation {
ctor public Animation(android.content.Context, android.util.AttributeSet);
method protected void applyTransformation(float, android.view.animation.Transformation);
method public void cancel();
+ method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
method public long computeDurationHint();
method protected void ensureInterpolator();
method public int getBackgroundColor();
@@ -51009,6 +51092,7 @@ package android.view.animation {
ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
ctor public AnimationSet(boolean);
method public void addAnimation(android.view.animation.Animation);
+ method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
method public java.util.List<android.view.animation.Animation> getAnimations();
}
@@ -51864,6 +51948,10 @@ package android.webkit {
public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
method public static android.webkit.CookieSyncManager getInstance();
+ method public deprecated void resetSync();
+ method public deprecated void startSync();
+ method public deprecated void stopSync();
+ method public deprecated void sync();
method protected deprecated void syncFromRamToFlash();
field protected static final java.lang.String LOGTAG = "websync";
field protected android.webkit.WebViewDatabase mDataBase;
@@ -52505,6 +52593,7 @@ package android.webkit {
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public static void setWebContentsDebuggingEnabled(boolean);
method public void setWebViewClient(android.webkit.WebViewClient);
+ method public deprecated boolean shouldDelayChildPressedState();
method public deprecated boolean showFindDialog(java.lang.String, boolean);
method public static void shutdownSafeBrowsing();
method public void stopLoading();
@@ -52910,6 +52999,7 @@ package android.widget {
method public void clearTextFilter();
method public void deferNotifyDataSetChanged();
method public void fling(int);
+ method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCacheColorHint();
method public int getCheckedItemCount();
method public long[] getCheckedItemIds();
@@ -53076,6 +53166,9 @@ package android.widget {
ctor public ActionMenuView(android.content.Context);
ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
method public void dismissPopupMenus();
+ method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public android.view.Menu getMenu();
method public android.graphics.drawable.Drawable getOverflowIcon();
method public int getPopupTheme();
@@ -53251,7 +53344,6 @@ package android.widget {
method public void addAll(T...);
method public void clear();
method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
- method public java.lang.CharSequence[] getAutofillOptions();
method public android.content.Context getContext();
method public int getCount();
method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -53341,6 +53433,7 @@ package android.widget {
method public void notifyDataSetChanged();
method public void notifyDataSetInvalidated();
method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void setAutofillOptions(java.lang.CharSequence...);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
}
@@ -53619,6 +53712,7 @@ package android.widget {
ctor public EditText(android.content.Context, android.util.AttributeSet, int);
ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
method public void extendSelection(int);
+ method public android.text.Editable getText();
method public void selectAll();
method public void setSelection(int, int);
method public void setSelection(int);
@@ -53740,6 +53834,8 @@ package android.widget {
ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
method public boolean getMeasureAllChildren();
method protected void onLayout(boolean, int, int, int, int);
@@ -53786,6 +53882,9 @@ package android.widget {
ctor public GridLayout(android.content.Context, android.util.AttributeSet);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getAlignmentMode();
method public int getColumnCount();
method public int getOrientation();
@@ -53998,6 +54097,9 @@ package android.widget {
ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getBaselineAlignedChildIndex();
method public android.graphics.drawable.Drawable getDividerDrawable();
method public int getDividerPadding();
@@ -54384,6 +54486,8 @@ package android.widget {
method public final synchronized void incrementSecondaryProgressBy(int);
method public boolean isAnimating();
method public synchronized boolean isIndeterminate();
+ method protected synchronized void onDraw(android.graphics.Canvas);
+ method protected synchronized void onMeasure(int, int);
method public void onRestoreInstanceState(android.os.Parcelable);
method public android.os.Parcelable onSaveInstanceState();
method public synchronized void setIndeterminate(boolean);
@@ -54439,6 +54543,7 @@ package android.widget {
ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
method public void check(int);
method public void clearCheck();
+ method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCheckedRadioButtonId();
method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
}
@@ -54481,6 +54586,7 @@ package android.widget {
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getGravity();
method protected void onLayout(boolean, int, int, int, int);
method public void setGravity(int);
@@ -55024,6 +55130,7 @@ package android.widget {
public class TableLayout extends android.widget.LinearLayout {
ctor public TableLayout(android.content.Context);
ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public boolean isColumnCollapsed(int);
method public boolean isColumnShrinkable(int);
method public boolean isColumnStretchable(int);
@@ -55048,6 +55155,7 @@ package android.widget {
public class TableRow extends android.widget.LinearLayout {
ctor public TableRow(android.content.Context);
ctor public TableRow(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public android.view.View getVirtualChildAt(int);
method public int getVirtualChildCount();
}
@@ -55389,6 +55497,7 @@ package android.widget {
ctor public ToggleButton(android.content.Context);
method public java.lang.CharSequence getTextOff();
method public java.lang.CharSequence getTextOn();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setTextOff(java.lang.CharSequence);
method public void setTextOn(java.lang.CharSequence);
}
@@ -55400,6 +55509,9 @@ package android.widget {
ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
method public void collapseActionView();
method public void dismissPopupMenus();
+ method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getContentInsetEnd();
method public int getContentInsetEndWithActions();
method public int getContentInsetLeft();
@@ -55921,6 +56033,8 @@ package dalvik.system {
public class BaseDexClassLoader extends java.lang.ClassLoader {
ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
method public java.lang.String findLibrary(java.lang.String);
+ method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+ method protected synchronized java.lang.Package getPackage(java.lang.String);
}
public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -56142,6 +56256,10 @@ package java.io {
public class BufferedInputStream extends java.io.FilterInputStream {
ctor public BufferedInputStream(java.io.InputStream);
ctor public BufferedInputStream(java.io.InputStream, int);
+ method public synchronized int available() throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
+ method public synchronized long skip(long) throws java.io.IOException;
field protected volatile byte[] buf;
field protected int count;
field protected int marklimit;
@@ -56152,6 +56270,9 @@ package java.io {
public class BufferedOutputStream extends java.io.FilterOutputStream {
ctor public BufferedOutputStream(java.io.OutputStream);
ctor public BufferedOutputStream(java.io.OutputStream, int);
+ method public synchronized void flush() throws java.io.IOException;
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
}
@@ -56177,7 +56298,12 @@ package java.io {
public class ByteArrayInputStream extends java.io.InputStream {
ctor public ByteArrayInputStream(byte[]);
ctor public ByteArrayInputStream(byte[], int, int);
+ method public synchronized int available();
+ method public void mark(int);
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected byte[] buf;
field protected int count;
field protected int mark;
@@ -56190,9 +56316,11 @@ package java.io {
method public synchronized void reset();
method public synchronized int size();
method public synchronized byte[] toByteArray();
+ method public synchronized java.lang.String toString();
method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
method public deprecated synchronized java.lang.String toString(int);
method public synchronized void write(int);
+ method public synchronized void write(byte[], int, int);
method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
@@ -56212,12 +56340,17 @@ package java.io {
public class CharArrayWriter extends java.io.Writer {
ctor public CharArrayWriter();
ctor public CharArrayWriter(int);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+ method public java.io.CharArrayWriter append(char);
method public void close();
method public void flush();
method public void reset();
method public int size();
method public char[] toCharArray();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String, int, int);
method public void writeTo(java.io.Writer) throws java.io.IOException;
field protected char[] buf;
field protected int count;
@@ -56304,6 +56437,8 @@ package java.io {
public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
ctor public DataOutputStream(java.io.OutputStream);
method public final int size();
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
method public final void writeBoolean(boolean) throws java.io.IOException;
method public final void writeByte(int) throws java.io.IOException;
method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -56403,6 +56538,7 @@ package java.io {
ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public int read() throws java.io.IOException;
@@ -56419,6 +56555,7 @@ package java.io {
ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
@@ -56532,6 +56669,8 @@ package java.io {
public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
ctor public LineNumberInputStream(java.io.InputStream);
method public int getLineNumber();
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
method public void setLineNumber(int);
}
@@ -56761,8 +56900,10 @@ package java.io {
ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
ctor public PipedInputStream();
ctor public PipedInputStream(int);
+ method public synchronized int available() throws java.io.IOException;
method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
method protected synchronized void receive(int) throws java.io.IOException;
field protected static final int PIPE_SIZE = 1024; // 0x400
field protected byte[] buffer;
@@ -56774,6 +56915,7 @@ package java.io {
ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
ctor public PipedOutputStream();
method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+ method public synchronized void flush() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
}
@@ -56784,7 +56926,9 @@ package java.io {
ctor public PipedReader(int);
method public void close() throws java.io.IOException;
method public void connect(java.io.PipedWriter) throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
method public synchronized int read(char[], int, int) throws java.io.IOException;
+ method public synchronized boolean ready() throws java.io.IOException;
}
public class PipedWriter extends java.io.Writer {
@@ -56809,6 +56953,8 @@ package java.io {
method public java.io.PrintStream append(char);
method public boolean checkError();
method protected void clearError();
+ method public void close();
+ method public void flush();
method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
method public void print(boolean);
@@ -56833,6 +56979,8 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
+ method public void write(byte[], int, int);
}
public class PrintWriter extends java.io.Writer {
@@ -56844,6 +56992,9 @@ package java.io {
ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+ method public java.io.PrintWriter append(java.lang.CharSequence);
+ method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+ method public java.io.PrintWriter append(char);
method public boolean checkError();
method protected void clearError();
method public void close();
@@ -56872,13 +57023,18 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(char[]);
+ method public void write(java.lang.String, int, int);
+ method public void write(java.lang.String);
field protected java.io.Writer out;
}
public class PushbackInputStream extends java.io.FilterInputStream {
ctor public PushbackInputStream(java.io.InputStream, int);
ctor public PushbackInputStream(java.io.InputStream);
+ method public synchronized void close() throws java.io.IOException;
method public void unread(int) throws java.io.IOException;
method public void unread(byte[], int, int) throws java.io.IOException;
method public void unread(byte[]) throws java.io.IOException;
@@ -57002,7 +57158,11 @@ package java.io {
public deprecated class StringBufferInputStream extends java.io.InputStream {
ctor public StringBufferInputStream(java.lang.String);
+ method public synchronized int available();
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected java.lang.String buffer;
field protected int count;
field protected int pos;
@@ -57017,10 +57177,16 @@ package java.io {
public class StringWriter extends java.io.Writer {
ctor public StringWriter();
ctor public StringWriter(int);
+ method public java.io.StringWriter append(java.lang.CharSequence);
+ method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+ method public java.io.StringWriter append(char);
method public void close() throws java.io.IOException;
method public void flush();
method public java.lang.StringBuffer getBuffer();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String);
+ method public void write(java.lang.String, int, int);
}
public class SyncFailedException extends java.io.IOException {
@@ -57035,6 +57201,7 @@ package java.io {
public class UncheckedIOException extends java.lang.RuntimeException {
ctor public UncheckedIOException(java.lang.String, java.io.IOException);
ctor public UncheckedIOException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class UnsupportedEncodingException extends java.io.IOException {
@@ -57044,6 +57211,7 @@ package java.io {
public class WriteAbortedException extends java.io.ObjectStreamException {
ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+ method public java.lang.Throwable getCause();
field public java.lang.Exception detail;
}
@@ -57811,6 +57979,7 @@ package java.lang {
ctor public ClassNotFoundException();
ctor public ClassNotFoundException(java.lang.String);
ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -57915,6 +58084,7 @@ package java.lang {
ctor public ExceptionInInitializerError();
ctor public ExceptionInInitializerError(java.lang.Throwable);
ctor public ExceptionInInitializerError(java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -58702,8 +58872,16 @@ package java.lang {
method public synchronized java.lang.StringBuffer append(float);
method public synchronized java.lang.StringBuffer append(double);
method public synchronized java.lang.StringBuffer appendCodePoint(int);
+ method public synchronized int capacity();
+ method public synchronized char charAt(int);
+ method public synchronized int codePointAt(int);
+ method public synchronized int codePointBefore(int);
+ method public synchronized int codePointCount(int, int);
method public synchronized java.lang.StringBuffer delete(int, int);
method public synchronized java.lang.StringBuffer deleteCharAt(int);
+ method public synchronized void ensureCapacity(int);
+ method public synchronized void getChars(int, int, char[], int);
+ method public synchronized int indexOf(java.lang.String, int);
method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -58716,9 +58894,18 @@ package java.lang {
method public java.lang.StringBuffer insert(int, long);
method public java.lang.StringBuffer insert(int, float);
method public java.lang.StringBuffer insert(int, double);
+ method public synchronized int lastIndexOf(java.lang.String, int);
+ method public synchronized int length();
+ method public synchronized int offsetByCodePoints(int, int);
method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
method public synchronized java.lang.StringBuffer reverse();
+ method public synchronized void setCharAt(int, char);
+ method public synchronized void setLength(int);
+ method public synchronized java.lang.CharSequence subSequence(int, int);
+ method public synchronized java.lang.String substring(int);
+ method public synchronized java.lang.String substring(int, int);
method public synchronized java.lang.String toString();
+ method public synchronized void trimToSize();
}
public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -59373,6 +59560,7 @@ package java.lang.reflect {
ctor protected InvocationTargetException();
ctor public InvocationTargetException(java.lang.Throwable);
ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getTargetException();
}
@@ -59488,6 +59676,7 @@ package java.lang.reflect {
public class UndeclaredThrowableException extends java.lang.RuntimeException {
ctor public UndeclaredThrowableException(java.lang.Throwable);
ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getUndeclaredThrowable();
}
@@ -60385,6 +60574,7 @@ package java.net {
method public java.lang.String getQuery();
method public java.lang.String getRef();
method public java.lang.String getUserInfo();
+ method public synchronized int hashCode();
method public java.net.URLConnection openConnection() throws java.io.IOException;
method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -60614,7 +60804,6 @@ package java.nio {
method public final int arrayOffset();
method public abstract java.nio.CharBuffer asReadOnlyBuffer();
method public final char charAt(int);
- method public java.util.stream.IntStream chars();
method public abstract java.nio.CharBuffer compact();
method public int compareTo(java.nio.CharBuffer);
method public abstract java.nio.CharBuffer duplicate();
@@ -61471,6 +61660,7 @@ package java.nio.file {
public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
ctor public DirectoryIteratorException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -62436,9 +62626,11 @@ package java.security {
public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
ctor public KeyStore.PasswordProtection(char[]);
ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+ method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
method public synchronized char[] getPassword();
method public java.lang.String getProtectionAlgorithm();
method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+ method public synchronized boolean isDestroyed();
}
public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -62618,6 +62810,7 @@ package java.security {
public class PrivilegedActionException extends java.lang.Exception {
ctor public PrivilegedActionException(java.lang.Exception);
+ method public java.lang.Throwable getCause();
method public java.lang.Exception getException();
}
@@ -62640,22 +62833,30 @@ package java.security {
method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.util.Enumeration<java.lang.Object> elements();
+ method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+ method public java.lang.Object get(java.lang.Object);
method public java.lang.String getInfo();
method public java.lang.String getName();
method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
method public synchronized java.util.Set<java.security.Provider.Service> getServices();
method public double getVersion();
+ method public java.util.Set<java.lang.Object> keySet();
+ method public java.util.Enumeration<java.lang.Object> keys();
method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
method public synchronized void putAll(java.util.Map<?, ?>);
method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
method protected synchronized void putService(java.security.Provider.Service);
+ method public synchronized java.lang.Object remove(java.lang.Object);
method protected synchronized void removeService(java.security.Provider.Service);
method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.lang.String toString();
+ method public java.util.Collection<java.lang.Object> values();
}
public static class Provider.Service {
@@ -62701,7 +62902,9 @@ package java.security {
method public final java.security.Provider getProvider();
method public static byte[] getSeed(int);
method protected final int next(int);
+ method public synchronized void nextBytes(byte[]);
method public synchronized void setSeed(byte[]);
+ method public void setSeed(long);
}
public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -63248,6 +63451,7 @@ package java.security.cert {
public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
ctor protected PKIXRevocationChecker();
+ method public java.security.cert.PKIXRevocationChecker clone();
method public java.util.List<java.security.cert.Extension> getOcspExtensions();
method public java.net.URI getOcspResponder();
method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -65500,7 +65704,6 @@ package java.time {
public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -65508,8 +65711,6 @@ package java.time {
method public java.time.DayOfWeek minus(long);
method public static java.time.DayOfWeek of(int);
method public java.time.DayOfWeek plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.DayOfWeek valueOf(java.lang.String);
method public static final java.time.DayOfWeek[] values();
enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -65585,6 +65786,8 @@ package java.time {
method public boolean isBefore(java.time.Instant);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+ method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant minusMillis(long);
method public java.time.Instant minusNanos(long);
method public java.time.Instant minusSeconds(long);
@@ -65594,6 +65797,7 @@ package java.time {
method public static java.time.Instant ofEpochSecond(long);
method public static java.time.Instant ofEpochSecond(long, long);
method public static java.time.Instant parse(java.lang.CharSequence);
+ method public java.time.Instant plus(java.time.temporal.TemporalAmount);
method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant plusMillis(long);
method public java.time.Instant plusNanos(long);
@@ -65601,6 +65805,7 @@ package java.time {
method public long toEpochMilli();
method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
method public java.time.Instant with(java.time.temporal.TemporalField, long);
field public static final java.time.Instant EPOCH;
field public static final java.time.Instant MAX;
@@ -65610,6 +65815,7 @@ package java.time {
public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
method public java.time.LocalDateTime atStartOfDay();
method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+ method public java.time.LocalDateTime atTime(java.time.LocalTime);
method public java.time.LocalDateTime atTime(int, int);
method public java.time.LocalDateTime atTime(int, int, int);
method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -65624,6 +65830,8 @@ package java.time {
method public int getMonthValue();
method public int getYear();
method public int lengthOfMonth();
+ method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate minusDays(long);
method public java.time.LocalDate minusMonths(long);
method public java.time.LocalDate minusWeeks(long);
@@ -65637,12 +65845,16 @@ package java.time {
method public static java.time.LocalDate ofYearDay(int, int);
method public static java.time.LocalDate parse(java.lang.CharSequence);
method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate plusDays(long);
method public java.time.LocalDate plusMonths(long);
method public java.time.LocalDate plusWeeks(long);
method public java.time.LocalDate plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+ method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+ method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
method public java.time.LocalDate withDayOfMonth(int);
method public java.time.LocalDate withDayOfYear(int);
method public java.time.LocalDate withMonth(int);
@@ -65667,6 +65879,8 @@ package java.time {
method public int getSecond();
method public int getYear();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime minusDays(long);
method public java.time.LocalDateTime minusHours(long);
method public java.time.LocalDateTime minusMinutes(long);
@@ -65689,6 +65903,7 @@ package java.time {
method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.LocalDateTime parse(java.lang.CharSequence);
method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime plusDays(long);
method public java.time.LocalDateTime plusHours(long);
@@ -65702,6 +65917,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalDateTime withDayOfMonth(int);
method public java.time.LocalDateTime withDayOfYear(int);
@@ -65731,6 +65947,8 @@ package java.time {
method public boolean isBefore(java.time.LocalTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime minusHours(long);
method public java.time.LocalTime minusMinutes(long);
method public java.time.LocalTime minusNanos(long);
@@ -65745,6 +65963,7 @@ package java.time {
method public static java.time.LocalTime ofSecondOfDay(long);
method public static java.time.LocalTime parse(java.lang.CharSequence);
method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime plusHours(long);
method public java.time.LocalTime plusMinutes(long);
@@ -65754,6 +65973,7 @@ package java.time {
method public int toSecondOfDay();
method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalTime withHour(int);
method public java.time.LocalTime withMinute(int);
@@ -65770,7 +65990,6 @@ package java.time {
method public int firstDayOfYear(boolean);
method public java.time.Month firstMonthOfQuarter();
method public static java.time.Month from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -65781,8 +66000,6 @@ package java.time {
method public java.time.Month minus(long);
method public static java.time.Month of(int);
method public java.time.Month plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.Month valueOf(java.lang.String);
method public static final java.time.Month[] values();
enum_constant public static final java.time.Month APRIL;
@@ -65849,6 +66066,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetDateTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime minusDays(long);
method public java.time.OffsetDateTime minusHours(long);
method public java.time.OffsetDateTime minusMinutes(long);
@@ -65866,6 +66085,7 @@ package java.time {
method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime plusDays(long);
method public java.time.OffsetDateTime plusHours(long);
@@ -65885,6 +66105,7 @@ package java.time {
method public java.time.ZonedDateTime toZonedDateTime();
method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetDateTime withDayOfMonth(int);
method public java.time.OffsetDateTime withDayOfYear(int);
@@ -65917,6 +66138,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime minusHours(long);
method public java.time.OffsetTime minusMinutes(long);
method public java.time.OffsetTime minusNanos(long);
@@ -65929,6 +66152,7 @@ package java.time {
method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetTime parse(java.lang.CharSequence);
method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime plusHours(long);
method public java.time.OffsetTime plusMinutes(long);
@@ -65937,6 +66161,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetTime withHour(int);
method public java.time.OffsetTime withMinute(int);
@@ -65963,6 +66188,7 @@ package java.time {
method public java.time.Period minusMonths(long);
method public java.time.Period minusYears(long);
method public java.time.Period multipliedBy(int);
+ method public java.time.Period negated();
method public java.time.Period normalized();
method public static java.time.Period of(int, int, int);
method public static java.time.Period ofDays(int);
@@ -66001,6 +66227,8 @@ package java.time {
method public boolean isSupported(java.time.temporal.TemporalUnit);
method public boolean isValidMonthDay(java.time.MonthDay);
method public int length();
+ method public java.time.Year minus(java.time.temporal.TemporalAmount);
+ method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
method public java.time.Year minusYears(long);
method public static java.time.Year now();
method public static java.time.Year now(java.time.ZoneId);
@@ -66008,9 +66236,11 @@ package java.time {
method public static java.time.Year of(int);
method public static java.time.Year parse(java.lang.CharSequence);
method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.Year plus(java.time.temporal.TemporalAmount);
method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
method public java.time.Year plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Year with(java.time.temporal.TemporalAdjuster);
method public java.time.Year with(java.time.temporal.TemporalField, long);
field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -66035,6 +66265,8 @@ package java.time {
method public boolean isValidDay(int);
method public int lengthOfMonth();
method public int lengthOfYear();
+ method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+ method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth minusMonths(long);
method public java.time.YearMonth minusYears(long);
method public static java.time.YearMonth now();
@@ -66044,10 +66276,12 @@ package java.time {
method public static java.time.YearMonth of(int, int);
method public static java.time.YearMonth parse(java.lang.CharSequence);
method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth plusMonths(long);
method public java.time.YearMonth plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
method public java.time.YearMonth withMonth(int);
method public java.time.YearMonth withYear(int);
@@ -66071,7 +66305,6 @@ package java.time {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public int compareTo(java.time.ZoneOffset);
method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getId();
method public long getLong(java.time.temporal.TemporalField);
method public java.time.zone.ZoneRules getRules();
@@ -66082,8 +66315,6 @@ package java.time {
method public static java.time.ZoneOffset ofHoursMinutes(int, int);
method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
method public static java.time.ZoneOffset ofTotalSeconds(int);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
field public static final java.time.ZoneOffset MAX;
field public static final java.time.ZoneOffset MIN;
field public static final java.time.ZoneOffset UTC;
@@ -66104,6 +66335,8 @@ package java.time {
method public int getYear();
method public java.time.ZoneId getZone();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime minusDays(long);
method public java.time.ZonedDateTime minusHours(long);
method public java.time.ZonedDateTime minusMinutes(long);
@@ -66124,6 +66357,7 @@ package java.time {
method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime plusDays(long);
method public java.time.ZonedDateTime plusHours(long);
@@ -66133,10 +66367,12 @@ package java.time {
method public java.time.ZonedDateTime plusSeconds(long);
method public java.time.ZonedDateTime plusWeeks(long);
method public java.time.ZonedDateTime plusYears(long);
+ method public java.time.LocalDate toLocalDate();
method public java.time.LocalDateTime toLocalDateTime();
method public java.time.OffsetDateTime toOffsetDateTime();
method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
method public java.time.ZonedDateTime withDayOfMonth(int);
method public java.time.ZonedDateTime withDayOfYear(int);
@@ -66181,17 +66417,27 @@ package java.time.chrono {
method public default boolean isSupported(java.time.temporal.TemporalUnit);
method public abstract int lengthOfMonth();
method public default int lengthOfYear();
+ method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
method public default long toEpochDay();
method public abstract java.lang.String toString();
method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
}
abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+ method public D minus(java.time.temporal.TemporalAmount);
+ method public D minus(long, java.time.temporal.TemporalUnit);
+ method public D plus(java.time.temporal.TemporalAmount);
+ method public D plus(long, java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public D with(java.time.temporal.TemporalAdjuster);
+ method public D with(java.time.temporal.TemporalField, long);
}
public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -66208,6 +66454,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
method public default long toEpochSecond(java.time.ZoneOffset);
@@ -66215,6 +66464,7 @@ package java.time.chrono {
method public abstract D toLocalDate();
method public abstract java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
}
@@ -66252,6 +66502,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
method public default long toEpochSecond();
@@ -66260,6 +66513,7 @@ package java.time.chrono {
method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
method public default java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -66326,6 +66580,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -66337,23 +66592,24 @@ package java.time.chrono {
method public java.time.chrono.HijrahChronology getChronology();
method public java.time.chrono.HijrahEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isLeapYear();
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.HijrahDate now();
method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
method public static java.time.chrono.HijrahDate now(java.time.Clock);
method public static java.time.chrono.HijrahDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
}
public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
method public int getValue();
method public static java.time.chrono.HijrahEra of(int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
method public static final java.time.chrono.HijrahEra[] values();
enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -66378,6 +66634,7 @@ package java.time.chrono {
method public java.time.Period period(int, int, int);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -66410,6 +66667,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -66421,17 +66679,19 @@ package java.time.chrono {
method public java.time.chrono.JapaneseChronology getChronology();
method public java.time.chrono.JapaneseEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isSupported(java.time.temporal.TemporalField);
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.JapaneseDate now();
method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
method public static java.time.chrono.JapaneseDate now(java.time.Clock);
method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
method public static java.time.chrono.JapaneseDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
}
public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -66463,6 +66723,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -66475,13 +66736,17 @@ package java.time.chrono {
method public java.time.chrono.MinguoEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.MinguoDate now();
method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
method public static java.time.chrono.MinguoDate now(java.time.Clock);
method public static java.time.chrono.MinguoDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
}
public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -66511,6 +66776,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -66523,13 +66789,17 @@ package java.time.chrono {
method public java.time.chrono.ThaiBuddhistEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.ThaiBuddhistDate now();
method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
}
public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -66708,7 +66978,6 @@ package java.time.temporal {
method public int checkValidIntValue(long);
method public long checkValidValue(long);
method public java.time.temporal.TemporalUnit getBaseUnit();
- method public java.lang.String getDisplayName(java.util.Locale);
method public long getFrom(java.time.temporal.TemporalAccessor);
method public java.time.temporal.TemporalUnit getRangeUnit();
method public boolean isDateBased();
@@ -66756,7 +67025,6 @@ package java.time.temporal {
method public java.time.Duration getDuration();
method public boolean isDateBased();
method public boolean isDurationEstimated();
- method public boolean isSupportedBy(java.time.temporal.Temporal);
method public boolean isTimeBased();
method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
method public static final java.time.temporal.ChronoUnit[] values();
@@ -67096,7 +67364,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -67107,11 +67374,7 @@ package java.util {
method public void ensureCapacity(int);
method public void forEach(java.util.function.Consumer<? super E>);
method public E get(int);
- method public boolean removeIf(java.util.function.Predicate<? super E>);
- method public void replaceAll(java.util.function.UnaryOperator<E>);
method public int size();
- method public void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
method public void trimToSize();
}
@@ -67482,6 +67745,7 @@ package java.util {
method public default boolean removeIf(java.util.function.Predicate<? super E>);
method public abstract boolean retainAll(java.util.Collection<?>);
method public abstract int size();
+ method public default java.util.Spliterator<E> spliterator();
method public default java.util.stream.Stream<E> stream();
method public abstract java.lang.Object[] toArray();
method public abstract <T> T[] toArray(T[]);
@@ -67822,18 +68086,7 @@ package java.util {
ctor public HashMap();
ctor public HashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -67844,7 +68097,6 @@ package java.util {
method public java.lang.Object clone();
method public java.util.Iterator<E> iterator();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -67862,9 +68114,11 @@ package java.util {
method public boolean containsValue(java.lang.Object);
method public synchronized java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public synchronized V get(java.lang.Object);
method public synchronized V getOrDefault(java.lang.Object, V);
+ method public synchronized int hashCode();
method public synchronized boolean isEmpty();
method public java.util.Set<K> keySet();
method public synchronized java.util.Enumeration<K> keys();
@@ -67879,6 +68133,7 @@ package java.util {
method public synchronized V replace(K, V);
method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public synchronized int size();
+ method public synchronized java.lang.String toString();
method public java.util.Collection<V> values();
}
@@ -67888,8 +68143,6 @@ package java.util {
ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -68000,7 +68253,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface List<E> implements java.util.Collection {
@@ -68623,6 +68875,7 @@ package java.util {
ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
method public int getOffset(int, int, int, int, int, int);
method public int getRawOffset();
+ method public synchronized int hashCode();
method public boolean inDaylightTime(java.util.Date);
method public void setDSTSavings(int);
method public void setEndRule(int, int, int, int);
@@ -68895,7 +69148,6 @@ package java.util {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public java.util.NavigableMap<K, V> headMap(K, boolean);
method public java.util.SortedMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -68907,9 +69159,6 @@ package java.util {
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.SortedMap<K, V> subMap(K, K);
method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -68937,7 +69186,6 @@ package java.util {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.SortedSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -68974,30 +69222,49 @@ package java.util {
ctor public Vector(int);
ctor public Vector();
ctor public Vector(java.util.Collection<? extends E>);
+ method public synchronized boolean add(E);
+ method public synchronized boolean addAll(java.util.Collection<? extends E>);
+ method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
method public synchronized void addElement(E);
method public synchronized int capacity();
method public synchronized java.lang.Object clone();
+ method public synchronized boolean containsAll(java.util.Collection<?>);
method public synchronized void copyInto(java.lang.Object[]);
method public synchronized E elementAt(int);
method public java.util.Enumeration<E> elements();
method public synchronized void ensureCapacity(int);
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized E firstElement();
method public synchronized void forEach(java.util.function.Consumer<? super E>);
method public synchronized E get(int);
+ method public synchronized int hashCode();
method public synchronized int indexOf(java.lang.Object, int);
method public synchronized void insertElementAt(E, int);
+ method public synchronized boolean isEmpty();
+ method public synchronized java.util.Iterator<E> iterator();
method public synchronized E lastElement();
+ method public synchronized int lastIndexOf(java.lang.Object);
method public synchronized int lastIndexOf(java.lang.Object, int);
+ method public synchronized java.util.ListIterator<E> listIterator(int);
+ method public synchronized java.util.ListIterator<E> listIterator();
+ method public synchronized E remove(int);
+ method public synchronized boolean removeAll(java.util.Collection<?>);
method public synchronized void removeAllElements();
method public synchronized boolean removeElement(java.lang.Object);
method public synchronized void removeElementAt(int);
method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+ method protected synchronized void removeRange(int, int);
method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+ method public synchronized boolean retainAll(java.util.Collection<?>);
+ method public synchronized E set(int, E);
method public synchronized void setElementAt(E, int);
method public synchronized void setSize(int);
method public synchronized int size();
method public synchronized void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
+ method public synchronized java.util.List<E> subList(int, int);
+ method public synchronized java.lang.Object[] toArray();
+ method public synchronized <T> T[] toArray(T[]);
+ method public synchronized java.lang.String toString();
method public synchronized void trimToSize();
field protected int capacityIncrement;
field protected int elementCount;
@@ -69010,8 +69277,6 @@ package java.util {
ctor public WeakHashMap();
ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
}
@@ -69046,7 +69311,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -69237,13 +69501,9 @@ package java.util.concurrent {
ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
ctor public ConcurrentHashMap(int, float);
ctor public ConcurrentHashMap(int, float, int);
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public boolean contains(java.lang.Object);
method public java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -69252,14 +69512,11 @@ package java.util.concurrent {
method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachValue(long, java.util.function.Consumer<? super V>);
method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
method public java.util.Enumeration<K> keys();
method public long mappingCount();
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
- method public V putIfAbsent(K, V);
method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -69279,10 +69536,6 @@ package java.util.concurrent {
method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -69343,7 +69596,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -69354,7 +69606,6 @@ package java.util.concurrent {
method public E peek();
method public E poll();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -69386,9 +69637,6 @@ package java.util.concurrent {
method public K ceilingKey(K);
method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
method public java.util.Comparator<? super K> comparator();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableSet<K> descendingKeySet();
method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -69396,25 +69644,18 @@ package java.util.concurrent {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
method public K higherKey(K);
+ method public java.util.NavigableSet<K> keySet();
method public java.util.Map.Entry<K, V> lastEntry();
method public K lastKey();
method public java.util.Map.Entry<K, V> lowerEntry(K);
method public K lowerKey(K);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -69442,7 +69683,6 @@ package java.util.concurrent {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.NavigableSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -69489,9 +69729,7 @@ package java.util.concurrent {
ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
method public void forEach(java.util.function.Consumer<? super E>);
method public java.util.Iterator<E> iterator();
- method public boolean removeIf(java.util.function.Predicate<? super E>);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class CountDownLatch {
@@ -69650,6 +69888,7 @@ package java.util.concurrent {
method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
method public boolean hasQueuedSubmissions();
method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
method public boolean isQuiescent();
method public boolean isShutdown();
method public boolean isTerminated();
@@ -69659,6 +69898,9 @@ package java.util.concurrent {
method public void shutdown();
method public java.util.List<java.lang.Runnable> shutdownNow();
method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+ method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
}
@@ -69782,7 +70024,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public E takeFirst() throws java.lang.InterruptedException;
method public E takeLast() throws java.lang.InterruptedException;
@@ -69803,7 +70044,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -69823,7 +70063,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public void transfer(E) throws java.lang.InterruptedException;
method public boolean tryTransfer(E);
@@ -69871,7 +70110,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -69975,7 +70213,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -69987,9 +70224,11 @@ package java.util.concurrent {
method public static java.util.concurrent.ThreadLocalRandom current();
method public double nextDouble(double);
method public double nextDouble(double, double);
+ method public double nextGaussian();
method public int nextInt(int, int);
method public long nextLong(long);
method public long nextLong(long, long);
+ method public void setSeed(long);
}
public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -70003,6 +70242,7 @@ package java.util.concurrent {
method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
method public void execute(java.lang.Runnable);
+ method protected void finalize();
method public int getActiveCount();
method public long getCompletedTaskCount();
method public int getCorePoolSize();
@@ -70873,8 +71113,11 @@ package java.util.jar {
ctor public JarFile(java.io.File) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+ method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+ method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
method public java.util.jar.JarEntry getJarEntry(java.lang.String);
method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+ method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
}
@@ -70954,6 +71197,8 @@ package java.util.logging {
public class ConsoleHandler extends java.util.logging.StreamHandler {
ctor public ConsoleHandler();
+ method public void close();
+ method public void publish(java.util.logging.LogRecord);
}
public class ErrorManager {
@@ -71743,6 +71988,7 @@ package java.util.zip {
method public int deflate(byte[]);
method public int deflate(byte[], int, int, int);
method public void end();
+ method protected void finalize();
method public void finish();
method public boolean finished();
method public int getAdler();
@@ -71775,6 +72021,8 @@ package java.util.zip {
ctor public DeflaterInputStream(java.io.InputStream);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
field protected final byte[] buf;
field protected final java.util.zip.Deflater def;
}
@@ -71805,6 +72053,7 @@ package java.util.zip {
ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected java.util.zip.CRC32 crc;
}
@@ -71812,6 +72061,7 @@ package java.util.zip {
ctor public Inflater(boolean);
ctor public Inflater();
method public void end();
+ method protected void finalize();
method public boolean finished();
method public int getAdler();
method public long getBytesRead();
@@ -71938,6 +72188,7 @@ package java.util.zip {
ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
method public void close() throws java.io.IOException;
method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+ method protected void finalize() throws java.io.IOException;
method public java.lang.String getComment();
method public java.util.zip.ZipEntry getEntry(java.lang.String);
method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -72044,6 +72295,7 @@ package java.util.zip {
method public void setComment(java.lang.String);
method public void setLevel(int);
method public void setMethod(int);
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field public static final int CENATT = 36; // 0x24
field public static final int CENATX = 38; // 0x26
field public static final int CENCOM = 32; // 0x20
@@ -72200,6 +72452,7 @@ package javax.crypto {
public class ExemptionMechanism {
ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+ method protected void finalize();
method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -74588,6 +74841,7 @@ package javax.xml.transform {
ctor public TransformerException(java.lang.String, java.lang.Throwable);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
method public java.lang.String getLocationAsString();
method public javax.xml.transform.SourceLocator getLocator();
@@ -74858,6 +75112,7 @@ package javax.xml.xpath {
public class XPathException extends java.lang.Exception {
ctor public XPathException(java.lang.String);
ctor public XPathException(java.lang.Throwable);
+ method public java.lang.Throwable getCause();
}
public abstract interface XPathExpression {
diff --git a/api/test-current.txt b/api/test-current.txt
index 939d9789e819..2530d6849248 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3162,6 +3162,7 @@ package android.animation {
public final class AnimatorSet extends android.animation.Animator {
ctor public AnimatorSet();
+ method public android.animation.AnimatorSet clone();
method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
method public long getCurrentPlayTime();
method public long getDuration();
@@ -3280,6 +3281,7 @@ package android.animation {
public final class ObjectAnimator extends android.animation.ValueAnimator {
ctor public ObjectAnimator();
+ method public android.animation.ObjectAnimator clone();
method public java.lang.String getPropertyName();
method public java.lang.Object getTarget();
method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3305,6 +3307,7 @@ package android.animation {
method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
method public void setAutoCancel(boolean);
+ method public android.animation.ObjectAnimator setDuration(long);
method public void setProperty(android.util.Property);
method public void setPropertyName(java.lang.String);
}
@@ -3386,6 +3389,7 @@ package android.animation {
ctor public ValueAnimator();
method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
method public static boolean areAnimatorsEnabled();
+ method public android.animation.ValueAnimator clone();
method public float getAnimatedFraction();
method public java.lang.Object getAnimatedValue();
method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -4972,6 +4976,7 @@ package android.app {
ctor public IntentService(java.lang.String);
method public android.os.IBinder onBind(android.content.Intent);
method protected abstract void onHandleIntent(android.content.Intent);
+ method public void onStart(android.content.Intent, int);
method public void setIntentRedelivery(boolean);
}
@@ -11109,6 +11114,7 @@ package android.content.res {
public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+ method public void mark(int);
}
public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -11416,6 +11422,7 @@ package android.database {
method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
method public void deactivate();
method public void fillWindow(int, android.database.CursorWindow);
+ method protected void finalize();
method public byte[] getBlob(int);
method public int getColumnCount();
method public int getColumnIndex(java.lang.String);
@@ -13891,6 +13898,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setOpacity(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
field public static final float MASK_SIZE = 100.0f;
@@ -13972,6 +13980,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setAntiAlias(boolean);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setGravity(int);
method public void setMipMap(boolean);
method public void setTargetDensity(android.graphics.Canvas);
@@ -14099,6 +14108,7 @@ package android.graphics.drawable {
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+ method public void setDither(boolean);
method public void setEnterFadeDuration(int);
method public void setExitFadeDuration(int);
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14165,6 +14175,7 @@ package android.graphics.drawable {
method public void setColors(int[]);
method public void setCornerRadii(float[]);
method public void setCornerRadius(float);
+ method public void setDither(boolean);
method public void setGradientCenter(float, float);
method public void setGradientRadius(float);
method public void setGradientType(int);
@@ -14259,6 +14270,7 @@ package android.graphics.drawable {
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setDrawable(int, android.graphics.drawable.Drawable);
method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
method public void setId(int, int);
@@ -14299,6 +14311,7 @@ package android.graphics.drawable {
method public android.graphics.Paint getPaint();
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setTargetDensity(android.graphics.Canvas);
method public void setTargetDensity(android.util.DisplayMetrics);
method public void setTargetDensity(int);
@@ -14361,6 +14374,7 @@ package android.graphics.drawable {
method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDither(boolean);
method public void setIntrinsicHeight(int);
method public void setIntrinsicWidth(int);
method public void setPadding(int, int, int, int);
@@ -14403,27 +14417,32 @@ package android.graphics.drawable.shapes {
public class ArcShape extends android.graphics.drawable.shapes.RectShape {
ctor public ArcShape(float, float);
+ method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
method public final float getStartAngle();
method public final float getSweepAngle();
}
public class OvalShape extends android.graphics.drawable.shapes.RectShape {
ctor public OvalShape();
+ method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
}
public class PathShape extends android.graphics.drawable.shapes.Shape {
ctor public PathShape(android.graphics.Path, float, float);
+ method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
}
public class RectShape extends android.graphics.drawable.shapes.Shape {
ctor public RectShape();
+ method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
method public void draw(android.graphics.Canvas, android.graphics.Paint);
method protected final android.graphics.RectF rect();
}
public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+ method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
}
public abstract class Shape implements java.lang.Cloneable {
@@ -14508,6 +14527,7 @@ package android.hardware {
method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
method public final void cancelAutoFocus();
method public final boolean enableShutterSound(boolean);
+ method protected void finalize();
method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
method public static int getNumberOfCameras();
method public android.hardware.Camera.Parameters getParameters();
@@ -15117,6 +15137,7 @@ package android.hardware.camera2 {
method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+ method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -15477,6 +15498,7 @@ package android.hardware.camera2 {
public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
method public int describeContents();
method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+ method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
method public java.lang.Object getTag();
method public boolean isReprocess();
method public void writeToParcel(android.os.Parcel, int);
@@ -15555,6 +15577,7 @@ package android.hardware.camera2 {
public class CaptureResult extends android.hardware.camera2.CameraMetadata {
method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
method public long getFrameNumber();
+ method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
method public android.hardware.camera2.CaptureRequest getRequest();
method public int getSequenceId();
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -17988,6 +18011,7 @@ package android.icu.text {
}
public class DateIntervalFormat extends android.icu.text.UFormat {
+ method public synchronized java.lang.Object clone();
method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -18771,6 +18795,7 @@ package android.icu.text {
public final class RuleBasedCollator extends android.icu.text.Collator {
ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+ method public android.icu.text.RuleBasedCollator cloneAsThawed();
method public int compare(java.lang.String, java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -18797,6 +18822,7 @@ package android.icu.text {
method public void setFrenchCollation(boolean);
method public void setFrenchCollationDefault();
method public void setLowerCaseFirst(boolean);
+ method public android.icu.text.RuleBasedCollator setMaxVariable(int);
method public void setNumericCollation(boolean);
method public void setNumericCollationDefault();
method public void setStrengthDefault();
@@ -21375,6 +21401,7 @@ package android.media {
ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+ method protected void finalize();
method public int getAudioFormat();
method public int getAudioSessionId();
method public int getAudioSource();
@@ -21479,6 +21506,7 @@ package android.media {
method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
method public int attachAuxEffect(int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+ method protected void finalize();
method public void flush();
method public int getAudioFormat();
method public int getAudioSessionId();
@@ -21877,6 +21905,7 @@ package android.media {
method public boolean clearQueue();
method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
method public boolean closeJetFile();
+ method protected void finalize();
method public static android.media.JetPlayer getJetPlayer();
method public static int getMaxTracks();
method public boolean loadJetFile(java.lang.String);
@@ -21916,6 +21945,7 @@ package android.media {
ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+ method protected void finalize();
method public static boolean isSystemIdSupported(int);
method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -21972,6 +22002,7 @@ package android.media {
method public static android.view.Surface createPersistentInputSurface();
method public final int dequeueInputBuffer(long);
method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+ method protected void finalize();
method public final void flush();
method public android.media.MediaCodecInfo getCodecInfo();
method public java.nio.ByteBuffer getInputBuffer(int);
@@ -22383,6 +22414,7 @@ package android.media {
public final class MediaCrypto {
ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+ method protected void finalize();
method public static final boolean isCryptoSchemeSupported(java.util.UUID);
method public final void release();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -22403,6 +22435,7 @@ package android.media {
ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
method public void close();
method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+ method protected void finalize();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
method public final void setMediaCasSession(android.media.MediaCas.Session);
}
@@ -22445,6 +22478,7 @@ package android.media {
public final class MediaDrm {
ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
method public void closeSession(byte[]);
+ method protected void finalize();
method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
method public byte[] getPropertyByteArray(java.lang.String);
@@ -22541,6 +22575,7 @@ package android.media {
public final class MediaExtractor {
ctor public MediaExtractor();
method public boolean advance();
+ method protected void finalize();
method public long getCachedDuration();
method public android.media.MediaExtractor.CasInfo getCasInfo(int);
method public android.media.DrmInitData getDrmInitData();
@@ -22842,6 +22877,7 @@ package android.media {
method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
method public void deselectTrack(int) throws java.lang.IllegalStateException;
+ method protected void finalize();
method public int getAudioSessionId();
method public int getCurrentPosition();
method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -23037,6 +23073,7 @@ package android.media {
public class MediaRecorder {
ctor public MediaRecorder();
+ method protected void finalize();
method public static final int getAudioSourceMax();
method public int getMaxAmplitude() throws java.lang.IllegalStateException;
method public android.os.PersistableBundle getMetrics();
@@ -23308,6 +23345,7 @@ package android.media {
public final class MediaSync {
ctor public MediaSync();
method public final android.view.Surface createInputSurface();
+ method protected void finalize();
method public void flush();
method public android.media.PlaybackParams getPlaybackParams();
method public android.media.SyncParams getSyncParams();
@@ -23427,6 +23465,10 @@ package android.media {
public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
method public synchronized void apply();
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
}
@@ -23473,6 +23515,7 @@ package android.media {
}
public class Ringtone {
+ method protected void finalize();
method public android.media.AudioAttributes getAudioAttributes();
method public deprecated int getStreamType();
method public java.lang.String getTitle(android.content.Context);
@@ -23526,6 +23569,7 @@ package android.media {
ctor public deprecated SoundPool(int, int, int);
method public final void autoPause();
method public final void autoResume();
+ method protected void finalize();
method public int load(java.lang.String, int);
method public int load(android.content.Context, int, int);
method public int load(android.content.res.AssetFileDescriptor, int);
@@ -23594,6 +23638,7 @@ package android.media {
public class ToneGenerator {
ctor public ToneGenerator(int, int);
+ method protected void finalize();
method public final int getAudioSessionId();
method public void release();
method public boolean startTone(int);
@@ -23726,6 +23771,7 @@ package android.media {
public final class VolumeShaper implements java.lang.AutoCloseable {
method public void apply(android.media.VolumeShaper.Operation);
method public void close();
+ method protected void finalize();
method public float getVolume();
method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
}
@@ -23780,6 +23826,7 @@ package android.media.audiofx {
}
public class AudioEffect {
+ method protected void finalize();
method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
method public boolean getEnabled() throws java.lang.IllegalStateException;
method public int getId() throws java.lang.IllegalStateException;
@@ -24032,6 +24079,7 @@ package android.media.audiofx {
public class Visualizer {
ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+ method protected void finalize();
method public int getCaptureSize() throws java.lang.IllegalStateException;
method public static int[] getCaptureSizeRange();
method public boolean getEnabled();
@@ -30695,6 +30743,7 @@ package android.os {
method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
method public void readFromParcel(android.os.Parcel);
method public void setClassLoader(java.lang.ClassLoader);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
field public static final android.os.Bundle EMPTY;
@@ -30925,6 +30974,7 @@ package android.os {
public abstract class FileObserver {
ctor public FileObserver(java.lang.String);
ctor public FileObserver(java.lang.String, int);
+ method protected void finalize();
method public abstract void onEvent(int, java.lang.String);
method public void startWatching();
method public void stopWatching();
@@ -31099,6 +31149,7 @@ package android.os {
ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
method public void close();
+ method protected void finalize();
method public java.io.InputStream getInputStream();
method public java.io.OutputStream getOutputStream();
method public boolean isPurgingAllowed();
@@ -31398,6 +31449,7 @@ package android.os {
method public int describeContents();
method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+ method public synchronized java.lang.String toString();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
field public static final android.os.PersistableBundle EMPTY;
@@ -35744,6 +35796,7 @@ package android.renderscript {
method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+ method public synchronized void resize(int);
method public void setFace(android.renderscript.Type.CubemapFace);
method public void setLOD(int);
method public void setX(int);
@@ -40499,6 +40552,7 @@ package android.telephony.gsm {
public static deprecated class SmsMessage.SubmitPdu {
ctor public deprecated SmsMessage.SubmitPdu();
+ method public deprecated java.lang.String toString();
field public deprecated byte[] encodedMessage;
field public deprecated byte[] encodedScAddress;
}
@@ -40562,6 +40616,7 @@ package android.test {
method public java.util.List<junit.framework.TestCase> getTestCases();
method public java.lang.String getTestClassName();
method public junit.framework.TestResult getTestResult();
+ method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
method protected void runFailed(java.lang.String);
method public void runTest();
method public void runTest(junit.framework.TestResult);
@@ -40822,10 +40877,12 @@ package android.test.mock {
ctor protected MockContentProvider();
ctor public MockContentProvider(android.content.Context);
ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+ method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
method public java.lang.String getType(android.net.Uri);
method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
method public boolean onCreate();
+ method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
}
@@ -41099,6 +41156,10 @@ package android.test.mock {
public deprecated class MockResources extends android.content.res.Resources {
ctor public MockResources();
+ method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+ method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+ method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+ method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
}
}
@@ -42347,6 +42408,7 @@ package android.text.style {
public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
ctor public MetricAffectingSpan();
+ method public android.text.style.MetricAffectingSpan getUnderlying();
method public abstract void updateMeasureState(android.text.TextPaint);
}
@@ -43028,14 +43090,28 @@ package android.transition {
public class TransitionSet extends android.transition.Transition {
ctor public TransitionSet();
ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+ method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet addTarget(android.view.View);
+ method public android.transition.TransitionSet addTarget(int);
+ method public android.transition.TransitionSet addTarget(java.lang.String);
+ method public android.transition.TransitionSet addTarget(java.lang.Class);
method public android.transition.TransitionSet addTransition(android.transition.Transition);
method public void captureEndValues(android.transition.TransitionValues);
method public void captureStartValues(android.transition.TransitionValues);
+ method public android.transition.TransitionSet clone();
method public int getOrdering();
method public android.transition.Transition getTransitionAt(int);
method public int getTransitionCount();
+ method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+ method public android.transition.TransitionSet removeTarget(int);
+ method public android.transition.TransitionSet removeTarget(android.view.View);
+ method public android.transition.TransitionSet removeTarget(java.lang.Class);
+ method public android.transition.TransitionSet removeTarget(java.lang.String);
method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+ method public android.transition.TransitionSet setDuration(long);
+ method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
method public android.transition.TransitionSet setOrdering(int);
+ method public android.transition.TransitionSet setStartDelay(long);
field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
field public static final int ORDERING_TOGETHER = 0; // 0x0
}
@@ -43200,6 +43276,9 @@ package android.util {
public class Base64InputStream extends java.io.FilterInputStream {
ctor public Base64InputStream(java.io.InputStream, int);
+ method public int available();
+ method public void mark(int);
+ method public void reset();
}
public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -45487,6 +45566,7 @@ package android.view {
method public android.graphics.Canvas lockCanvas();
method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
method protected final void onDraw(android.graphics.Canvas);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setOpaque(boolean);
method public void setSurfaceTexture(android.graphics.SurfaceTexture);
method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -46519,6 +46599,7 @@ package android.view {
method public int getLayoutMode();
method public android.animation.LayoutTransition getLayoutTransition();
method public int getNestedScrollAxes();
+ method public android.view.ViewGroupOverlay getOverlay();
method public int getPersistentDrawingCache();
method public boolean getTouchscreenBlocksFocus();
method public int indexOfChild(android.view.View);
@@ -46949,6 +47030,7 @@ package android.view {
method public final boolean isActive();
method public abstract boolean isFloating();
method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+ method public boolean isWideColorGamut();
method public final void makeActive();
method protected abstract void onActive();
method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -47803,6 +47885,7 @@ package android.view.animation {
ctor public Animation(android.content.Context, android.util.AttributeSet);
method protected void applyTransformation(float, android.view.animation.Transformation);
method public void cancel();
+ method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
method public long computeDurationHint();
method protected void ensureInterpolator();
method public int getBackgroundColor();
@@ -47874,6 +47957,7 @@ package android.view.animation {
ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
ctor public AnimationSet(boolean);
method public void addAnimation(android.view.animation.Animation);
+ method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
method public java.util.List<android.view.animation.Animation> getAnimations();
}
@@ -48724,6 +48808,10 @@ package android.webkit {
public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
method public static android.webkit.CookieSyncManager getInstance();
+ method public deprecated void resetSync();
+ method public deprecated void startSync();
+ method public deprecated void stopSync();
+ method public deprecated void sync();
method protected deprecated void syncFromRamToFlash();
field protected static final java.lang.String LOGTAG = "websync";
field protected android.webkit.WebViewDatabase mDataBase;
@@ -49276,6 +49364,7 @@ package android.webkit {
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public static void setWebContentsDebuggingEnabled(boolean);
method public void setWebViewClient(android.webkit.WebViewClient);
+ method public deprecated boolean shouldDelayChildPressedState();
method public deprecated boolean showFindDialog(java.lang.String, boolean);
method public static void shutdownSafeBrowsing();
method public void stopLoading();
@@ -49408,6 +49497,7 @@ package android.widget {
method public void clearTextFilter();
method public void deferNotifyDataSetChanged();
method public void fling(int);
+ method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCacheColorHint();
method public int getCheckedItemCount();
method public long[] getCheckedItemIds();
@@ -49574,6 +49664,9 @@ package android.widget {
ctor public ActionMenuView(android.content.Context);
ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
method public void dismissPopupMenus();
+ method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public android.view.Menu getMenu();
method public android.graphics.drawable.Drawable getOverflowIcon();
method public int getPopupTheme();
@@ -49749,7 +49842,6 @@ package android.widget {
method public void addAll(T...);
method public void clear();
method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
- method public java.lang.CharSequence[] getAutofillOptions();
method public android.content.Context getContext();
method public int getCount();
method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -49839,6 +49931,7 @@ package android.widget {
method public void notifyDataSetChanged();
method public void notifyDataSetInvalidated();
method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void setAutofillOptions(java.lang.CharSequence...);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
}
@@ -50121,6 +50214,7 @@ package android.widget {
ctor public EditText(android.content.Context, android.util.AttributeSet, int);
ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
method public void extendSelection(int);
+ method public android.text.Editable getText();
method public void selectAll();
method public void setSelection(int, int);
method public void setSelection(int);
@@ -50242,6 +50336,8 @@ package android.widget {
ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
method public boolean getMeasureAllChildren();
method protected void onLayout(boolean, int, int, int, int);
@@ -50288,6 +50384,9 @@ package android.widget {
ctor public GridLayout(android.content.Context, android.util.AttributeSet);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getAlignmentMode();
method public int getColumnCount();
method public int getOrientation();
@@ -50500,6 +50599,9 @@ package android.widget {
ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getBaselineAlignedChildIndex();
method public android.graphics.drawable.Drawable getDividerDrawable();
method public int getDividerPadding();
@@ -50888,6 +50990,8 @@ package android.widget {
method public final synchronized void incrementSecondaryProgressBy(int);
method public boolean isAnimating();
method public synchronized boolean isIndeterminate();
+ method protected synchronized void onDraw(android.graphics.Canvas);
+ method protected synchronized void onMeasure(int, int);
method public void onRestoreInstanceState(android.os.Parcelable);
method public android.os.Parcelable onSaveInstanceState();
method public synchronized void setIndeterminate(boolean);
@@ -50943,6 +51047,7 @@ package android.widget {
ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
method public void check(int);
method public void clearCheck();
+ method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getCheckedRadioButtonId();
method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
}
@@ -50985,6 +51090,7 @@ package android.widget {
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public int getGravity();
method protected void onLayout(boolean, int, int, int, int);
method public void setGravity(int);
@@ -51529,6 +51635,7 @@ package android.widget {
public class TableLayout extends android.widget.LinearLayout {
ctor public TableLayout(android.content.Context);
ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public boolean isColumnCollapsed(int);
method public boolean isColumnShrinkable(int);
method public boolean isColumnStretchable(int);
@@ -51553,6 +51660,7 @@ package android.widget {
public class TableRow extends android.widget.LinearLayout {
ctor public TableRow(android.content.Context);
ctor public TableRow(android.content.Context, android.util.AttributeSet);
+ method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
method public android.view.View getVirtualChildAt(int);
method public int getVirtualChildCount();
}
@@ -51901,6 +52009,7 @@ package android.widget {
ctor public ToggleButton(android.content.Context);
method public java.lang.CharSequence getTextOff();
method public java.lang.CharSequence getTextOn();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
method public void setTextOff(java.lang.CharSequence);
method public void setTextOn(java.lang.CharSequence);
}
@@ -51912,6 +52021,9 @@ package android.widget {
ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
method public void collapseActionView();
method public void dismissPopupMenus();
+ method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
method public int getContentInsetEnd();
method public int getContentInsetEndWithActions();
method public int getContentInsetLeft();
@@ -52434,6 +52546,8 @@ package dalvik.system {
public class BaseDexClassLoader extends java.lang.ClassLoader {
ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
method public java.lang.String findLibrary(java.lang.String);
+ method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+ method protected synchronized java.lang.Package getPackage(java.lang.String);
}
public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -52655,6 +52769,10 @@ package java.io {
public class BufferedInputStream extends java.io.FilterInputStream {
ctor public BufferedInputStream(java.io.InputStream);
ctor public BufferedInputStream(java.io.InputStream, int);
+ method public synchronized int available() throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
+ method public synchronized long skip(long) throws java.io.IOException;
field protected volatile byte[] buf;
field protected int count;
field protected int marklimit;
@@ -52665,6 +52783,9 @@ package java.io {
public class BufferedOutputStream extends java.io.FilterOutputStream {
ctor public BufferedOutputStream(java.io.OutputStream);
ctor public BufferedOutputStream(java.io.OutputStream, int);
+ method public synchronized void flush() throws java.io.IOException;
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
}
@@ -52690,7 +52811,12 @@ package java.io {
public class ByteArrayInputStream extends java.io.InputStream {
ctor public ByteArrayInputStream(byte[]);
ctor public ByteArrayInputStream(byte[], int, int);
+ method public synchronized int available();
+ method public void mark(int);
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected byte[] buf;
field protected int count;
field protected int mark;
@@ -52703,9 +52829,11 @@ package java.io {
method public synchronized void reset();
method public synchronized int size();
method public synchronized byte[] toByteArray();
+ method public synchronized java.lang.String toString();
method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
method public deprecated synchronized java.lang.String toString(int);
method public synchronized void write(int);
+ method public synchronized void write(byte[], int, int);
method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
field protected byte[] buf;
field protected int count;
@@ -52725,12 +52853,17 @@ package java.io {
public class CharArrayWriter extends java.io.Writer {
ctor public CharArrayWriter();
ctor public CharArrayWriter(int);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence);
+ method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+ method public java.io.CharArrayWriter append(char);
method public void close();
method public void flush();
method public void reset();
method public int size();
method public char[] toCharArray();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String, int, int);
method public void writeTo(java.io.Writer) throws java.io.IOException;
field protected char[] buf;
field protected int count;
@@ -52817,6 +52950,8 @@ package java.io {
public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
ctor public DataOutputStream(java.io.OutputStream);
method public final int size();
+ method public synchronized void write(int) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
method public final void writeBoolean(boolean) throws java.io.IOException;
method public final void writeByte(int) throws java.io.IOException;
method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -52916,6 +53051,7 @@ package java.io {
ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileInputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public int read() throws java.io.IOException;
@@ -52932,6 +53068,7 @@ package java.io {
ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
ctor public FileOutputStream(java.io.FileDescriptor);
+ method protected void finalize() throws java.io.IOException;
method public java.nio.channels.FileChannel getChannel();
method public final java.io.FileDescriptor getFD() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
@@ -53045,6 +53182,8 @@ package java.io {
public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
ctor public LineNumberInputStream(java.io.InputStream);
method public int getLineNumber();
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
method public void setLineNumber(int);
}
@@ -53274,8 +53413,10 @@ package java.io {
ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
ctor public PipedInputStream();
ctor public PipedInputStream(int);
+ method public synchronized int available() throws java.io.IOException;
method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
method public synchronized int read() throws java.io.IOException;
+ method public synchronized int read(byte[], int, int) throws java.io.IOException;
method protected synchronized void receive(int) throws java.io.IOException;
field protected static final int PIPE_SIZE = 1024; // 0x400
field protected byte[] buffer;
@@ -53287,6 +53428,7 @@ package java.io {
ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
ctor public PipedOutputStream();
method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+ method public synchronized void flush() throws java.io.IOException;
method public void write(int) throws java.io.IOException;
}
@@ -53297,7 +53439,9 @@ package java.io {
ctor public PipedReader(int);
method public void close() throws java.io.IOException;
method public void connect(java.io.PipedWriter) throws java.io.IOException;
+ method public synchronized int read() throws java.io.IOException;
method public synchronized int read(char[], int, int) throws java.io.IOException;
+ method public synchronized boolean ready() throws java.io.IOException;
}
public class PipedWriter extends java.io.Writer {
@@ -53322,6 +53466,8 @@ package java.io {
method public java.io.PrintStream append(char);
method public boolean checkError();
method protected void clearError();
+ method public void close();
+ method public void flush();
method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
method public void print(boolean);
@@ -53346,6 +53492,8 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
+ method public void write(byte[], int, int);
}
public class PrintWriter extends java.io.Writer {
@@ -53357,6 +53505,9 @@ package java.io {
ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+ method public java.io.PrintWriter append(java.lang.CharSequence);
+ method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+ method public java.io.PrintWriter append(char);
method public boolean checkError();
method protected void clearError();
method public void close();
@@ -53385,13 +53536,18 @@ package java.io {
method public void println(java.lang.String);
method public void println(java.lang.Object);
method protected void setError();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(char[]);
+ method public void write(java.lang.String, int, int);
+ method public void write(java.lang.String);
field protected java.io.Writer out;
}
public class PushbackInputStream extends java.io.FilterInputStream {
ctor public PushbackInputStream(java.io.InputStream, int);
ctor public PushbackInputStream(java.io.InputStream);
+ method public synchronized void close() throws java.io.IOException;
method public void unread(int) throws java.io.IOException;
method public void unread(byte[], int, int) throws java.io.IOException;
method public void unread(byte[]) throws java.io.IOException;
@@ -53515,7 +53671,11 @@ package java.io {
public deprecated class StringBufferInputStream extends java.io.InputStream {
ctor public StringBufferInputStream(java.lang.String);
+ method public synchronized int available();
method public synchronized int read();
+ method public synchronized int read(byte[], int, int);
+ method public synchronized void reset();
+ method public synchronized long skip(long);
field protected java.lang.String buffer;
field protected int count;
field protected int pos;
@@ -53530,10 +53690,16 @@ package java.io {
public class StringWriter extends java.io.Writer {
ctor public StringWriter();
ctor public StringWriter(int);
+ method public java.io.StringWriter append(java.lang.CharSequence);
+ method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+ method public java.io.StringWriter append(char);
method public void close() throws java.io.IOException;
method public void flush();
method public java.lang.StringBuffer getBuffer();
+ method public void write(int);
method public void write(char[], int, int);
+ method public void write(java.lang.String);
+ method public void write(java.lang.String, int, int);
}
public class SyncFailedException extends java.io.IOException {
@@ -53548,6 +53714,7 @@ package java.io {
public class UncheckedIOException extends java.lang.RuntimeException {
ctor public UncheckedIOException(java.lang.String, java.io.IOException);
ctor public UncheckedIOException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class UnsupportedEncodingException extends java.io.IOException {
@@ -53557,6 +53724,7 @@ package java.io {
public class WriteAbortedException extends java.io.ObjectStreamException {
ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+ method public java.lang.Throwable getCause();
field public java.lang.Exception detail;
}
@@ -54324,6 +54492,7 @@ package java.lang {
ctor public ClassNotFoundException();
ctor public ClassNotFoundException(java.lang.String);
ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -54428,6 +54597,7 @@ package java.lang {
ctor public ExceptionInInitializerError();
ctor public ExceptionInInitializerError(java.lang.Throwable);
ctor public ExceptionInInitializerError(java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
}
@@ -55215,8 +55385,16 @@ package java.lang {
method public synchronized java.lang.StringBuffer append(float);
method public synchronized java.lang.StringBuffer append(double);
method public synchronized java.lang.StringBuffer appendCodePoint(int);
+ method public synchronized int capacity();
+ method public synchronized char charAt(int);
+ method public synchronized int codePointAt(int);
+ method public synchronized int codePointBefore(int);
+ method public synchronized int codePointCount(int, int);
method public synchronized java.lang.StringBuffer delete(int, int);
method public synchronized java.lang.StringBuffer deleteCharAt(int);
+ method public synchronized void ensureCapacity(int);
+ method public synchronized void getChars(int, int, char[], int);
+ method public synchronized int indexOf(java.lang.String, int);
method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -55229,9 +55407,18 @@ package java.lang {
method public java.lang.StringBuffer insert(int, long);
method public java.lang.StringBuffer insert(int, float);
method public java.lang.StringBuffer insert(int, double);
+ method public synchronized int lastIndexOf(java.lang.String, int);
+ method public synchronized int length();
+ method public synchronized int offsetByCodePoints(int, int);
method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
method public synchronized java.lang.StringBuffer reverse();
+ method public synchronized void setCharAt(int, char);
+ method public synchronized void setLength(int);
+ method public synchronized java.lang.CharSequence subSequence(int, int);
+ method public synchronized java.lang.String substring(int);
+ method public synchronized java.lang.String substring(int, int);
method public synchronized java.lang.String toString();
+ method public synchronized void trimToSize();
}
public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -55886,6 +56073,7 @@ package java.lang.reflect {
ctor protected InvocationTargetException();
ctor public InvocationTargetException(java.lang.Throwable);
ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getTargetException();
}
@@ -56001,6 +56189,7 @@ package java.lang.reflect {
public class UndeclaredThrowableException extends java.lang.RuntimeException {
ctor public UndeclaredThrowableException(java.lang.Throwable);
ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getUndeclaredThrowable();
}
@@ -56898,6 +57087,7 @@ package java.net {
method public java.lang.String getQuery();
method public java.lang.String getRef();
method public java.lang.String getUserInfo();
+ method public synchronized int hashCode();
method public java.net.URLConnection openConnection() throws java.io.IOException;
method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -57127,7 +57317,6 @@ package java.nio {
method public final int arrayOffset();
method public abstract java.nio.CharBuffer asReadOnlyBuffer();
method public final char charAt(int);
- method public java.util.stream.IntStream chars();
method public abstract java.nio.CharBuffer compact();
method public int compareTo(java.nio.CharBuffer);
method public abstract java.nio.CharBuffer duplicate();
@@ -57984,6 +58173,7 @@ package java.nio.file {
public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
ctor public DirectoryIteratorException(java.io.IOException);
+ method public java.io.IOException getCause();
}
public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -58949,9 +59139,11 @@ package java.security {
public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
ctor public KeyStore.PasswordProtection(char[]);
ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+ method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
method public synchronized char[] getPassword();
method public java.lang.String getProtectionAlgorithm();
method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+ method public synchronized boolean isDestroyed();
}
public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -59131,6 +59323,7 @@ package java.security {
public class PrivilegedActionException extends java.lang.Exception {
ctor public PrivilegedActionException(java.lang.Exception);
+ method public java.lang.Throwable getCause();
method public java.lang.Exception getException();
}
@@ -59153,22 +59346,30 @@ package java.security {
method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.util.Enumeration<java.lang.Object> elements();
+ method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+ method public java.lang.Object get(java.lang.Object);
method public java.lang.String getInfo();
method public java.lang.String getName();
method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
method public synchronized java.util.Set<java.security.Provider.Service> getServices();
method public double getVersion();
+ method public java.util.Set<java.lang.Object> keySet();
+ method public java.util.Enumeration<java.lang.Object> keys();
method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
method public synchronized void putAll(java.util.Map<?, ?>);
method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
method protected synchronized void putService(java.security.Provider.Service);
+ method public synchronized java.lang.Object remove(java.lang.Object);
method protected synchronized void removeService(java.security.Provider.Service);
method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+ method public java.lang.String toString();
+ method public java.util.Collection<java.lang.Object> values();
}
public static class Provider.Service {
@@ -59214,7 +59415,9 @@ package java.security {
method public final java.security.Provider getProvider();
method public static byte[] getSeed(int);
method protected final int next(int);
+ method public synchronized void nextBytes(byte[]);
method public synchronized void setSeed(byte[]);
+ method public void setSeed(long);
}
public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -59761,6 +59964,7 @@ package java.security.cert {
public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
ctor protected PKIXRevocationChecker();
+ method public java.security.cert.PKIXRevocationChecker clone();
method public java.util.List<java.security.cert.Extension> getOcspExtensions();
method public java.net.URI getOcspResponder();
method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -62013,7 +62217,6 @@ package java.time {
public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -62021,8 +62224,6 @@ package java.time {
method public java.time.DayOfWeek minus(long);
method public static java.time.DayOfWeek of(int);
method public java.time.DayOfWeek plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.DayOfWeek valueOf(java.lang.String);
method public static final java.time.DayOfWeek[] values();
enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -62098,6 +62299,8 @@ package java.time {
method public boolean isBefore(java.time.Instant);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+ method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant minusMillis(long);
method public java.time.Instant minusNanos(long);
method public java.time.Instant minusSeconds(long);
@@ -62107,6 +62310,7 @@ package java.time {
method public static java.time.Instant ofEpochSecond(long);
method public static java.time.Instant ofEpochSecond(long, long);
method public static java.time.Instant parse(java.lang.CharSequence);
+ method public java.time.Instant plus(java.time.temporal.TemporalAmount);
method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
method public java.time.Instant plusMillis(long);
method public java.time.Instant plusNanos(long);
@@ -62114,6 +62318,7 @@ package java.time {
method public long toEpochMilli();
method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
method public java.time.Instant with(java.time.temporal.TemporalField, long);
field public static final java.time.Instant EPOCH;
field public static final java.time.Instant MAX;
@@ -62123,6 +62328,7 @@ package java.time {
public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
method public java.time.LocalDateTime atStartOfDay();
method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+ method public java.time.LocalDateTime atTime(java.time.LocalTime);
method public java.time.LocalDateTime atTime(int, int);
method public java.time.LocalDateTime atTime(int, int, int);
method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -62137,6 +62343,8 @@ package java.time {
method public int getMonthValue();
method public int getYear();
method public int lengthOfMonth();
+ method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate minusDays(long);
method public java.time.LocalDate minusMonths(long);
method public java.time.LocalDate minusWeeks(long);
@@ -62150,12 +62358,16 @@ package java.time {
method public static java.time.LocalDate ofYearDay(int, int);
method public static java.time.LocalDate parse(java.lang.CharSequence);
method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDate plusDays(long);
method public java.time.LocalDate plusMonths(long);
method public java.time.LocalDate plusWeeks(long);
method public java.time.LocalDate plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+ method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+ method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
method public java.time.LocalDate withDayOfMonth(int);
method public java.time.LocalDate withDayOfYear(int);
method public java.time.LocalDate withMonth(int);
@@ -62180,6 +62392,8 @@ package java.time {
method public int getSecond();
method public int getYear();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime minusDays(long);
method public java.time.LocalDateTime minusHours(long);
method public java.time.LocalDateTime minusMinutes(long);
@@ -62202,6 +62416,7 @@ package java.time {
method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.LocalDateTime parse(java.lang.CharSequence);
method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalDateTime plusDays(long);
method public java.time.LocalDateTime plusHours(long);
@@ -62215,6 +62430,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalDateTime withDayOfMonth(int);
method public java.time.LocalDateTime withDayOfYear(int);
@@ -62244,6 +62460,8 @@ package java.time {
method public boolean isBefore(java.time.LocalTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime minusHours(long);
method public java.time.LocalTime minusMinutes(long);
method public java.time.LocalTime minusNanos(long);
@@ -62258,6 +62476,7 @@ package java.time {
method public static java.time.LocalTime ofSecondOfDay(long);
method public static java.time.LocalTime parse(java.lang.CharSequence);
method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.LocalTime plusHours(long);
method public java.time.LocalTime plusMinutes(long);
@@ -62267,6 +62486,7 @@ package java.time {
method public int toSecondOfDay();
method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
method public java.time.LocalTime withHour(int);
method public java.time.LocalTime withMinute(int);
@@ -62283,7 +62503,6 @@ package java.time {
method public int firstDayOfYear(boolean);
method public java.time.Month firstMonthOfQuarter();
method public static java.time.Month from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
method public long getLong(java.time.temporal.TemporalField);
method public int getValue();
@@ -62294,8 +62513,6 @@ package java.time {
method public java.time.Month minus(long);
method public static java.time.Month of(int);
method public java.time.Month plus(long);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.Month valueOf(java.lang.String);
method public static final java.time.Month[] values();
enum_constant public static final java.time.Month APRIL;
@@ -62362,6 +62579,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetDateTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime minusDays(long);
method public java.time.OffsetDateTime minusHours(long);
method public java.time.OffsetDateTime minusMinutes(long);
@@ -62379,6 +62598,7 @@ package java.time {
method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetDateTime plusDays(long);
method public java.time.OffsetDateTime plusHours(long);
@@ -62398,6 +62618,7 @@ package java.time {
method public java.time.ZonedDateTime toZonedDateTime();
method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetDateTime withDayOfMonth(int);
method public java.time.OffsetDateTime withDayOfYear(int);
@@ -62430,6 +62651,8 @@ package java.time {
method public boolean isEqual(java.time.OffsetTime);
method public boolean isSupported(java.time.temporal.TemporalField);
method public boolean isSupported(java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime minusHours(long);
method public java.time.OffsetTime minusMinutes(long);
method public java.time.OffsetTime minusNanos(long);
@@ -62442,6 +62665,7 @@ package java.time {
method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
method public static java.time.OffsetTime parse(java.lang.CharSequence);
method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.OffsetTime plusHours(long);
method public java.time.OffsetTime plusMinutes(long);
@@ -62450,6 +62674,7 @@ package java.time {
method public java.time.LocalTime toLocalTime();
method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
method public java.time.OffsetTime withHour(int);
method public java.time.OffsetTime withMinute(int);
@@ -62476,6 +62701,7 @@ package java.time {
method public java.time.Period minusMonths(long);
method public java.time.Period minusYears(long);
method public java.time.Period multipliedBy(int);
+ method public java.time.Period negated();
method public java.time.Period normalized();
method public static java.time.Period of(int, int, int);
method public static java.time.Period ofDays(int);
@@ -62514,6 +62740,8 @@ package java.time {
method public boolean isSupported(java.time.temporal.TemporalUnit);
method public boolean isValidMonthDay(java.time.MonthDay);
method public int length();
+ method public java.time.Year minus(java.time.temporal.TemporalAmount);
+ method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
method public java.time.Year minusYears(long);
method public static java.time.Year now();
method public static java.time.Year now(java.time.ZoneId);
@@ -62521,9 +62749,11 @@ package java.time {
method public static java.time.Year of(int);
method public static java.time.Year parse(java.lang.CharSequence);
method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.Year plus(java.time.temporal.TemporalAmount);
method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
method public java.time.Year plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.Year with(java.time.temporal.TemporalAdjuster);
method public java.time.Year with(java.time.temporal.TemporalField, long);
field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -62548,6 +62778,8 @@ package java.time {
method public boolean isValidDay(int);
method public int lengthOfMonth();
method public int lengthOfYear();
+ method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+ method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth minusMonths(long);
method public java.time.YearMonth minusYears(long);
method public static java.time.YearMonth now();
@@ -62557,10 +62789,12 @@ package java.time {
method public static java.time.YearMonth of(int, int);
method public static java.time.YearMonth parse(java.lang.CharSequence);
method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
method public java.time.YearMonth plusMonths(long);
method public java.time.YearMonth plusYears(long);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
method public java.time.YearMonth withMonth(int);
method public java.time.YearMonth withYear(int);
@@ -62584,7 +62818,6 @@ package java.time {
method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
method public int compareTo(java.time.ZoneOffset);
method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
- method public int get(java.time.temporal.TemporalField);
method public java.lang.String getId();
method public long getLong(java.time.temporal.TemporalField);
method public java.time.zone.ZoneRules getRules();
@@ -62595,8 +62828,6 @@ package java.time {
method public static java.time.ZoneOffset ofHoursMinutes(int, int);
method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
method public static java.time.ZoneOffset ofTotalSeconds(int);
- method public <R> R query(java.time.temporal.TemporalQuery<R>);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
field public static final java.time.ZoneOffset MAX;
field public static final java.time.ZoneOffset MIN;
field public static final java.time.ZoneOffset UTC;
@@ -62617,6 +62848,8 @@ package java.time {
method public int getYear();
method public java.time.ZoneId getZone();
method public boolean isSupported(java.time.temporal.TemporalField);
+ method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+ method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime minusDays(long);
method public java.time.ZonedDateTime minusHours(long);
method public java.time.ZonedDateTime minusMinutes(long);
@@ -62637,6 +62870,7 @@ package java.time {
method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+ method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
method public java.time.ZonedDateTime plusDays(long);
method public java.time.ZonedDateTime plusHours(long);
@@ -62646,10 +62880,12 @@ package java.time {
method public java.time.ZonedDateTime plusSeconds(long);
method public java.time.ZonedDateTime plusWeeks(long);
method public java.time.ZonedDateTime plusYears(long);
+ method public java.time.LocalDate toLocalDate();
method public java.time.LocalDateTime toLocalDateTime();
method public java.time.OffsetDateTime toOffsetDateTime();
method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
method public java.time.ZonedDateTime withDayOfMonth(int);
method public java.time.ZonedDateTime withDayOfYear(int);
@@ -62694,17 +62930,27 @@ package java.time.chrono {
method public default boolean isSupported(java.time.temporal.TemporalUnit);
method public abstract int lengthOfMonth();
method public default int lengthOfYear();
+ method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
method public default long toEpochDay();
method public abstract java.lang.String toString();
method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
}
abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+ method public D minus(java.time.temporal.TemporalAmount);
+ method public D minus(long, java.time.temporal.TemporalUnit);
+ method public D plus(java.time.temporal.TemporalAmount);
+ method public D plus(long, java.time.temporal.TemporalUnit);
method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+ method public D with(java.time.temporal.TemporalAdjuster);
+ method public D with(java.time.temporal.TemporalField, long);
}
public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -62721,6 +62967,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
method public default long toEpochSecond(java.time.ZoneOffset);
@@ -62728,6 +62977,7 @@ package java.time.chrono {
method public abstract D toLocalDate();
method public abstract java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
}
@@ -62765,6 +63015,9 @@ package java.time.chrono {
method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
method public abstract boolean isSupported(java.time.temporal.TemporalField);
method public default boolean isSupported(java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+ method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+ method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
method public default long toEpochSecond();
@@ -62773,6 +63026,7 @@ package java.time.chrono {
method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
method public default java.time.LocalTime toLocalTime();
method public abstract java.lang.String toString();
+ method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -62839,6 +63093,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -62850,23 +63105,24 @@ package java.time.chrono {
method public java.time.chrono.HijrahChronology getChronology();
method public java.time.chrono.HijrahEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isLeapYear();
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.HijrahDate now();
method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
method public static java.time.chrono.HijrahDate now(java.time.Clock);
method public static java.time.chrono.HijrahDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
}
public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
method public int getValue();
method public static java.time.chrono.HijrahEra of(int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
method public static final java.time.chrono.HijrahEra[] values();
enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -62891,6 +63147,7 @@ package java.time.chrono {
method public java.time.Period period(int, int, int);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -62923,6 +63180,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -62934,17 +63192,19 @@ package java.time.chrono {
method public java.time.chrono.JapaneseChronology getChronology();
method public java.time.chrono.JapaneseEra getEra();
method public long getLong(java.time.temporal.TemporalField);
- method public boolean isSupported(java.time.temporal.TemporalField);
method public int lengthOfMonth();
- method public int lengthOfYear();
+ method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.JapaneseDate now();
method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
method public static java.time.chrono.JapaneseDate now(java.time.Clock);
method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
method public static java.time.chrono.JapaneseDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
}
public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -62976,6 +63236,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -62988,13 +63249,17 @@ package java.time.chrono {
method public java.time.chrono.MinguoEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.MinguoDate now();
method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
method public static java.time.chrono.MinguoDate now(java.time.Clock);
method public static java.time.chrono.MinguoDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
}
public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -63024,6 +63289,7 @@ package java.time.chrono {
method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
method public int prolepticYear(java.time.chrono.Era, int);
method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+ method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -63036,13 +63302,17 @@ package java.time.chrono {
method public java.time.chrono.ThaiBuddhistEra getEra();
method public long getLong(java.time.temporal.TemporalField);
method public int lengthOfMonth();
+ method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
method public static java.time.chrono.ThaiBuddhistDate now();
method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
- method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
- method public long toEpochDay();
+ method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+ method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+ method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
}
public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -63221,7 +63491,6 @@ package java.time.temporal {
method public int checkValidIntValue(long);
method public long checkValidValue(long);
method public java.time.temporal.TemporalUnit getBaseUnit();
- method public java.lang.String getDisplayName(java.util.Locale);
method public long getFrom(java.time.temporal.TemporalAccessor);
method public java.time.temporal.TemporalUnit getRangeUnit();
method public boolean isDateBased();
@@ -63269,7 +63538,6 @@ package java.time.temporal {
method public java.time.Duration getDuration();
method public boolean isDateBased();
method public boolean isDurationEstimated();
- method public boolean isSupportedBy(java.time.temporal.Temporal);
method public boolean isTimeBased();
method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
method public static final java.time.temporal.ChronoUnit[] values();
@@ -63609,7 +63877,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -63620,11 +63887,7 @@ package java.util {
method public void ensureCapacity(int);
method public void forEach(java.util.function.Consumer<? super E>);
method public E get(int);
- method public boolean removeIf(java.util.function.Predicate<? super E>);
- method public void replaceAll(java.util.function.UnaryOperator<E>);
method public int size();
- method public void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
method public void trimToSize();
}
@@ -63995,6 +64258,7 @@ package java.util {
method public default boolean removeIf(java.util.function.Predicate<? super E>);
method public abstract boolean retainAll(java.util.Collection<?>);
method public abstract int size();
+ method public default java.util.Spliterator<E> spliterator();
method public default java.util.stream.Stream<E> stream();
method public abstract java.lang.Object[] toArray();
method public abstract <T> T[] toArray(T[]);
@@ -64335,18 +64599,7 @@ package java.util {
ctor public HashMap();
ctor public HashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -64357,7 +64610,6 @@ package java.util {
method public java.lang.Object clone();
method public java.util.Iterator<E> iterator();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -64375,9 +64627,11 @@ package java.util {
method public boolean containsValue(java.lang.Object);
method public synchronized java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public synchronized V get(java.lang.Object);
method public synchronized V getOrDefault(java.lang.Object, V);
+ method public synchronized int hashCode();
method public synchronized boolean isEmpty();
method public java.util.Set<K> keySet();
method public synchronized java.util.Enumeration<K> keys();
@@ -64392,6 +64646,7 @@ package java.util {
method public synchronized V replace(K, V);
method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public synchronized int size();
+ method public synchronized java.lang.String toString();
method public java.util.Collection<V> values();
}
@@ -64401,8 +64656,6 @@ package java.util {
ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
method public java.lang.Object clone();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -64513,7 +64766,6 @@ package java.util {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface List<E> implements java.util.Collection {
@@ -65136,6 +65388,7 @@ package java.util {
ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
method public int getOffset(int, int, int, int, int, int);
method public int getRawOffset();
+ method public synchronized int hashCode();
method public boolean inDaylightTime(java.util.Date);
method public void setDSTSavings(int);
method public void setEndRule(int, int, int, int);
@@ -65408,7 +65661,6 @@ package java.util {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public java.util.NavigableMap<K, V> headMap(K, boolean);
method public java.util.SortedMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -65420,9 +65672,6 @@ package java.util {
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.SortedMap<K, V> subMap(K, K);
method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -65450,7 +65699,6 @@ package java.util {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.SortedSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65487,30 +65735,49 @@ package java.util {
ctor public Vector(int);
ctor public Vector();
ctor public Vector(java.util.Collection<? extends E>);
+ method public synchronized boolean add(E);
+ method public synchronized boolean addAll(java.util.Collection<? extends E>);
+ method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
method public synchronized void addElement(E);
method public synchronized int capacity();
method public synchronized java.lang.Object clone();
+ method public synchronized boolean containsAll(java.util.Collection<?>);
method public synchronized void copyInto(java.lang.Object[]);
method public synchronized E elementAt(int);
method public java.util.Enumeration<E> elements();
method public synchronized void ensureCapacity(int);
+ method public synchronized boolean equals(java.lang.Object);
method public synchronized E firstElement();
method public synchronized void forEach(java.util.function.Consumer<? super E>);
method public synchronized E get(int);
+ method public synchronized int hashCode();
method public synchronized int indexOf(java.lang.Object, int);
method public synchronized void insertElementAt(E, int);
+ method public synchronized boolean isEmpty();
+ method public synchronized java.util.Iterator<E> iterator();
method public synchronized E lastElement();
+ method public synchronized int lastIndexOf(java.lang.Object);
method public synchronized int lastIndexOf(java.lang.Object, int);
+ method public synchronized java.util.ListIterator<E> listIterator(int);
+ method public synchronized java.util.ListIterator<E> listIterator();
+ method public synchronized E remove(int);
+ method public synchronized boolean removeAll(java.util.Collection<?>);
method public synchronized void removeAllElements();
method public synchronized boolean removeElement(java.lang.Object);
method public synchronized void removeElementAt(int);
method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+ method protected synchronized void removeRange(int, int);
method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+ method public synchronized boolean retainAll(java.util.Collection<?>);
+ method public synchronized E set(int, E);
method public synchronized void setElementAt(E, int);
method public synchronized void setSize(int);
method public synchronized int size();
method public synchronized void sort(java.util.Comparator<? super E>);
- method public java.util.Spliterator<E> spliterator();
+ method public synchronized java.util.List<E> subList(int, int);
+ method public synchronized java.lang.Object[] toArray();
+ method public synchronized <T> T[] toArray(T[]);
+ method public synchronized java.lang.String toString();
method public synchronized void trimToSize();
field protected int capacityIncrement;
field protected int elementCount;
@@ -65523,8 +65790,6 @@ package java.util {
ctor public WeakHashMap();
ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
}
}
@@ -65559,7 +65824,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -65750,13 +66014,9 @@ package java.util.concurrent {
ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
ctor public ConcurrentHashMap(int, float);
ctor public ConcurrentHashMap(int, float, int);
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public boolean contains(java.lang.Object);
method public java.util.Enumeration<V> elements();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -65765,14 +66025,11 @@ package java.util.concurrent {
method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
method public void forEachValue(long, java.util.function.Consumer<? super V>);
method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
method public java.util.Enumeration<K> keys();
method public long mappingCount();
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
- method public V putIfAbsent(K, V);
method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -65792,10 +66049,6 @@ package java.util.concurrent {
method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -65856,7 +66109,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -65867,7 +66119,6 @@ package java.util.concurrent {
method public E peek();
method public E poll();
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -65899,9 +66150,6 @@ package java.util.concurrent {
method public K ceilingKey(K);
method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
method public java.util.Comparator<? super K> comparator();
- method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
- method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
- method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.NavigableSet<K> descendingKeySet();
method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -65909,25 +66157,18 @@ package java.util.concurrent {
method public K firstKey();
method public java.util.Map.Entry<K, V> floorEntry(K);
method public K floorKey(K);
- method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
- method public V getOrDefault(java.lang.Object, V);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
method public java.util.Map.Entry<K, V> higherEntry(K);
method public K higherKey(K);
+ method public java.util.NavigableSet<K> keySet();
method public java.util.Map.Entry<K, V> lastEntry();
method public K lastKey();
method public java.util.Map.Entry<K, V> lowerEntry(K);
method public K lowerKey(K);
- method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
method public java.util.NavigableSet<K> navigableKeySet();
method public java.util.Map.Entry<K, V> pollFirstEntry();
method public java.util.Map.Entry<K, V> pollLastEntry();
- method public V putIfAbsent(K, V);
- method public boolean remove(java.lang.Object, java.lang.Object);
- method public boolean replace(K, V, V);
- method public V replace(K, V);
- method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -65955,7 +66196,6 @@ package java.util.concurrent {
method public E pollFirst();
method public E pollLast();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
method public java.util.NavigableSet<E> subSet(E, E);
method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -66002,9 +66242,7 @@ package java.util.concurrent {
ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
method public void forEach(java.util.function.Consumer<? super E>);
method public java.util.Iterator<E> iterator();
- method public boolean removeIf(java.util.function.Predicate<? super E>);
method public int size();
- method public java.util.Spliterator<E> spliterator();
}
public class CountDownLatch {
@@ -66163,6 +66401,7 @@ package java.util.concurrent {
method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
method public boolean hasQueuedSubmissions();
method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
method public boolean isQuiescent();
method public boolean isShutdown();
method public boolean isTerminated();
@@ -66172,6 +66411,9 @@ package java.util.concurrent {
method public void shutdown();
method public java.util.List<java.lang.Runnable> shutdownNow();
method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+ method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+ method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
}
@@ -66295,7 +66537,6 @@ package java.util.concurrent {
method public E removeLast();
method public boolean removeLastOccurrence(java.lang.Object);
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public E takeFirst() throws java.lang.InterruptedException;
method public E takeLast() throws java.lang.InterruptedException;
@@ -66316,7 +66557,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -66336,7 +66576,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
method public void transfer(E) throws java.lang.InterruptedException;
method public boolean tryTransfer(E);
@@ -66384,7 +66623,6 @@ package java.util.concurrent {
method public void put(E);
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -66488,7 +66726,6 @@ package java.util.concurrent {
method public void put(E) throws java.lang.InterruptedException;
method public int remainingCapacity();
method public int size();
- method public java.util.Spliterator<E> spliterator();
method public E take() throws java.lang.InterruptedException;
}
@@ -66500,9 +66737,11 @@ package java.util.concurrent {
method public static java.util.concurrent.ThreadLocalRandom current();
method public double nextDouble(double);
method public double nextDouble(double, double);
+ method public double nextGaussian();
method public int nextInt(int, int);
method public long nextLong(long);
method public long nextLong(long, long);
+ method public void setSeed(long);
}
public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -66516,6 +66755,7 @@ package java.util.concurrent {
method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
method public void execute(java.lang.Runnable);
+ method protected void finalize();
method public int getActiveCount();
method public long getCompletedTaskCount();
method public int getCorePoolSize();
@@ -67386,8 +67626,11 @@ package java.util.jar {
ctor public JarFile(java.io.File) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+ method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+ method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
method public java.util.jar.JarEntry getJarEntry(java.lang.String);
method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+ method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
}
@@ -67467,6 +67710,8 @@ package java.util.logging {
public class ConsoleHandler extends java.util.logging.StreamHandler {
ctor public ConsoleHandler();
+ method public void close();
+ method public void publish(java.util.logging.LogRecord);
}
public class ErrorManager {
@@ -68256,6 +68501,7 @@ package java.util.zip {
method public int deflate(byte[]);
method public int deflate(byte[], int, int, int);
method public void end();
+ method protected void finalize();
method public void finish();
method public boolean finished();
method public int getAdler();
@@ -68288,6 +68534,8 @@ package java.util.zip {
ctor public DeflaterInputStream(java.io.InputStream);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+ method public void mark(int);
+ method public void reset() throws java.io.IOException;
field protected final byte[] buf;
field protected final java.util.zip.Deflater def;
}
@@ -68318,6 +68566,7 @@ package java.util.zip {
ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field protected java.util.zip.CRC32 crc;
}
@@ -68325,6 +68574,7 @@ package java.util.zip {
ctor public Inflater(boolean);
ctor public Inflater();
method public void end();
+ method protected void finalize();
method public boolean finished();
method public int getAdler();
method public long getBytesRead();
@@ -68451,6 +68701,7 @@ package java.util.zip {
ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
method public void close() throws java.io.IOException;
method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+ method protected void finalize() throws java.io.IOException;
method public java.lang.String getComment();
method public java.util.zip.ZipEntry getEntry(java.lang.String);
method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -68557,6 +68808,7 @@ package java.util.zip {
method public void setComment(java.lang.String);
method public void setLevel(int);
method public void setMethod(int);
+ method public synchronized void write(byte[], int, int) throws java.io.IOException;
field public static final int CENATT = 36; // 0x24
field public static final int CENATX = 38; // 0x26
field public static final int CENCOM = 32; // 0x20
@@ -68713,6 +68965,7 @@ package javax.crypto {
public class ExemptionMechanism {
ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+ method protected void finalize();
method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -71101,6 +71354,7 @@ package javax.xml.transform {
ctor public TransformerException(java.lang.String, java.lang.Throwable);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+ method public java.lang.Throwable getCause();
method public java.lang.Throwable getException();
method public java.lang.String getLocationAsString();
method public javax.xml.transform.SourceLocator getLocator();
@@ -71371,6 +71625,7 @@ package javax.xml.xpath {
public class XPathException extends java.lang.Exception {
ctor public XPathException(java.lang.String);
ctor public XPathException(java.lang.Throwable);
+ method public java.lang.Throwable getCause();
}
public abstract interface XPathExpression {
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 46f115f9491b..79e5407a17d3 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -455,6 +455,7 @@ public final class LoadedApk {
if (!outZipPaths.contains(lib)) {
outZipPaths.add(index, lib);
index++;
+ appendApkLibPathIfNeeded(lib, aInfo, outLibPaths);
}
}
}
@@ -463,11 +464,33 @@ public final class LoadedApk {
for (String lib : instrumentationLibs) {
if (!outZipPaths.contains(lib)) {
outZipPaths.add(0, lib);
+ appendApkLibPathIfNeeded(lib, aInfo, outLibPaths);
}
}
}
}
+ /**
+ * This method appends a path to the appropriate native library folder of a
+ * library if this library is hosted in an APK. This allows support for native
+ * shared libraries. The library API is determined based on the application
+ * ABI.
+ *
+ * @param path Path to the library.
+ * @param applicationInfo The application depending on the library.
+ * @param outLibPaths List to which to add the native lib path if needed.
+ */
+ private static void appendApkLibPathIfNeeded(@NonNull String path,
+ @NonNull ApplicationInfo applicationInfo, @Nullable List<String> outLibPaths) {
+ // Looking at the suffix is a little hacky but a safe and simple solution.
+ // We will be revisiting code in the next release and clean this up.
+ if (outLibPaths != null && applicationInfo.primaryCpuAbi != null && path.endsWith(".apk")) {
+ if (applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O) {
+ outLibPaths.add(path + "!/lib/" + applicationInfo.primaryCpuAbi);
+ }
+ }
+ }
+
/*
* All indices received by the super class should be shifted by 1 when accessing mSplitNames,
* etc. The super class assumes the base APK is index 0, while the PackageManager APIs don't
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 042eece68b53..b7d3f578df27 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -604,7 +604,7 @@ public final class PendingIntent implements Parcelable {
/**
* Retrieve a PendingIntent that will start a foreground service, like calling
- * {@link Context#startService Context.startForegroundService()}. The start
+ * {@link Context#startForegroundService Context.startForegroundService()}. The start
* arguments given to the service will come from the extras of the Intent.
*
* <p class="note">For security reasons, the {@link android.content.Intent}
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 2137f13f0564..1b88ce7c3a04 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -6009,6 +6009,10 @@ public class PackageParser {
}
}
+ public boolean isLibrary() {
+ return staticSharedLibName != null || !ArrayUtils.isEmpty(libraryNames);
+ }
+
public List<String> getAllCodePaths() {
ArrayList<String> paths = new ArrayList<>();
paths.add(baseCodePath);
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
index b3938cbc3bc9..6825d363b918 100644
--- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
@@ -158,7 +158,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
}
@Override
- public synchronized int capture(CaptureRequest request, CaptureCallback callback,
+ public int capture(CaptureRequest request, CaptureCallback callback,
Handler handler) throws CameraAccessException {
if (request == null) {
throw new IllegalArgumentException("request must not be null");
@@ -169,21 +169,23 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
throw new IllegalArgumentException("capture request was created for another session");
}
- checkNotClosed();
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
- handler = checkHandler(handler, callback);
+ handler = checkHandler(handler, callback);
- if (DEBUG) {
- Log.v(TAG, mIdString + "capture - request " + request + ", callback " + callback +
- " handler " + handler);
- }
+ if (DEBUG) {
+ Log.v(TAG, mIdString + "capture - request " + request + ", callback " + callback +
+ " handler " + handler);
+ }
- return addPendingSequence(mDeviceImpl.capture(request,
- createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ return addPendingSequence(mDeviceImpl.capture(request,
+ createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ }
}
@Override
- public synchronized int captureBurst(List<CaptureRequest> requests, CaptureCallback callback,
+ public int captureBurst(List<CaptureRequest> requests, CaptureCallback callback,
Handler handler) throws CameraAccessException {
if (requests == null) {
throw new IllegalArgumentException("Requests must not be null");
@@ -203,22 +205,24 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
}
}
- checkNotClosed();
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
- handler = checkHandler(handler, callback);
+ handler = checkHandler(handler, callback);
- if (DEBUG) {
- CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
- Log.v(TAG, mIdString + "captureBurst - requests " + Arrays.toString(requestArray) +
- ", callback " + callback + " handler " + handler);
- }
+ if (DEBUG) {
+ CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
+ Log.v(TAG, mIdString + "captureBurst - requests " + Arrays.toString(requestArray) +
+ ", callback " + callback + " handler " + handler);
+ }
- return addPendingSequence(mDeviceImpl.captureBurst(requests,
- createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ return addPendingSequence(mDeviceImpl.captureBurst(requests,
+ createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ }
}
@Override
- public synchronized int setRepeatingRequest(CaptureRequest request, CaptureCallback callback,
+ public int setRepeatingRequest(CaptureRequest request, CaptureCallback callback,
Handler handler) throws CameraAccessException {
if (request == null) {
throw new IllegalArgumentException("request must not be null");
@@ -226,21 +230,23 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
throw new IllegalArgumentException("repeating reprocess requests are not supported");
}
- checkNotClosed();
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
- handler = checkHandler(handler, callback);
+ handler = checkHandler(handler, callback);
- if (DEBUG) {
- Log.v(TAG, mIdString + "setRepeatingRequest - request " + request + ", callback " +
- callback + " handler" + " " + handler);
- }
+ if (DEBUG) {
+ Log.v(TAG, mIdString + "setRepeatingRequest - request " + request + ", callback " +
+ callback + " handler" + " " + handler);
+ }
- return addPendingSequence(mDeviceImpl.setRepeatingRequest(request,
- createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ return addPendingSequence(mDeviceImpl.setRepeatingRequest(request,
+ createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ }
}
@Override
- public synchronized int setRepeatingBurst(List<CaptureRequest> requests,
+ public int setRepeatingBurst(List<CaptureRequest> requests,
CaptureCallback callback, Handler handler) throws CameraAccessException {
if (requests == null) {
throw new IllegalArgumentException("requests must not be null");
@@ -255,34 +261,39 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
}
}
- checkNotClosed();
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
- handler = checkHandler(handler, callback);
+ handler = checkHandler(handler, callback);
- if (DEBUG) {
- CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
- Log.v(TAG, mIdString + "setRepeatingBurst - requests " + Arrays.toString(requestArray) +
- ", callback " + callback + " handler" + "" + handler);
- }
+ if (DEBUG) {
+ CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
+ Log.v(TAG, mIdString + "setRepeatingBurst - requests " +
+ Arrays.toString(requestArray) + ", callback " + callback +
+ " handler" + "" + handler);
+ }
- return addPendingSequence(mDeviceImpl.setRepeatingBurst(requests,
- createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ return addPendingSequence(mDeviceImpl.setRepeatingBurst(requests,
+ createCaptureCallbackProxy(handler, callback), mDeviceHandler));
+ }
}
@Override
- public synchronized void stopRepeating() throws CameraAccessException {
- checkNotClosed();
+ public void stopRepeating() throws CameraAccessException {
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
- if (DEBUG) {
- Log.v(TAG, mIdString + "stopRepeating");
- }
+ if (DEBUG) {
+ Log.v(TAG, mIdString + "stopRepeating");
+ }
- mDeviceImpl.stopRepeating();
+ mDeviceImpl.stopRepeating();
+ }
}
@Override
public void abortCaptures() throws CameraAccessException {
- synchronized (this) {
+ synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
if (DEBUG) {
@@ -296,13 +307,9 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
mAborting = true;
mAbortDrainer.taskStarted();
- }
- synchronized (mDeviceImpl.mInterfaceLock) {
- synchronized (this) {
- mDeviceImpl.flush();
- // The next BUSY -> IDLE set of transitions will mark the end of the abort.
- }
+ mDeviceImpl.flush();
+ // The next BUSY -> IDLE set of transitions will mark the end of the abort.
}
}
@@ -332,7 +339,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
*/
@Override
public void replaceSessionClose() {
- synchronized (this) {
+ synchronized (mDeviceImpl.mInterfaceLock) {
/*
* In order for creating new sessions to be fast, the new session should be created
* before the old session is closed.
@@ -357,13 +364,13 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
// configuration for the new session. If it was already called, then we don't care,
// since it won't get called again.
mSkipUnconfigure = true;
+ close();
}
- close();
}
@Override
public void close() {
- synchronized (this) {
+ synchronized (mDeviceImpl.mInterfaceLock) {
if (mClosed) {
if (DEBUG) Log.v(TAG, mIdString + "close - reentering");
return;
@@ -372,42 +379,36 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
if (DEBUG) Log.v(TAG, mIdString + "close - first time");
mClosed = true;
- }
- synchronized (mDeviceImpl.mInterfaceLock) {
- synchronized (this) {
- /*
- * Flush out any repeating request. Since camera is closed, no new requests
- * can be queued, and eventually the entire request queue will be drained.
- *
- * 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
+ /*
+ * Flush out any repeating request. Since camera is closed, no new requests
+ * can be queued, and eventually the entire request queue will be drained.
+ *
+ * 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
- // 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.
+ // 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 callback immediately and return
- mStateCallback.onClosed(this);
- return;
- } catch (CameraAccessException e) {
- // OK: close does not throw checked exceptions.
- Log.e(TAG, mIdString + "Exception while stopping repeating: ", e);
+ // Short-circuit; queue callback immediately and return
+ mStateCallback.onClosed(this);
+ return;
+ } catch (CameraAccessException e) {
+ // OK: close does not throw checked exceptions.
+ Log.e(TAG, mIdString + "Exception while stopping repeating: ", e);
- // TODO: call onError instead of onClosed if this happens
- }
+ // TODO: call onError instead of onClosed if this happens
}
- }
- synchronized (this) {
// If no sequences are pending, fire #onClosed immediately
mSequenceDrainer.beginDrain();
}
@@ -552,6 +553,8 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
@Override
public CameraDeviceImpl.StateCallbackKK getDeviceStateCallback() {
final CameraCaptureSession session = this;
+ final Object interfaceLock = mDeviceImpl.mInterfaceLock;
+
return new CameraDeviceImpl.StateCallbackKK() {
private boolean mBusy = false;
@@ -588,7 +591,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
boolean isAborting;
if (DEBUG) Log.v(TAG, mIdString + "onIdle");
- synchronized (session) {
+ synchronized (interfaceLock) {
isAborting = mAborting;
}
@@ -606,7 +609,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
if (mBusy && isAborting) {
mAbortDrainer.taskFinished();
- synchronized (session) {
+ synchronized (interfaceLock) {
mAborting = false;
}
}
@@ -729,7 +732,7 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
@Override
public void onDrained() {
if (DEBUG) Log.v(TAG, mIdString + "onAbortDrained");
- synchronized (CameraCaptureSessionImpl.this) {
+ synchronized (mDeviceImpl.mInterfaceLock) {
/*
* Any queued aborts have now completed.
*
@@ -757,7 +760,6 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
// Take device lock before session lock so that we can call back into device
// without causing a deadlock
synchronized (mDeviceImpl.mInterfaceLock) {
- synchronized (CameraCaptureSessionImpl.this) {
/*
* The device is now IDLE, and has settled. It will not transition to
* ACTIVE or BUSY again by itself.
@@ -766,33 +768,31 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession
*
* This operation is idempotent; a session will not be closed twice.
*/
- if (DEBUG)
- Log.v(TAG, mIdString + "Session drain complete, skip unconfigure: " +
- mSkipUnconfigure);
-
- // Fast path: A new capture session has replaced this one; don't wait for idle
- // as we won't get state updates any more anyway.
- if (mSkipUnconfigure) {
- return;
- }
+ if (DEBUG)
+ Log.v(TAG, mIdString + "Session drain complete, skip unconfigure: " +
+ mSkipUnconfigure);
- // Final slow path: unconfigure the camera, no session has replaced us and
- // everything is idle.
- try {
- // begin transition to unconfigured
- mDeviceImpl.configureStreamsChecked(/*inputConfig*/null, /*outputs*/null,
- /*operatingMode*/ ICameraDeviceUser.NORMAL_MODE);
- } catch (CameraAccessException e) {
- // OK: do not throw checked exceptions.
- Log.e(TAG, mIdString + "Exception while unconfiguring outputs: ", e);
-
- // TODO: call onError instead of onClosed if this happens
- } catch (IllegalStateException e) {
- // Camera is already closed, so nothing left to do
- if (DEBUG) Log.v(TAG, mIdString +
- "Camera was already closed or busy, skipping unconfigure");
- }
+ // Fast path: A new capture session has replaced this one; don't wait for idle
+ // as we won't get state updates any more anyway.
+ if (mSkipUnconfigure) {
+ return;
+ }
+
+ // Final slow path: unconfigure the camera, no session has replaced us and
+ // everything is idle.
+ try {
+ // begin transition to unconfigured
+ mDeviceImpl.configureStreamsChecked(/*inputConfig*/null, /*outputs*/null,
+ /*operatingMode*/ ICameraDeviceUser.NORMAL_MODE);
+ } catch (CameraAccessException e) {
+ // OK: do not throw checked exceptions.
+ Log.e(TAG, mIdString + "Exception while unconfiguring outputs: ", e);
+ // TODO: call onError instead of onClosed if this happens
+ } catch (IllegalStateException e) {
+ // Camera is already closed, so nothing left to do
+ if (DEBUG) Log.v(TAG, mIdString +
+ "Camera was already closed or busy, skipping unconfigure");
}
}
}
diff --git a/core/java/android/hardware/radio/ITuner.aidl b/core/java/android/hardware/radio/ITuner.aidl
index 1fc71e07cdb7..69e135d448e7 100644
--- a/core/java/android/hardware/radio/ITuner.aidl
+++ b/core/java/android/hardware/radio/ITuner.aidl
@@ -22,6 +22,8 @@ import android.hardware.radio.RadioManager;
interface ITuner {
void close();
+ boolean isClosed();
+
/**
* @throws IllegalArgumentException if config is not valid or null
*/
diff --git a/core/java/android/hardware/radio/TunerAdapter.java b/core/java/android/hardware/radio/TunerAdapter.java
index a45749401284..710dc1021dd8 100644
--- a/core/java/android/hardware/radio/TunerAdapter.java
+++ b/core/java/android/hardware/radio/TunerAdapter.java
@@ -227,7 +227,11 @@ class TunerAdapter extends RadioTuner {
@Override
public boolean hasControl() {
- // TODO(b/36863239): forward to mTuner
- throw new RuntimeException("Not implemented");
+ try {
+ // don't rely on mIsClosed, as tuner might get closed internally
+ return !mTuner.isClosed();
+ } catch (RemoteException e) {
+ return false;
+ }
}
}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index b178d814a3f7..cf4fd99c3ec2 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -5160,9 +5160,7 @@ public abstract class BatteryStats implements Parcelable {
Uid.Proc.ExcessivePower ew = ps.getExcessivePower(e);
if (ew != null) {
pw.print(prefix); pw.print(" * Killed for ");
- if (ew.type == Uid.Proc.ExcessivePower.TYPE_WAKE) {
- pw.print("wake lock");
- } else if (ew.type == Uid.Proc.ExcessivePower.TYPE_CPU) {
+ if (ew.type == Uid.Proc.ExcessivePower.TYPE_CPU) {
pw.print("cpu");
} else {
pw.print("unknown");
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4b65c6e3aa3c..c7ae91a7796c 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -408,6 +408,21 @@ public final class Settings {
"android.settings.BLUETOOTH_SETTINGS";
/**
+ * Activity Action: Show settings to allow configuration of Assist Gesture.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_ASSIST_GESTURE_SETTINGS =
+ "android.settings.ASSIST_GESTURE_SETTINGS";
+
+ /**
* Activity Action: Show settings to allow configuration of cast endpoints.
* <p>
* In some cases, a matching Activity may not exist, so ensure you
@@ -9170,9 +9185,11 @@ public final class Settings {
* gc_min_interval (long)
* full_pss_min_interval (long)
* full_pss_lowered_interval (long)
- * power_check_delay (long)
- * wake_lock_min_check_duration (long)
- * cpu_min_check_duration (long)
+ * power_check_interval (long)
+ * power_check_max_cpu_1 (int)
+ * power_check_max_cpu_2 (int)
+ * power_check_max_cpu_3 (int)
+ * power_check_max_cpu_4 (int)
* service_usage_interaction_time (long)
* usage_stats_interaction_interval (long)
* service_restart_duration (long)
diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java
index 07c3503934ae..394bd0ac70f7 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -208,12 +208,22 @@ public abstract class AutofillService extends Service {
}
/**
- * Returns the {@link FillEventHistory.Event events} since the last {@link FillResponse} was
- * returned.
+ * Gets the events that happened after the last
+ * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)}
+ * call.
*
- * <p>The history is not persisted over reboots.
+ * <p>This method is typically used to keep track of previous user actions to optimize further
+ * requests. For example, the service might return email addresses in alphabetical order by
+ * default, but change that order based on the address the user picked on previous requests.
*
- * @return The history or {@code null} if there are not events.
+ * <p>The history is not persisted over reboots, and it's cleared every time the service
+ * replies to a {@link #onFillRequest(FillRequest, CancellationSignal, FillCallback)} by calling
+ * {@link FillCallback#onSuccess(FillResponse)} or {@link FillCallback#onFailure(CharSequence)}
+ * (if the service doesn't call any of these methods, the history will clear out after some
+ * pre-defined time). Hence, the service should call {@link #getFillEventHistory()} before
+ * finishing the {@link FillCallback}.
+ *
+ * @return The history or {@code null} if there are no events.
*/
@Nullable public final FillEventHistory getFillEventHistory() {
AutofillManager afm = getSystemService(AutofillManager.class);
diff --git a/core/java/android/service/autofill/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java
index 3d72fccece9c..f7dc1c58ade1 100644
--- a/core/java/android/service/autofill/FillEventHistory.java
+++ b/core/java/android/service/autofill/FillEventHistory.java
@@ -33,7 +33,20 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Describes what happened after the latest call to {@link FillCallback#onSuccess(FillResponse)}.
+ * Describes what happened after the last
+ * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)}
+ * call.
+ *
+ * <p>This history is typically used to keep track of previous user actions to optimize further
+ * requests. For example, the service might return email addresses in alphabetical order by
+ * default, but change that order based on the address the user picked on previous requests.
+ *
+ * <p>The history is not persisted over reboots, and it's cleared every time the service
+ * replies to a
+ * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)}
+ * by calling {@link FillCallback#onSuccess(FillResponse)} or
+ * {@link FillCallback#onFailure(CharSequence)} (if the service doesn't call any of these methods,
+ * the history will clear out after some pre-defined time).
*/
public final class FillEventHistory implements Parcelable {
/**
@@ -41,6 +54,11 @@ public final class FillEventHistory implements Parcelable {
*/
private final int mServiceUid;
+ /**
+ * Not in parcel. The ID of the autofill session that created the {@link FillResponse}.
+ */
+ private final int mSessionId;
+
@Nullable private final Bundle mClientState;
@Nullable List<Event> mEvents;
@@ -55,10 +73,17 @@ public final class FillEventHistory implements Parcelable {
return mServiceUid;
}
+ /** @hide */
+ public int getSessionId() {
+ return mSessionId;
+ }
+
/**
- * Returns the client state of the {@link FillResponse}.
+ * Returns the client state set in the previous {@link FillResponse}.
*
- * @return The client state set by the last {@link FillResponse}
+ * <p><b>NOTE: </b>the state is associated with the app that was autofilled in the previous
+ * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)}
+ * , which is not necessary the same app being autofilled now.
*/
@Nullable public Bundle getClientState() {
return mClientState;
@@ -87,9 +112,10 @@ public final class FillEventHistory implements Parcelable {
/**
* @hide
*/
- public FillEventHistory(int serviceUid, @Nullable Bundle clientState) {
+ public FillEventHistory(int serviceUid, int sessionId, @Nullable Bundle clientState) {
mClientState = clientState;
mServiceUid = serviceUid;
+ mSessionId = sessionId;
}
@Override
@@ -190,7 +216,7 @@ public final class FillEventHistory implements Parcelable {
new Parcelable.Creator<FillEventHistory>() {
@Override
public FillEventHistory createFromParcel(Parcel parcel) {
- FillEventHistory selection = new FillEventHistory(0, parcel.readBundle());
+ FillEventHistory selection = new FillEventHistory(0, 0, parcel.readBundle());
int numEvents = parcel.readInt();
for (int i = 0; i < numEvents; i++) {
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 7e0ade4c8d20..b035b7fd53ed 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -838,6 +838,8 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d",
System.identityHashCode(this), frameNumber));
}
+ mRTLastReportedPosition.setEmpty();
+
if (mSurfaceControl == null) {
return;
}
@@ -858,7 +860,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
Log.e(TAG, "Exception configuring surface", ex);
}
}
- mRTLastReportedPosition.setEmpty();
}
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index be56356a30b0..3d6af414a3a0 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -1139,11 +1139,18 @@ public abstract class Window {
}
/**
- * <p>Set the color mode of the window. Setting the color mode might
+ * <p>Sets the requested color mode of the window. The requested the color mode might
* override the window's pixel {@link WindowManager.LayoutParams#format format}.</p>
*
- * <p>The color mode must be one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
+ * <p>The requested color mode must be one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
* {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT} or {@link ActivityInfo#COLOR_MODE_HDR}.</p>
+ *
+ * <p>The requested color mode is not guaranteed to be honored. Please refer to
+ * {@link #getColorMode()} for more information.</p>
+ *
+ * @see #getColorMode()
+ * @see Display#isWideColorGamut()
+ * @see Configuration#isScreenWideColorGamut()
*/
public void setColorMode(@ActivityInfo.ColorMode int colorMode) {
final WindowManager.LayoutParams attrs = getAttributes();
@@ -1152,8 +1159,16 @@ public abstract class Window {
}
/**
- * Returns the color mode of the window, one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
- * {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT} or {@link ActivityInfo#COLOR_MODE_HDR}.
+ * Returns the requested color mode of the window, one of
+ * {@link ActivityInfo#COLOR_MODE_DEFAULT}, {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
+ * or {@link ActivityInfo#COLOR_MODE_HDR}. If {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
+ * was requested it is possible the window will not be put in wide color gamut mode depending
+ * on device and display support for that mode. Use {@link #isWideColorGamut} to determine
+ * if the window is currently in wide color gamut mode.
+ *
+ * @see #setColorMode(int)
+ * @see Display#isWideColorGamut()
+ * @see Configuration#isScreenWideColorGamut()
*/
@ActivityInfo.ColorMode
public int getColorMode() {
@@ -1161,6 +1176,18 @@ public abstract class Window {
}
/**
+ * Returns true if this window's color mode is {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT},
+ * the display has a wide color gamut and this device supports wide color gamut rendering.
+ *
+ * @see Display#isWideColorGamut()
+ * @see Configuration#isScreenWideColorGamut()
+ */
+ public boolean isWideColorGamut() {
+ return getColorMode() == ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT
+ && getContext().getResources().getConfiguration().isScreenWideColorGamut();
+ }
+
+ /**
* Set the amount of dim behind the window when using
* {@link WindowManager.LayoutParams#FLAG_DIM_BEHIND}. This overrides
* the default dim amount of that is selected by the Window based on
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 1b6b3923d130..6a482423e043 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -18,7 +18,6 @@ package android.webkit;
import android.annotation.SystemApi;
import android.app.ActivityManager;
-import android.app.ActivityManagerInternal;
import android.app.AppGlobals;
import android.app.Application;
import android.content.Context;
@@ -27,27 +26,15 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Build;
-import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.StrictMode;
-import android.os.SystemProperties;
import android.os.Trace;
-import android.text.TextUtils;
import android.util.AndroidRuntimeException;
import android.util.ArraySet;
import android.util.Log;
-import com.android.server.LocalServices;
-
-import dalvik.system.VMRuntime;
-
import java.lang.reflect.Method;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
/**
* Top level factory, used creating all the main WebView implementation classes.
@@ -67,14 +54,8 @@ public final class WebViewFactory {
private static final String NULL_WEBVIEW_FACTORY =
"com.android.webview.nullwebview.NullWebViewFactoryProvider";
- private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_32 =
- "/data/misc/shared_relro/libwebviewchromium32.relro";
- private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_64 =
- "/data/misc/shared_relro/libwebviewchromium64.relro";
-
public static final String CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY =
"persist.sys.webview.vmsize";
- private static final long CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES = 100 * 1024 * 1024;
private static final String LOGTAG = "WebViewFactory";
@@ -84,7 +65,6 @@ public final class WebViewFactory {
// same provider.
private static WebViewFactoryProvider sProviderInstance;
private static final Object sProviderLock = new Object();
- private static boolean sAddressSpaceReserved = false;
private static PackageInfo sPackageInfo;
// Error codes for loadWebViewNativeLibraryFromPackage
@@ -120,7 +100,7 @@ public final class WebViewFactory {
return "Unknown";
}
- private static class MissingWebViewPackageException extends Exception {
+ static class MissingWebViewPackageException extends Exception {
public MissingWebViewPackageException(String message) { super(message); }
public MissingWebViewPackageException(Exception e) { super(e); }
}
@@ -183,7 +163,7 @@ public final class WebViewFactory {
}
try {
- int loadNativeRet = loadNativeLibrary(clazzLoader, packageInfo);
+ int loadNativeRet = WebViewLibraryLoader.loadNativeLibrary(clazzLoader, packageInfo);
// If we failed waiting for relro we want to return that fact even if we successfully
// load the relro file.
if (loadNativeRet == LIBLOAD_SUCCESS) return response.status;
@@ -414,7 +394,7 @@ public final class WebViewFactory {
ClassLoader clazzLoader = webViewContext.getClassLoader();
Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.loadNativeLibrary()");
- loadNativeLibrary(clazzLoader, sPackageInfo);
+ WebViewLibraryLoader.loadNativeLibrary(clazzLoader, sPackageInfo);
Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW);
Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()");
@@ -450,20 +430,7 @@ public final class WebViewFactory {
*/
public static void prepareWebViewInZygote() {
try {
- System.loadLibrary("webviewchromium_loader");
- long addressSpaceToReserve =
- SystemProperties.getLong(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
- CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
- sAddressSpaceReserved = nativeReserveAddressSpace(addressSpaceToReserve);
-
- if (sAddressSpaceReserved) {
- if (DEBUG) {
- Log.v(LOGTAG, "address space reserved: " + addressSpaceToReserve + " bytes");
- }
- } else {
- Log.e(LOGTAG, "reserving " + addressSpaceToReserve +
- " bytes of address space failed");
- }
+ WebViewLibraryLoader.reserveAddressSpaceInZygote();
} catch (Throwable t) {
// Log and discard errors at this stage as we must not crash the zygote.
Log.e(LOGTAG, "error preparing native loader", t);
@@ -479,13 +446,13 @@ public final class WebViewFactory {
// waiting on relro creation.
if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
if (DEBUG) Log.v(LOGTAG, "Create 32 bit relro");
- createRelroFile(false /* is64Bit */, nativeLibraryPaths);
+ WebViewLibraryLoader.createRelroFile(false /* is64Bit */, nativeLibraryPaths);
numRelros++;
}
if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
if (DEBUG) Log.v(LOGTAG, "Create 64 bit relro");
- createRelroFile(true /* is64Bit */, nativeLibraryPaths);
+ WebViewLibraryLoader.createRelroFile(true /* is64Bit */, nativeLibraryPaths);
numRelros++;
}
return numRelros;
@@ -501,49 +468,7 @@ public final class WebViewFactory {
fixupStubApplicationInfo(packageInfo.applicationInfo,
AppGlobals.getInitialApplication().getPackageManager());
- nativeLibs = WebViewFactory.getWebViewNativeLibraryPaths(packageInfo);
- if (nativeLibs != null) {
- long newVmSize = 0L;
-
- for (String path : nativeLibs) {
- if (path == null || TextUtils.isEmpty(path)) continue;
- if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
- File f = new File(path);
- if (f.exists()) {
- newVmSize = Math.max(newVmSize, f.length());
- continue;
- }
- if (path.contains("!/")) {
- String[] split = TextUtils.split(path, "!/");
- if (split.length == 2) {
- try (ZipFile z = new ZipFile(split[0])) {
- ZipEntry e = z.getEntry(split[1]);
- if (e != null && e.getMethod() == ZipEntry.STORED) {
- newVmSize = Math.max(newVmSize, e.getSize());
- continue;
- }
- }
- catch (IOException e) {
- Log.e(LOGTAG, "error reading APK file " + split[0] + ", ", e);
- }
- }
- }
- Log.e(LOGTAG, "error sizing load for " + path);
- }
-
- if (DEBUG) {
- Log.v(LOGTAG, "Based on library size, need " + newVmSize +
- " bytes of address space.");
- }
- // The required memory can be larger than the file on disk (due to .bss), and an
- // upgraded version of the library will likely be larger, so always attempt to
- // reserve twice as much as we think to allow for the library to grow during this
- // boot cycle.
- newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
- Log.d(LOGTAG, "Setting new address space to " + newVmSize);
- SystemProperties.set(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
- Long.toString(newVmSize));
- }
+ nativeLibs = WebViewLibraryLoader.updateWebViewZygoteVmSize(packageInfo);
} catch (Throwable t) {
// Log and discard errors at this stage as we must not crash the system server.
Log.e(LOGTAG, "error preparing webview native library", t);
@@ -554,173 +479,6 @@ public final class WebViewFactory {
return prepareWebViewInSystemServer(nativeLibs);
}
- private static String getLoadFromApkPath(String apkPath,
- String[] abiList,
- String nativeLibFileName)
- throws MissingWebViewPackageException {
- // Search the APK for a native library conforming to a listed ABI.
- try (ZipFile z = new ZipFile(apkPath)) {
- for (String abi : abiList) {
- final String entry = "lib/" + abi + "/" + nativeLibFileName;
- ZipEntry e = z.getEntry(entry);
- if (e != null && e.getMethod() == ZipEntry.STORED) {
- // Return a path formatted for dlopen() load from APK.
- return apkPath + "!/" + entry;
- }
- }
- } catch (IOException e) {
- throw new MissingWebViewPackageException(e);
- }
- return "";
- }
-
- private static String[] getWebViewNativeLibraryPaths(PackageInfo packageInfo)
- throws MissingWebViewPackageException {
- ApplicationInfo ai = packageInfo.applicationInfo;
- final String NATIVE_LIB_FILE_NAME = getWebViewLibrary(ai);
-
- String path32;
- String path64;
- boolean primaryArchIs64bit = VMRuntime.is64BitAbi(ai.primaryCpuAbi);
- if (!TextUtils.isEmpty(ai.secondaryCpuAbi)) {
- // Multi-arch case.
- if (primaryArchIs64bit) {
- // Primary arch: 64-bit, secondary: 32-bit.
- path64 = ai.nativeLibraryDir;
- path32 = ai.secondaryNativeLibraryDir;
- } else {
- // Primary arch: 32-bit, secondary: 64-bit.
- path64 = ai.secondaryNativeLibraryDir;
- path32 = ai.nativeLibraryDir;
- }
- } else if (primaryArchIs64bit) {
- // Single-arch 64-bit.
- path64 = ai.nativeLibraryDir;
- path32 = "";
- } else {
- // Single-arch 32-bit.
- path32 = ai.nativeLibraryDir;
- path64 = "";
- }
-
- // Form the full paths to the extracted native libraries.
- // If libraries were not extracted, try load from APK paths instead.
- if (!TextUtils.isEmpty(path32)) {
- path32 += "/" + NATIVE_LIB_FILE_NAME;
- File f = new File(path32);
- if (!f.exists()) {
- path32 = getLoadFromApkPath(ai.sourceDir,
- Build.SUPPORTED_32_BIT_ABIS,
- NATIVE_LIB_FILE_NAME);
- }
- }
- if (!TextUtils.isEmpty(path64)) {
- path64 += "/" + NATIVE_LIB_FILE_NAME;
- File f = new File(path64);
- if (!f.exists()) {
- path64 = getLoadFromApkPath(ai.sourceDir,
- Build.SUPPORTED_64_BIT_ABIS,
- NATIVE_LIB_FILE_NAME);
- }
- }
-
- if (DEBUG) Log.v(LOGTAG, "Native 32-bit lib: " + path32 + ", 64-bit lib: " + path64);
- return new String[] { path32, path64 };
- }
-
- private static void createRelroFile(final boolean is64Bit, String[] nativeLibraryPaths) {
- final String abi =
- is64Bit ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0];
-
- // crashHandler is invoked by the ActivityManagerService when the isolated process crashes.
- Runnable crashHandler = new Runnable() {
- @Override
- public void run() {
- try {
- Log.e(LOGTAG, "relro file creator for " + abi + " crashed. Proceeding without");
- getUpdateService().notifyRelroCreationCompleted();
- } catch (RemoteException e) {
- Log.e(LOGTAG, "Cannot reach WebViewUpdateService. " + e.getMessage());
- }
- }
- };
-
- try {
- if (nativeLibraryPaths == null
- || nativeLibraryPaths[0] == null || nativeLibraryPaths[1] == null) {
- throw new IllegalArgumentException(
- "Native library paths to the WebView RelRo process must not be null!");
- }
- int pid = LocalServices.getService(ActivityManagerInternal.class).startIsolatedProcess(
- RelroFileCreator.class.getName(), nativeLibraryPaths, "WebViewLoader-" + abi, abi,
- Process.SHARED_RELRO_UID, crashHandler);
- if (pid <= 0) throw new Exception("Failed to start the relro file creator process");
- } catch (Throwable t) {
- // Log and discard errors as we must not crash the system server.
- Log.e(LOGTAG, "error starting relro file creator for abi " + abi, t);
- crashHandler.run();
- }
- }
-
- private static class RelroFileCreator {
- // Called in an unprivileged child process to create the relro file.
- public static void main(String[] args) {
- boolean result = false;
- boolean is64Bit = VMRuntime.getRuntime().is64Bit();
- try{
- if (args.length != 2 || args[0] == null || args[1] == null) {
- Log.e(LOGTAG, "Invalid RelroFileCreator args: " + Arrays.toString(args));
- return;
- }
- Log.v(LOGTAG, "RelroFileCreator (64bit = " + is64Bit + "), " +
- " 32-bit lib: " + args[0] + ", 64-bit lib: " + args[1]);
- if (!sAddressSpaceReserved) {
- Log.e(LOGTAG, "can't create relro file; address space not reserved");
- return;
- }
- result = nativeCreateRelroFile(args[0] /* path32 */,
- args[1] /* path64 */,
- CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
- CHROMIUM_WEBVIEW_NATIVE_RELRO_64);
- if (result && DEBUG) Log.v(LOGTAG, "created relro file");
- } finally {
- // We must do our best to always notify the update service, even if something fails.
- try {
- getUpdateService().notifyRelroCreationCompleted();
- } catch (RemoteException e) {
- Log.e(LOGTAG, "error notifying update service", e);
- }
-
- if (!result) Log.e(LOGTAG, "failed to create relro file");
-
- // Must explicitly exit or else this process will just sit around after we return.
- System.exit(0);
- }
- }
- }
-
- // Assumes that we have waited for relro creation
- private static int loadNativeLibrary(ClassLoader clazzLoader, PackageInfo packageInfo)
- throws MissingWebViewPackageException {
- if (!sAddressSpaceReserved) {
- Log.e(LOGTAG, "can't load with relro file; address space not reserved");
- return LIBLOAD_ADDRESS_SPACE_NOT_RESERVED;
- }
-
- String[] args = getWebViewNativeLibraryPaths(packageInfo);
- int result = nativeLoadWithRelroFile(args[0] /* path32 */,
- args[1] /* path64 */,
- CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
- CHROMIUM_WEBVIEW_NATIVE_RELRO_64,
- clazzLoader);
- if (result != LIBLOAD_SUCCESS) {
- Log.w(LOGTAG, "failed to load with relro file, proceeding without");
- } else if (DEBUG) {
- Log.v(LOGTAG, "loaded with relro file");
- }
- return result;
- }
-
private static String WEBVIEW_UPDATE_SERVICE_NAME = "webviewupdate";
/** @hide */
@@ -728,11 +486,4 @@ public final class WebViewFactory {
return IWebViewUpdateService.Stub.asInterface(
ServiceManager.getService(WEBVIEW_UPDATE_SERVICE_NAME));
}
-
- private static native boolean nativeReserveAddressSpace(long addressSpaceToReserve);
- private static native boolean nativeCreateRelroFile(String lib32, String lib64,
- String relro32, String relro64);
- private static native int nativeLoadWithRelroFile(String lib32, String lib64,
- String relro32, String relro64,
- ClassLoader clazzLoader);
}
diff --git a/core/java/android/webkit/WebViewLibraryLoader.java b/core/java/android/webkit/WebViewLibraryLoader.java
new file mode 100644
index 000000000000..e385a4832a0c
--- /dev/null
+++ b/core/java/android/webkit/WebViewLibraryLoader.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2017 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.webkit;
+
+import android.app.ActivityManagerInternal;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.os.Build;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.server.LocalServices;
+
+import dalvik.system.VMRuntime;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+class WebViewLibraryLoader {
+ private static final String LOGTAG = WebViewLibraryLoader.class.getSimpleName();
+
+ private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_32 =
+ "/data/misc/shared_relro/libwebviewchromium32.relro";
+ private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_64 =
+ "/data/misc/shared_relro/libwebviewchromium64.relro";
+ private static final long CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES = 100 * 1024 * 1024;
+
+ private static final boolean DEBUG = false;
+
+ private static boolean sAddressSpaceReserved = false;
+
+ /**
+ * Private class for running the actual relro creation in an unprivileged child process.
+ * RelroFileCreator is a static class (without access to the outer class) to avoid accidentally
+ * using any static members from the outer class. Those members will in reality differ between
+ * the child process in which RelroFileCreator operates, and the app process in which the static
+ * members of this class are used.
+ */
+ private static class RelroFileCreator {
+ // Called in an unprivileged child process to create the relro file.
+ public static void main(String[] args) {
+ boolean result = false;
+ boolean is64Bit = VMRuntime.getRuntime().is64Bit();
+ try {
+ if (args.length != 2 || args[0] == null || args[1] == null) {
+ Log.e(LOGTAG, "Invalid RelroFileCreator args: " + Arrays.toString(args));
+ return;
+ }
+ Log.v(LOGTAG, "RelroFileCreator (64bit = " + is64Bit + "), "
+ + " 32-bit lib: " + args[0] + ", 64-bit lib: " + args[1]);
+ if (!sAddressSpaceReserved) {
+ Log.e(LOGTAG, "can't create relro file; address space not reserved");
+ return;
+ }
+ result = nativeCreateRelroFile(args[0] /* path32 */,
+ args[1] /* path64 */,
+ CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
+ CHROMIUM_WEBVIEW_NATIVE_RELRO_64);
+ if (result && DEBUG) Log.v(LOGTAG, "created relro file");
+ } finally {
+ // We must do our best to always notify the update service, even if something fails.
+ try {
+ WebViewFactory.getUpdateService().notifyRelroCreationCompleted();
+ } catch (RemoteException e) {
+ Log.e(LOGTAG, "error notifying update service", e);
+ }
+
+ if (!result) Log.e(LOGTAG, "failed to create relro file");
+
+ // Must explicitly exit or else this process will just sit around after we return.
+ System.exit(0);
+ }
+ }
+ }
+
+ /**
+ * Create a single relro file by invoking an isolated process that to do the actual work.
+ */
+ static void createRelroFile(final boolean is64Bit, String[] nativeLibraryPaths) {
+ final String abi =
+ is64Bit ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0];
+
+ // crashHandler is invoked by the ActivityManagerService when the isolated process crashes.
+ Runnable crashHandler = new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Log.e(LOGTAG, "relro file creator for " + abi + " crashed. Proceeding without");
+ WebViewFactory.getUpdateService().notifyRelroCreationCompleted();
+ } catch (RemoteException e) {
+ Log.e(LOGTAG, "Cannot reach WebViewUpdateService. " + e.getMessage());
+ }
+ }
+ };
+
+ try {
+ if (nativeLibraryPaths == null
+ || nativeLibraryPaths[0] == null || nativeLibraryPaths[1] == null) {
+ throw new IllegalArgumentException(
+ "Native library paths to the WebView RelRo process must not be null!");
+ }
+ int pid = LocalServices.getService(ActivityManagerInternal.class).startIsolatedProcess(
+ RelroFileCreator.class.getName(), nativeLibraryPaths,
+ "WebViewLoader-" + abi, abi, Process.SHARED_RELRO_UID, crashHandler);
+ if (pid <= 0) throw new Exception("Failed to start the relro file creator process");
+ } catch (Throwable t) {
+ // Log and discard errors as we must not crash the system server.
+ Log.e(LOGTAG, "error starting relro file creator for abi " + abi, t);
+ crashHandler.run();
+ }
+ }
+
+ /**
+ *
+ * @return the native WebView libraries in the new WebView APK.
+ */
+ static String[] updateWebViewZygoteVmSize(PackageInfo packageInfo)
+ throws WebViewFactory.MissingWebViewPackageException {
+ // Find the native libraries of the new WebView package, to change the size of the
+ // memory region in the Zygote reserved for the library.
+ String[] nativeLibs = getWebViewNativeLibraryPaths(packageInfo);
+ if (nativeLibs != null) {
+ long newVmSize = 0L;
+
+ for (String path : nativeLibs) {
+ if (path == null || TextUtils.isEmpty(path)) continue;
+ if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
+ File f = new File(path);
+ if (f.exists()) {
+ newVmSize = Math.max(newVmSize, f.length());
+ continue;
+ }
+ if (path.contains("!/")) {
+ String[] split = TextUtils.split(path, "!/");
+ if (split.length == 2) {
+ try (ZipFile z = new ZipFile(split[0])) {
+ ZipEntry e = z.getEntry(split[1]);
+ if (e != null && e.getMethod() == ZipEntry.STORED) {
+ newVmSize = Math.max(newVmSize, e.getSize());
+ continue;
+ }
+ }
+ catch (IOException e) {
+ Log.e(LOGTAG, "error reading APK file " + split[0] + ", ", e);
+ }
+ }
+ }
+ Log.e(LOGTAG, "error sizing load for " + path);
+ }
+
+ if (DEBUG) {
+ Log.v(LOGTAG, "Based on library size, need " + newVmSize
+ + " bytes of address space.");
+ }
+ // The required memory can be larger than the file on disk (due to .bss), and an
+ // upgraded version of the library will likely be larger, so always attempt to
+ // reserve twice as much as we think to allow for the library to grow during this
+ // boot cycle.
+ newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
+ Log.d(LOGTAG, "Setting new address space to " + newVmSize);
+ setWebViewZygoteVmSize(newVmSize);
+ }
+ return nativeLibs;
+ }
+
+ /**
+ * Reserve space for the native library to be loaded into.
+ */
+ static void reserveAddressSpaceInZygote() {
+ System.loadLibrary("webviewchromium_loader");
+ long addressSpaceToReserve =
+ SystemProperties.getLong(WebViewFactory.CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
+ CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
+ sAddressSpaceReserved = nativeReserveAddressSpace(addressSpaceToReserve);
+
+ if (sAddressSpaceReserved) {
+ if (DEBUG) {
+ Log.v(LOGTAG, "address space reserved: " + addressSpaceToReserve + " bytes");
+ }
+ } else {
+ Log.e(LOGTAG, "reserving " + addressSpaceToReserve + " bytes of address space failed");
+ }
+ }
+
+ /**
+ * Load WebView's native library into the current process.
+ * Note: assumes that we have waited for relro creation.
+ * @param clazzLoader class loader used to find the linker namespace to load the library into.
+ * @param packageInfo the package from which WebView is loaded.
+ */
+ static int loadNativeLibrary(ClassLoader clazzLoader, PackageInfo packageInfo)
+ throws WebViewFactory.MissingWebViewPackageException {
+ if (!sAddressSpaceReserved) {
+ Log.e(LOGTAG, "can't load with relro file; address space not reserved");
+ return WebViewFactory.LIBLOAD_ADDRESS_SPACE_NOT_RESERVED;
+ }
+
+ String[] args = getWebViewNativeLibraryPaths(packageInfo);
+ int result = nativeLoadWithRelroFile(args[0] /* path32 */,
+ args[1] /* path64 */,
+ CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
+ CHROMIUM_WEBVIEW_NATIVE_RELRO_64,
+ clazzLoader);
+ if (result != WebViewFactory.LIBLOAD_SUCCESS) {
+ Log.w(LOGTAG, "failed to load with relro file, proceeding without");
+ } else if (DEBUG) {
+ Log.v(LOGTAG, "loaded with relro file");
+ }
+ return result;
+ }
+
+ /**
+ * Fetch WebView's native library paths from {@param packageInfo}.
+ */
+ static String[] getWebViewNativeLibraryPaths(PackageInfo packageInfo)
+ throws WebViewFactory.MissingWebViewPackageException {
+ ApplicationInfo ai = packageInfo.applicationInfo;
+ final String nativeLibFileName = WebViewFactory.getWebViewLibrary(ai);
+
+ String path32;
+ String path64;
+ boolean primaryArchIs64bit = VMRuntime.is64BitAbi(ai.primaryCpuAbi);
+ if (!TextUtils.isEmpty(ai.secondaryCpuAbi)) {
+ // Multi-arch case.
+ if (primaryArchIs64bit) {
+ // Primary arch: 64-bit, secondary: 32-bit.
+ path64 = ai.nativeLibraryDir;
+ path32 = ai.secondaryNativeLibraryDir;
+ } else {
+ // Primary arch: 32-bit, secondary: 64-bit.
+ path64 = ai.secondaryNativeLibraryDir;
+ path32 = ai.nativeLibraryDir;
+ }
+ } else if (primaryArchIs64bit) {
+ // Single-arch 64-bit.
+ path64 = ai.nativeLibraryDir;
+ path32 = "";
+ } else {
+ // Single-arch 32-bit.
+ path32 = ai.nativeLibraryDir;
+ path64 = "";
+ }
+
+ // Form the full paths to the extracted native libraries.
+ // If libraries were not extracted, try load from APK paths instead.
+ if (!TextUtils.isEmpty(path32)) {
+ path32 += "/" + nativeLibFileName;
+ File f = new File(path32);
+ if (!f.exists()) {
+ path32 = getLoadFromApkPath(ai.sourceDir,
+ Build.SUPPORTED_32_BIT_ABIS,
+ nativeLibFileName);
+ }
+ }
+ if (!TextUtils.isEmpty(path64)) {
+ path64 += "/" + nativeLibFileName;
+ File f = new File(path64);
+ if (!f.exists()) {
+ path64 = getLoadFromApkPath(ai.sourceDir,
+ Build.SUPPORTED_64_BIT_ABIS,
+ nativeLibFileName);
+ }
+ }
+
+ if (DEBUG) Log.v(LOGTAG, "Native 32-bit lib: " + path32 + ", 64-bit lib: " + path64);
+ return new String[] { path32, path64 };
+ }
+
+ private static String getLoadFromApkPath(String apkPath,
+ String[] abiList,
+ String nativeLibFileName)
+ throws WebViewFactory.MissingWebViewPackageException {
+ // Search the APK for a native library conforming to a listed ABI.
+ try (ZipFile z = new ZipFile(apkPath)) {
+ for (String abi : abiList) {
+ final String entry = "lib/" + abi + "/" + nativeLibFileName;
+ ZipEntry e = z.getEntry(entry);
+ if (e != null && e.getMethod() == ZipEntry.STORED) {
+ // Return a path formatted for dlopen() load from APK.
+ return apkPath + "!/" + entry;
+ }
+ }
+ } catch (IOException e) {
+ throw new WebViewFactory.MissingWebViewPackageException(e);
+ }
+ return "";
+ }
+
+ /**
+ * Sets the size of the memory area in which to store the relro section.
+ */
+ private static void setWebViewZygoteVmSize(long vmSize) {
+ SystemProperties.set(WebViewFactory.CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
+ Long.toString(vmSize));
+ }
+
+ static native boolean nativeReserveAddressSpace(long addressSpaceToReserve);
+ static native boolean nativeCreateRelroFile(String lib32, String lib64,
+ String relro32, String relro64);
+ static native int nativeLoadWithRelroFile(String lib32, String lib64,
+ String relro32, String relro64,
+ ClassLoader clazzLoader);
+}
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index 74f22b35e001..690067b48133 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -526,6 +526,13 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable, ThemedSp
*/
@Override
public CharSequence[] getAutofillOptions() {
+ // First check if app developer explicitly set them.
+ final CharSequence[] explicitOptions = super.getAutofillOptions();
+ if (explicitOptions != null) {
+ return explicitOptions;
+ }
+
+ // Otherwise, only return options that came from static resources.
if (!mObjectsFromResources || mObjects == null || mObjects.isEmpty()) {
return null;
}
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index c960342f7c65..5838cc15cf92 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -16,6 +16,7 @@
package android.widget;
+import android.annotation.Nullable;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.view.View;
@@ -29,6 +30,7 @@ import android.view.ViewGroup;
*/
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
private final DataSetObservable mDataSetObservable = new DataSetObservable();
+ private CharSequence[] mAutofillOptions;
public boolean hasStableIds() {
return false;
@@ -82,4 +84,16 @@ public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
public boolean isEmpty() {
return getCount() == 0;
}
+
+ @Override
+ public CharSequence[] getAutofillOptions() {
+ return mAutofillOptions;
+ }
+
+ /**
+ * Sets the value returned by {@link #getAutofillOptions()}
+ */
+ public void setAutofillOptions(@Nullable CharSequence... options) {
+ mAutofillOptions = options;
+ }
}
diff --git a/core/java/com/android/internal/app/NightDisplayController.java b/core/java/com/android/internal/app/NightDisplayController.java
index bb54085ac3bf..860c5c4c3d3b 100644
--- a/core/java/com/android/internal/app/NightDisplayController.java
+++ b/core/java/com/android/internal/app/NightDisplayController.java
@@ -182,6 +182,10 @@ public final class NightDisplayController {
throw new IllegalArgumentException("Invalid autoMode: " + autoMode);
}
+ if (getAutoMode() != autoMode) {
+ Secure.putLongForUser(mContext.getContentResolver(),
+ Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, -1L, mUserId);
+ }
return Secure.putIntForUser(mContext.getContentResolver(),
Secure.NIGHT_DISPLAY_AUTO_MODE, autoMode, mUserId);
}
diff --git a/core/java/com/android/internal/app/procstats/ProcessState.java b/core/java/com/android/internal/app/procstats/ProcessState.java
index 94706687f6de..e0a40536f255 100644
--- a/core/java/com/android/internal/app/procstats/ProcessState.java
+++ b/core/java/com/android/internal/app/procstats/ProcessState.java
@@ -196,7 +196,6 @@ public final class ProcessState {
ProcessState pnew = new ProcessState(this, mPackage, mUid, mVersion, mName, now);
pnew.mDurations.addDurations(mDurations);
pnew.mPssTable.copyFrom(mPssTable, PSS_COUNT);
- pnew.mNumExcessiveWake = mNumExcessiveWake;
pnew.mNumExcessiveCpu = mNumExcessiveCpu;
pnew.mNumCachedKill = mNumCachedKill;
pnew.mMinCachedKillPss = mMinCachedKillPss;
@@ -250,7 +249,6 @@ public final class ProcessState {
public void add(ProcessState other) {
mDurations.addDurations(other.mDurations);
mPssTable.mergeStats(other.mPssTable);
- mNumExcessiveWake += other.mNumExcessiveWake;
mNumExcessiveCpu += other.mNumExcessiveCpu;
if (other.mNumCachedKill > 0) {
addCachedKill(other.mNumCachedKill, other.mMinCachedKillPss,
@@ -264,7 +262,6 @@ public final class ProcessState {
mStartTime = now;
mLastPssState = STATE_NOTHING;
mLastPssTime = 0;
- mNumExcessiveWake = 0;
mNumExcessiveCpu = 0;
mNumCachedKill = 0;
mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0;
@@ -286,7 +283,7 @@ public final class ProcessState {
out.writeInt(mMultiPackage ? 1 : 0);
mDurations.writeToParcel(out);
mPssTable.writeToParcel(out);
- out.writeInt(mNumExcessiveWake);
+ out.writeInt(0); // was mNumExcessiveWake
out.writeInt(mNumExcessiveCpu);
out.writeInt(mNumCachedKill);
if (mNumCachedKill > 0) {
@@ -309,7 +306,7 @@ public final class ProcessState {
if (!mPssTable.readFromParcel(in)) {
return false;
}
- mNumExcessiveWake = in.readInt();
+ in.readInt(); // was mNumExcessiveWake
mNumExcessiveCpu = in.readInt();
mNumCachedKill = in.readInt();
if (mNumCachedKill > 0) {
@@ -493,18 +490,6 @@ public final class ProcessState {
}
}
- public void reportExcessiveWake(ArrayMap<String, ProcessStateHolder> pkgList) {
- ensureNotDead();
- mCommonProcess.mNumExcessiveWake++;
- if (!mCommonProcess.mMultiPackage) {
- return;
- }
-
- for (int ip=pkgList.size()-1; ip>=0; ip--) {
- pullFixedProc(pkgList, ip).mNumExcessiveWake++;
- }
- }
-
public void reportExcessiveCpu(ArrayMap<String, ProcessStateHolder> pkgList) {
ensureNotDead();
mCommonProcess.mNumExcessiveCpu++;
@@ -895,10 +880,6 @@ public final class ProcessState {
}
}
}
- if (mNumExcessiveWake != 0) {
- pw.print(prefix); pw.print("Killed for excessive wake locks: ");
- pw.print(mNumExcessiveWake); pw.println(" times");
- }
if (mNumExcessiveCpu != 0) {
pw.print(prefix); pw.print("Killed for excessive CPU use: ");
pw.print(mNumExcessiveCpu); pw.println(" times");
@@ -1072,7 +1053,7 @@ public final class ProcessState {
dumpAllPssCheckin(pw);
pw.println();
}
- if (mNumExcessiveWake > 0 || mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
+ if (mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
pw.print("pkgkills,");
pw.print(pkgName);
pw.print(",");
@@ -1082,7 +1063,7 @@ public final class ProcessState {
pw.print(",");
pw.print(DumpUtils.collapseString(pkgName, itemName));
pw.print(",");
- pw.print(mNumExcessiveWake);
+ pw.print("0"); // was mNumExcessiveWake
pw.print(",");
pw.print(mNumExcessiveCpu);
pw.print(",");
@@ -1114,13 +1095,13 @@ public final class ProcessState {
dumpAllPssCheckin(pw);
pw.println();
}
- if (mNumExcessiveWake > 0 || mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
+ if (mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
pw.print("kills,");
pw.print(procName);
pw.print(",");
pw.print(uid);
pw.print(",");
- pw.print(mNumExcessiveWake);
+ pw.print("0"); // was mNumExcessiveWake
pw.print(",");
pw.print(mNumExcessiveCpu);
pw.print(",");
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 696dbda8227a..cb00c5e83f06 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -3987,14 +3987,6 @@ public class BatteryStatsImpl extends BatteryStats {
return 0;
}
- public void reportExcessiveWakeLocked(int uid, String proc, long overTime, long usedTime) {
- uid = mapUid(uid);
- Uid u = mUidStats.get(uid);
- if (u != null) {
- u.reportExcessiveWakeLocked(proc, overTime, usedTime);
- }
- }
-
public void reportExcessiveCpuLocked(int uid, String proc, long overTime, long usedTime) {
uid = mapUid(uid);
Uid u = mUidStats.get(uid);
@@ -7745,17 +7737,6 @@ public class BatteryStatsImpl extends BatteryStats {
return null;
}
- public void addExcessiveWake(long overTime, long usedTime) {
- if (mExcessivePower == null) {
- mExcessivePower = new ArrayList<ExcessivePower>();
- }
- ExcessivePower ew = new ExcessivePower();
- ew.type = ExcessivePower.TYPE_WAKE;
- ew.overTime = overTime;
- ew.usedTime = usedTime;
- mExcessivePower.add(ew);
- }
-
public void addExcessiveCpu(long overTime, long usedTime) {
if (mExcessivePower == null) {
mExcessivePower = new ArrayList<ExcessivePower>();
@@ -8570,13 +8551,6 @@ public class BatteryStatsImpl extends BatteryStats {
}
}
- public void reportExcessiveWakeLocked(String proc, long overTime, long usedTime) {
- Proc p = getProcessStatsLocked(proc);
- if (p != null) {
- p.addExcessiveWake(overTime, usedTime);
- }
- }
-
public void reportExcessiveCpuLocked(String proc, long overTime, long usedTime) {
Proc p = getProcessStatsLocked(proc);
if (p != null) {
diff --git a/core/java/com/android/internal/os/WrapperInit.java b/core/java/com/android/internal/os/WrapperInit.java
index b245678e5937..608bc9ff33d3 100644
--- a/core/java/com/android/internal/os/WrapperInit.java
+++ b/core/java/com/android/internal/os/WrapperInit.java
@@ -163,6 +163,8 @@ public class WrapperInit {
argv = removedArgs;
}
+ // Perform the same initialization that would happen after the Zygote forks.
+ Zygote.nativePreApplicationInit();
RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
}
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 5eca496e2ee8..0106b81baf9f 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -121,6 +121,11 @@ public final class Zygote {
int[] fdsToIgnore, String instructionSet, String appDataDir);
/**
+ * Called to do any initialization before starting an application.
+ */
+ native static void nativePreApplicationInit();
+
+ /**
* Special method to start the system server process. In addition to the
* common actions performed in forkAndSpecialize, the pid of the child
* process is recorded such that the death of the child process will cause
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index d73e7dd50140..cb53106dbf28 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -221,6 +221,14 @@ static void SetRLimits(JNIEnv* env, jobjectArray javaRlimits) {
// The debug malloc library needs to know whether it's the zygote or a child.
extern "C" int gMallocLeakZygoteChild;
+static void PreApplicationInit() {
+ // The child process sets this to indicate it's not the zygote.
+ gMallocLeakZygoteChild = 1;
+
+ // Set the jemalloc decay time to 1.
+ mallopt(M_DECAY_TIME, 1);
+}
+
static void EnableKeepCapabilities(JNIEnv* env) {
int rc = prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
if (rc == -1) {
@@ -517,11 +525,7 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
pid_t pid = fork();
if (pid == 0) {
- // The child process.
- gMallocLeakZygoteChild = 1;
-
- // Set the jemalloc decay time to 1.
- mallopt(M_DECAY_TIME, 1);
+ PreApplicationInit();
// Clean up any descriptors which must be closed immediately
DetachDescriptors(env, fdsToClose);
@@ -678,6 +682,10 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
namespace android {
+static void com_android_internal_os_Zygote_nativePreApplicationInit(JNIEnv*, jclass) {
+ PreApplicationInit();
+}
+
static jint com_android_internal_os_Zygote_nativeForkAndSpecialize(
JNIEnv* env, jclass, jint uid, jint gid, jintArray gids,
jint debug_flags, jobjectArray rlimits,
@@ -807,7 +815,9 @@ static const JNINativeMethod gMethods[] = {
{ "nativeAllowFileAcrossFork", "(Ljava/lang/String;)V",
(void *) com_android_internal_os_Zygote_nativeAllowFileAcrossFork },
{ "nativeUnmountStorageOnInit", "()V",
- (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit }
+ (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit },
+ { "nativePreApplicationInit", "()V",
+ (void *) com_android_internal_os_Zygote_nativePreApplicationInit }
};
int register_com_android_internal_os_Zygote(JNIEnv* env) {
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index ff3dc3dcc418..c36dd1a3e3aa 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"সিম প্রস্তুত নয়"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"সিম অনুমোদিত নয়"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"ফোন অনুমোদিত নয়"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"পপ-আপ উইন্ডো"</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4d55282cbafd..7556246b094d 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -471,7 +471,7 @@
<string name="permlab_nfc" msgid="4423351274757876953">"controlar Comunicació de camp proper (NFC)"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Permet que l\'aplicació es comuniqui amb les etiquetes, les targetes i els lectors de Comunicació de camp proper (NFC)."</string>
<string name="permlab_disableKeyguard" msgid="3598496301486439258">"desactivació del bloqueig de pantalla"</string>
- <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Permet que l\'aplicació desactivi el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Per exemple, el telèfon desactiva el bloqueig del teclat en rebre una trucada telefònica entrant i, a continuació, reactiva el bloqueig del teclat quan finalitza la trucada."</string>
+ <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Permet que l\'aplicació desactivi el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Per exemple, el telèfon desactiva el bloqueig del teclat en rebre una trucada entrant i, a continuació, reactiva el bloqueig del teclat quan finalitza la trucada."</string>
<string name="permlab_manageFingerprint" msgid="5640858826254575638">"Gestionar el maquinari d\'empremtes digitals"</string>
<string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permet que l\'aplicació invoqui mètodes per afegir i suprimir plantilles d\'empremtes digitals que es puguin fer servir."</string>
<string name="permlab_useFingerprint" msgid="3150478619915124905">"Utilitzar el maquinari d\'empremtes digitals"</string>
@@ -788,13 +788,13 @@
<string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Ha finalitzat la reorganització del widget."</string>
<string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"S\'ha suprimit el widget de <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
<string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Desplega l\'àrea de desbloqueig."</string>
- <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueig lliscant el dit"</string>
+ <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Desbloqueig lliscant"</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueig mitjançant patró"</string>
<string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueig facial"</string>
<string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueig mitjançant PIN"</string>
<string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueig mitjançant contrasenya"</string>
<string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Àrea de patró"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Àrea per lliscar el dit"</string>
+ <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Àrea per lliscar"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1075,7 +1075,7 @@
<string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> ha superat el límit de memòria"</string>
<string name="dump_heap_notification_detail" msgid="6901391084243999274">"S\'ha recopilat un procés \"heap dump\"; toca per compartir-lo"</string>
<string name="dump_heap_title" msgid="5864292264307651673">"Vols compartir el \"heap dump\"?"</string>
- <string name="dump_heap_text" msgid="4809417337240334941">"El procés <xliff:g id="PROC">%1$s</xliff:g> ha superat el límit de <xliff:g id="SIZE">%2$s</xliff:g> de memòria del procés. Hi ha un procés \"heap dump\" disponible perquè el comparteixis amb el desenvolupador. Vés amb compte: aquest \"heap dump\" pot contenir les dades personals a les quals l\'aplicació tingui accés."</string>
+ <string name="dump_heap_text" msgid="4809417337240334941">"El procés <xliff:g id="PROC">%1$s</xliff:g> ha superat el límit de <xliff:g id="SIZE">%2$s</xliff:g> de memòria del procés. Hi ha un procés \"heap dump\" disponible perquè el comparteixis amb el desenvolupador. Ves amb compte: aquest \"heap dump\" pot contenir les dades personals a les quals l\'aplicació tingui accés."</string>
<string name="sendText" msgid="5209874571959469142">"Tria una acció per al text"</string>
<string name="volume_ringtone" msgid="6885421406845734650">"Volum del timbre"</string>
<string name="volume_music" msgid="5421651157138628171">"Volum de multimèdia"</string>
@@ -1259,7 +1259,7 @@
<string name="permdesc_requestIgnoreBatteryOptimizations" msgid="8359147856007447638">"Permet que una aplicació demani permís per ignorar les optimitzacions de bateria per a l\'aplicació."</string>
<string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Piqueu dos cops per controlar el zoom"</string>
<string name="gadget_host_error_inflating" msgid="4882004314906466162">"No s\'ha pogut afegir el widget."</string>
- <string name="ime_action_go" msgid="8320845651737369027">"Vés"</string>
+ <string name="ime_action_go" msgid="8320845651737369027">"Ves"</string>
<string name="ime_action_search" msgid="658110271822807811">"Cerca"</string>
<string name="ime_action_send" msgid="2316166556349314424">"Envia"</string>
<string name="ime_action_next" msgid="3138843904009813834">"Següent"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 42b4ce34c096..9f50406ee36f 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1138,7 +1138,7 @@
<string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Gonbidapena bidali da"</string>
<string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Konektatzeko gonbidapena"</string>
<string name="wifi_p2p_from_message" msgid="570389174731951769">"Igorlea:"</string>
- <string name="wifi_p2p_to_message" msgid="248968974522044099">"Nori:"</string>
+ <string name="wifi_p2p_to_message" msgid="248968974522044099">"Hartzailea:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Idatzi beharrezko PINa:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PINa:"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Tableta Wi-Fi saretik deskonektatuko da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailura konektatuta dagoen bitartean"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 2aa7571bd9df..a1b74b5aa37b 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -398,7 +398,7 @@
<string name="permdesc_accessCoarseLocation" product="default" msgid="7788009094906196995">"Այս հավելվածը կարող է ստանալ ձեր տեղադրության տվյալները ցանցային տարբեր աղբյուրներից, օրինակ՝ բջջային աշտարակներից և Wi-Fi ցանցերից: Այս տեղորոշման ծառայությունները պետք է միացված և հասանելի լինեն ձեր հեռախոսում, որպեսզի հավելվածը կարողանա օգտագործել դրանք:"</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"փոխել ձեր աուդիո կարգավորումները"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Թույլ է տալիս հավելվածին փոփոխել ձայնանյութի գլոբալ կարգավորումները, ինչպես օրինակ` ձայնը և թե որ խոսափողն է օգտագործված արտածման համար:"</string>
- <string name="permlab_recordAudio" msgid="3876049771427466323">"ձայնագրել ձայնանյութ"</string>
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"ձայնագրել աուդիո ֆայլ"</string>
<string name="permdesc_recordAudio" msgid="4245930455135321433">"Այս հավելվածը ցանկացած պահի կարող է ձայնագրել խոսափողի օգնությամբ:"</string>
<string name="permlab_sim_communication" msgid="2935852302216852065">"ուղարկել հրամաններ SIM քարտին"</string>
<string name="permdesc_sim_communication" msgid="5725159654279639498">"Թույլ է տալիս հավելվածին հրամաններ ուղարկել SIM-ին: Սա շատ վտանգավոր է:"</string>
@@ -1420,7 +1420,7 @@
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Համակցված բարձրախոսներ"</string>
<string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Համակարգ"</string>
- <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ի ձայնանյութ"</string>
+ <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ի աուդիո ֆայլ"</string>
<string name="wireless_display_route_description" msgid="9070346425023979651">"Անլար էկրան"</string>
<string name="media_route_button_content_description" msgid="591703006349356016">"Հեռարձակում"</string>
<string name="media_route_chooser_title" msgid="1751618554539087622">"Միանալ սարքին"</string>
@@ -1779,5 +1779,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM քարտը նախապատրաստված չէ"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM քարտի օգտագործումն արգելված է"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"Հեռախոսի օգտագործումն արգելված է"</string>
- <string name="popup_window_default_title" msgid="4874318849712115433">"Նոր պատուհան"</string>
+ <string name="popup_window_default_title" msgid="4874318849712115433">"Հայտնվող պատուհան"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 02c6caca7ae9..6ef5aa7aa14c 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1779,5 +1779,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM tidak di-provisioning"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM tidak diizinkan"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"Ponsel tidak diizinkan"</string>
- <string name="popup_window_default_title" msgid="4874318849712115433">"Jendela Popup"</string>
+ <string name="popup_window_default_title" msgid="4874318849712115433">"Jendela Pop-up"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 5818e7b79a79..1944fe361c2e 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1847,6 +1847,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‏כרטיס ה-SIM לא מזוהה"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"‏כרטיס ה-SIM לא מורשה"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"הטלפון לא מורשה"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"חלון קופץ"</string>
</resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 8d8065b159c3..e8e549705760 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ಸಿಮ್ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"ಸಿಮ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"ಫೋನ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"ಪಾಪ್‌ಅಪ್ ವಿಂಡೋ"</string>
</resources>
diff --git a/core/res/res/values-mcc204-mnc12/config.xml b/core/res/res/values-mcc204-mnc12/config.xml
deleted file mode 100644
index 80432d7f6184..000000000000
--- a/core/res/res/values-mcc204-mnc12/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20408</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc206-mnc10/config.xml b/core/res/res/values-mcc206-mnc10/config.xml
deleted file mode 100644
index 5c96317363f3..000000000000
--- a/core/res/res/values-mcc206-mnc10/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20605</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc208-mnc15/config.xml b/core/res/res/values-mcc208-mnc15/config.xml
deleted file mode 100644
index 32b951c7e909..000000000000
--- a/core/res/res/values-mcc208-mnc15/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20801</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc208-mnc26/config.xml b/core/res/res/values-mcc208-mnc26/config.xml
deleted file mode 100644
index 31d2d0fa3cde..000000000000
--- a/core/res/res/values-mcc208-mnc26/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20801</item>
- <item>20810</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc02/config.xml b/core/res/res/values-mcc214-mnc02/config.xml
deleted file mode 100755
index c83de57dd606..000000000000
--- a/core/res/res/values-mcc214-mnc02/config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc214-mnc04/config.xml b/core/res/res/values-mcc214-mnc04/config.xml
deleted file mode 100644
index 6dfa87bdb901..000000000000
--- a/core/res/res/values-mcc214-mnc04/config.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc05/config.xml b/core/res/res/values-mcc214-mnc05/config.xml
deleted file mode 100755
index 9302b0c1cbe5..000000000000
--- a/core/res/res/values-mcc214-mnc05/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc06/config.xml b/core/res/res/values-mcc214-mnc06/config.xml
deleted file mode 100755
index c3f264367744..000000000000
--- a/core/res/res/values-mcc214-mnc06/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc08/config.xml b/core/res/res/values-mcc214-mnc08/config.xml
deleted file mode 100755
index 5af6d5d8d542..000000000000
--- a/core/res/res/values-mcc214-mnc08/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc09/config.xml b/core/res/res/values-mcc214-mnc09/config.xml
deleted file mode 100755
index d789771537f3..000000000000
--- a/core/res/res/values-mcc214-mnc09/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc10/config.xml b/core/res/res/values-mcc214-mnc10/config.xml
deleted file mode 100755
index b66e1a2a27d4..000000000000
--- a/core/res/res/values-mcc214-mnc10/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc11/config.xml b/core/res/res/values-mcc214-mnc11/config.xml
deleted file mode 100755
index 9fd06db4070e..000000000000
--- a/core/res/res/values-mcc214-mnc11/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc12/config.xml b/core/res/res/values-mcc214-mnc12/config.xml
deleted file mode 100755
index 7468238c7682..000000000000
--- a/core/res/res/values-mcc214-mnc12/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc13/config.xml b/core/res/res/values-mcc214-mnc13/config.xml
deleted file mode 100755
index 35ff4aeb10e7..000000000000
--- a/core/res/res/values-mcc214-mnc13/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc14/config.xml b/core/res/res/values-mcc214-mnc14/config.xml
deleted file mode 100755
index b6a744017bc5..000000000000
--- a/core/res/res/values-mcc214-mnc14/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc15/config.xml b/core/res/res/values-mcc214-mnc15/config.xml
deleted file mode 100755
index 8296410b9bc9..000000000000
--- a/core/res/res/values-mcc214-mnc15/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc16/config.xml b/core/res/res/values-mcc214-mnc16/config.xml
deleted file mode 100755
index 1aaf57757c2a..000000000000
--- a/core/res/res/values-mcc214-mnc16/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc17/config.xml b/core/res/res/values-mcc214-mnc17/config.xml
deleted file mode 100755
index be92a3281fb1..000000000000
--- a/core/res/res/values-mcc214-mnc17/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc18/config.xml b/core/res/res/values-mcc214-mnc18/config.xml
deleted file mode 100755
index 078d7e2ef9a4..000000000000
--- a/core/res/res/values-mcc214-mnc18/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc19/config.xml b/core/res/res/values-mcc214-mnc19/config.xml
deleted file mode 100755
index d1946873fc6e..000000000000
--- a/core/res/res/values-mcc214-mnc19/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc20/config.xml b/core/res/res/values-mcc214-mnc20/config.xml
deleted file mode 100755
index 6aaf97072c02..000000000000
--- a/core/res/res/values-mcc214-mnc20/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21421</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc21/config.xml b/core/res/res/values-mcc214-mnc21/config.xml
deleted file mode 100755
index f890b145b6be..000000000000
--- a/core/res/res/values-mcc214-mnc21/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc219-mnc02/config.xml b/core/res/res/values-mcc219-mnc02/config.xml
deleted file mode 100644
index 2ac6ba6ddf83..000000000000
--- a/core/res/res/values-mcc219-mnc02/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21901</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc10/config.xml b/core/res/res/values-mcc232-mnc10/config.xml
deleted file mode 100644
index bdf83016d18e..000000000000
--- a/core/res/res/values-mcc232-mnc10/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23203</item>
- <item>23205</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc11/config.xml b/core/res/res/values-mcc232-mnc11/config.xml
deleted file mode 100644
index 91e37b446077..000000000000
--- a/core/res/res/values-mcc232-mnc11/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23201</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc12/config.xml b/core/res/res/values-mcc232-mnc12/config.xml
deleted file mode 100644
index 91e37b446077..000000000000
--- a/core/res/res/values-mcc232-mnc12/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23201</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc13/config.xml b/core/res/res/values-mcc232-mnc13/config.xml
deleted file mode 100644
index 2c14f87374f6..000000000000
--- a/core/res/res/values-mcc232-mnc13/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23203</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc08/config.xml b/core/res/res/values-mcc234-mnc08/config.xml
deleted file mode 100644
index 13d4d8fa7cfd..000000000000
--- a/core/res/res/values-mcc234-mnc08/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23433</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc10/config.xml b/core/res/res/values-mcc234-mnc10/config.xml
deleted file mode 100644
index b704d3fdf11f..000000000000
--- a/core/res/res/values-mcc234-mnc10/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23420</item>
- <item>23426</item>
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc20/config.xml b/core/res/res/values-mcc234-mnc20/config.xml
index 27c91d2c470c..1e4bb0be8802 100644
--- a/core/res/res/values-mcc234-mnc20/config.xml
+++ b/core/res/res/values-mcc234-mnc20/config.xml
@@ -32,15 +32,4 @@
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1440</integer>
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23410</item>
- <item>23426</item>
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc234-mnc26/config.xml b/core/res/res/values-mcc234-mnc26/config.xml
deleted file mode 100644
index 8d259defc7ea..000000000000
--- a/core/res/res/values-mcc234-mnc26/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23410</item>
- <item>23420</item>
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc30/config.xml b/core/res/res/values-mcc234-mnc30/config.xml
deleted file mode 100644
index eabdf9a01f8f..000000000000
--- a/core/res/res/values-mcc234-mnc30/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc31/config.xml b/core/res/res/values-mcc234-mnc31/config.xml
deleted file mode 100644
index eabdf9a01f8f..000000000000
--- a/core/res/res/values-mcc234-mnc31/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc32/config.xml b/core/res/res/values-mcc234-mnc32/config.xml
deleted file mode 100644
index eabdf9a01f8f..000000000000
--- a/core/res/res/values-mcc234-mnc32/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc33/config.xml b/core/res/res/values-mcc234-mnc33/config.xml
deleted file mode 100644
index 776b5702a0d0..000000000000
--- a/core/res/res/values-mcc234-mnc33/config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. Do not translate. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc34/config.xml b/core/res/res/values-mcc234-mnc34/config.xml
deleted file mode 100644
index eabdf9a01f8f..000000000000
--- a/core/res/res/values-mcc234-mnc34/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc86/config.xml b/core/res/res/values-mcc234-mnc86/config.xml
deleted file mode 100644
index eabdf9a01f8f..000000000000
--- a/core/res/res/values-mcc234-mnc86/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>23430</item>
- <item>23431</item>
- <item>23432</item>
- <item>23433</item>
- <item>23434</item>
- <item>23486</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index f3ae851ae32f..1241a9d029d6 100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
@@ -35,15 +35,7 @@
-->
<integer name="config_mobile_mtu">1410</integer>
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302220</item>
- <item>302610</item>
- <item>302660</item>
- <item>302720</item>
- <item>302780</item>
- </string-array>
-
- <!-- Values for GPS configuration (Rogers) -->
+ <!-- Values for GPS configuration (Rogers) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
<item>SUPL_PORT=7275</item>
diff --git a/core/res/res/values-mcc425-mnc08/config.xml b/core/res/res/values-mcc302-mnc370/strings.xml
index 8470b865d0dd..f5b8496f9a0b 100644
--- a/core/res/res/values-mcc425-mnc08/config.xml
+++ b/core/res/res/values-mcc302-mnc370/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
-** Copyright 2013, The Android Open Source Project
+** Copyright 2017, 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,10 +16,10 @@
** limitations under the License.
*/
-->
-
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>42502</item>
+ <!-- Template for showing mobile network operator name while WFC is active -->
+ <string-array name="wfcSpnFormats">
+ <item>%s</item>
+ <item>%s Wi-Fi</item>
</string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc500/config.xml b/core/res/res/values-mcc302-mnc500/config.xml
deleted file mode 100644
index 77f64199a80b..000000000000
--- a/core/res/res/values-mcc302-mnc500/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc510/config.xml b/core/res/res/values-mcc302-mnc510/config.xml
deleted file mode 100644
index 77f64199a80b..000000000000
--- a/core/res/res/values-mcc302-mnc510/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- ** http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc610/config.xml b/core/res/res/values-mcc302-mnc610/config.xml
index 44dbdf758950..232f14969ad1 100644
--- a/core/res/res/values-mcc302-mnc610/config.xml
+++ b/core/res/res/values-mcc302-mnc610/config.xml
@@ -18,11 +18,6 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1428</integer>
diff --git a/core/res/res/values-mcc302-mnc640/config.xml b/core/res/res/values-mcc302-mnc640/config.xml
index f6b2b4d70c6b..1d2e625952f8 100644
--- a/core/res/res/values-mcc302-mnc640/config.xml
+++ b/core/res/res/values-mcc302-mnc640/config.xml
@@ -18,11 +18,6 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302</item>
- </string-array>
-
<!-- Values for GPS configuration (Bell) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml
index c689d22f28d0..8c2e7023081e 100644
--- a/core/res/res/values-mcc302-mnc660/config.xml
+++ b/core/res/res/values-mcc302-mnc660/config.xml
@@ -43,12 +43,4 @@
-->
<integer name="config_mobile_mtu">1430</integer>
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302220</item>
- <item>302370</item>
- <item>302610</item>
- <item>302720</item>
- <item>302780</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index 0b8c7780d7e5..ef1ecd29845c 100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
@@ -37,15 +37,7 @@
-->
<integer name="config_mobile_mtu">1430</integer>
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302220</item>
- <item>302370</item>
- <item>302610</item>
- <item>302660</item>
- <item>302780</item>
- </string-array>
-
- <!-- Values for GPS configuration (Rogers) -->
+ <!-- Values for GPS configuration (Rogers) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
<item>SUPL_PORT=7275</item>
diff --git a/core/res/res/values-mcc206-mnc05/config.xml b/core/res/res/values-mcc302-mnc720/strings.xml
index a684aaac65cf..f5b8496f9a0b 100644
--- a/core/res/res/values-mcc206-mnc05/config.xml
+++ b/core/res/res/values-mcc302-mnc720/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
-** Copyright 2013, The Android Open Source Project
+** Copyright 2017, 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,9 +16,10 @@
** limitations under the License.
*/
-->
-
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20610</item>
+ <!-- Template for showing mobile network operator name while WFC is active -->
+ <string-array name="wfcSpnFormats">
+ <item>%s</item>
+ <item>%s Wi-Fi</item>
</string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc780/config.xml b/core/res/res/values-mcc302-mnc780/config.xml
index a48f6957ba94..d300dab31db1 100644
--- a/core/res/res/values-mcc302-mnc780/config.xml
+++ b/core/res/res/values-mcc302-mnc780/config.xml
@@ -20,12 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>302</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1358</integer>
diff --git a/core/res/res/values-mcc310-mnc150/config.xml b/core/res/res/values-mcc310-mnc150/config.xml
index e1f696e43be3..e7d1325ff78a 100644
--- a/core/res/res/values-mcc310-mnc150/config.xml
+++ b/core/res/res/values-mcc310-mnc150/config.xml
@@ -18,23 +18,6 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>310110</item>
- <item>310140</item>
- <item>310400</item>
- <item>310470</item>
- <item>311170</item>
- </string-array>
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>310</item>
- <item>311</item>
- <item>312</item>
- <item>313</item>
- <item>314</item>
- <item>315</item>
- <item>316</item>
- </string-array>
<string-array translatable="false" name="config_twoDigitNumberPattern">
<item>"0"</item>
<item>"00"</item>
diff --git a/core/res/res/values-mcc310-mnc410/config.xml b/core/res/res/values-mcc310-mnc410/config.xml
index 9accdf02537f..00ab7127c331 100644
--- a/core/res/res/values-mcc310-mnc410/config.xml
+++ b/core/res/res/values-mcc310-mnc410/config.xml
@@ -20,28 +20,9 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1410</integer>
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>310110</item>
- <item>310140</item>
- <item>310400</item>
- <item>310470</item>
- <item>311170</item>
- </string-array>
-
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>310</item>
- <item>311</item>
- <item>312</item>
- <item>313</item>
- <item>314</item>
- <item>315</item>
- <item>316</item>
- </string-array>
<!-- Do not translate. Defines the slots is Two Digit Number for dialing normally not USSD -->
<string-array name="config_twoDigitNumberPattern">
<item>"0"</item>
diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml
index cfc1380dd26f..1ca89635af7b 100644
--- a/core/res/res/values-mcc340-mnc01/config.xml
+++ b/core/res/res/values-mcc340-mnc01/config.xml
@@ -38,10 +38,4 @@
<string-array translatable="false" name="config_tether_apndata">
<item>Orangeweb,orangeweb,,,orange,orange,,,,,340,01,1,DUN</item>
</string-array>
-
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>20801</item>
- <item>20815</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc404/config.xml b/core/res/res/values-mcc404/config.xml
index 17539d81fa65..6b77e9c1663a 100644
--- a/core/res/res/values-mcc404/config.xml
+++ b/core/res/res/values-mcc404/config.xml
@@ -18,11 +18,6 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>404</item>
- <item>405</item>
- </string-array>
<!-- Whether camera shutter sound is forced or not (country specific). -->
<bool name="config_camera_sound_forced">true</bool>
</resources>
diff --git a/core/res/res/values-mcc405/config.xml b/core/res/res/values-mcc405/config.xml
index 17539d81fa65..6b77e9c1663a 100644
--- a/core/res/res/values-mcc405/config.xml
+++ b/core/res/res/values-mcc405/config.xml
@@ -18,11 +18,6 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>404</item>
- <item>405</item>
- </string-array>
<!-- Whether camera shutter sound is forced or not (country specific). -->
<bool name="config_camera_sound_forced">true</bool>
</resources>
diff --git a/core/res/res/values-mcc425-mnc07/config.xml b/core/res/res/values-mcc425-mnc07/config.xml
index a092fb97ffcd..770cebde8c1d 100644
--- a/core/res/res/values-mcc425-mnc07/config.xml
+++ b/core/res/res/values-mcc425-mnc07/config.xml
@@ -39,9 +39,4 @@
<string-array translatable="false" name="config_tether_apndata">
<item>PC HOT mobile,pc.hotm,,,,,,,,,425,07,,DUN</item>
</string-array>
-
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>42503</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc510-mnc21/config.xml b/core/res/res/values-mcc510-mnc21/config.xml
deleted file mode 100644
index 1fd9dfa890e7..000000000000
--- a/core/res/res/values-mcc510-mnc21/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>51001</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc520/config.xml b/core/res/res/values-mcc520/config.xml
deleted file mode 100644
index b2f3efa891ac..000000000000
--- a/core/res/res/values-mcc520/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>520</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc530-mnc24/config.xml b/core/res/res/values-mcc530-mnc24/config.xml
deleted file mode 100644
index 5598e8d8bbf2..000000000000
--- a/core/res/res/values-mcc530-mnc24/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Show roaming icon though same named operators. -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- <item>53001</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc722-mnc36/config.xml b/core/res/res/values-mcc722-mnc36/config.xml
deleted file mode 100644
index daf5373f7b5b..000000000000
--- a/core/res/res/values-mcc722-mnc36/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2016, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>72234</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc01/config.xml b/core/res/res/values-mcc730-mnc01/config.xml
deleted file mode 100644
index 22f402769e03..000000000000
--- a/core/res/res/values-mcc730-mnc01/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>73010</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc07/config.xml b/core/res/res/values-mcc730-mnc07/config.xml
deleted file mode 100644
index 836ddf9ae143..000000000000
--- a/core/res/res/values-mcc730-mnc07/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>73002</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc08/config.xml b/core/res/res/values-mcc730-mnc08/config.xml
deleted file mode 100644
index 836ddf9ae143..000000000000
--- a/core/res/res/values-mcc730-mnc08/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>73002</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc10/config.xml b/core/res/res/values-mcc730-mnc10/config.xml
deleted file mode 100644
index 58b7d7813635..000000000000
--- a/core/res/res/values-mcc730-mnc10/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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 my 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Don't use roaming icon for considered operators -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>73001</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 45339c549fc5..f4435959215f 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1041,7 +1041,7 @@
<string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> не реагира"</string>
<string name="anr_process" msgid="6156880875555921105">"Процесот <xliff:g id="PROCESS">%1$s</xliff:g> не реагира"</string>
<string name="force_close" msgid="8346072094521265605">"Во ред"</string>
- <string name="report" msgid="4060218260984795706">"Извештај"</string>
+ <string name="report" msgid="4060218260984795706">"Пријави"</string>
<string name="wait" msgid="7147118217226317732">"Почекај"</string>
<string name="webpage_unresponsive" msgid="3272758351138122503">"Страницата не реагира.\n\nДали сакате да ја затворите?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"Пренасочена апликација"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 41b63503bde9..6d404e4b335a 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"सिमसाठी तरतूद नाही"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"सिमला अनुमती नाही"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"फोनला अनुमती नाही"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"पॉपअप विंडो"</string>
</resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 9b5cea95d346..6dd70fe3d7e6 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1780,5 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"ဆင်းမ်ကို ခွင့်မပြုပါ"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"ဖုန်းကို ခွင့်မပြုပါ"</string>
- <string name="popup_window_default_title" msgid="4874318849712115433">"ပေါ့ပ်အပ်ဝင်းဒိုး"</string>
+ <string name="popup_window_default_title" msgid="4874318849712115433">"ပေါ့ပ်အပ် ဝင်းဒိုး"</string>
</resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 68d027dedb31..2df0bc072da1 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -1785,6 +1785,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM को प्रावधान छैन"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM लाई अनुमति छैन"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"फोनलाई अनुमति छैन"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"पपअप विन्डो"</string>
</resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 5888792ff6ae..bf917c606990 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"ਫ਼ੋਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"ਪੌਪਅੱਪ ਵਿੰਡੋ"</string>
</resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 4e62130987cb..d5a4f7bde492 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1623,7 +1623,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"Instalado pelo seu administrador"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Excluído pelo seu administrador"</string>
- <string name="battery_saver_description" msgid="1960431123816253034">"A economia de bateria reduz o desempenho e os limites de vibração do dispositivo, os serviços de localização e a maioria dos dados em segundo plano para aumentar a duração da bateria. E-mails, mensagens e outros aplicativos que dependem de sincronização não serão atualizados, a não ser que você os abra.\n\nA economia de bateria é desligada automaticamente quando o dispositivo está sendo carregado."</string>
+ <string name="battery_saver_description" msgid="1960431123816253034">"A economia de bateria reduz o desempenho do dispositivo e limita a vibração, os serviços de localização e a maioria dos dados em segundo plano para aumentar a duração da bateria. E-mails, mensagens e outros apps que dependem de sincronização não serão atualizados, a não ser que você os abra.\n\nA economia de bateria é desligada automaticamente quando o dispositivo está sendo carregado."</string>
<string name="data_saver_description" msgid="6015391409098303235">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode significar que as imagens não serão exibidas até que você toque nelas."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Ativar Economia de dados?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Ativar"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 4e62130987cb..d5a4f7bde492 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1623,7 +1623,7 @@
<string name="package_installed_device_owner" msgid="6875717669960212648">"Instalado pelo seu administrador"</string>
<string name="package_updated_device_owner" msgid="1847154566357862089">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2307122077550236438">"Excluído pelo seu administrador"</string>
- <string name="battery_saver_description" msgid="1960431123816253034">"A economia de bateria reduz o desempenho e os limites de vibração do dispositivo, os serviços de localização e a maioria dos dados em segundo plano para aumentar a duração da bateria. E-mails, mensagens e outros aplicativos que dependem de sincronização não serão atualizados, a não ser que você os abra.\n\nA economia de bateria é desligada automaticamente quando o dispositivo está sendo carregado."</string>
+ <string name="battery_saver_description" msgid="1960431123816253034">"A economia de bateria reduz o desempenho do dispositivo e limita a vibração, os serviços de localização e a maioria dos dados em segundo plano para aumentar a duração da bateria. E-mails, mensagens e outros apps que dependem de sincronização não serão atualizados, a não ser que você os abra.\n\nA economia de bateria é desligada automaticamente quando o dispositivo está sendo carregado."</string>
<string name="data_saver_description" msgid="6015391409098303235">"Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode significar que as imagens não serão exibidas até que você toque nelas."</string>
<string name="data_saver_enable_title" msgid="4674073932722787417">"Ativar Economia de dados?"</string>
<string name="data_saver_enable_button" msgid="7147735965247211818">"Ativar"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 694105fa7dd0..d8174ad7f1c5 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -210,7 +210,7 @@
<string name="reboot_to_update_prepare" msgid="6305853831955310890">"Подготовка обновлений…"</string>
<string name="reboot_to_update_package" msgid="3871302324500927291">"Обработка обновлений…"</string>
<string name="reboot_to_update_reboot" msgid="6428441000951565185">"Перезагрузка…"</string>
- <string name="reboot_to_reset_title" msgid="4142355915340627490">"Сброс к заводским настройкам"</string>
+ <string name="reboot_to_reset_title" msgid="4142355915340627490">"Сбросить к заводским настройкам"</string>
<string name="reboot_to_reset_message" msgid="2432077491101416345">"Перезагрузка…"</string>
<string name="shutdown_progress" msgid="2281079257329981203">"Выключение..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Планшетный ПК будет отключен."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index c4f6d9c1042d..7d5c184e8ba1 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1847,6 +1847,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Kartica SIM ni omogočena za uporabo"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"Kartica SIM ni dovoljena"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon ni dovoljen"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"Pojavno okno"</string>
</resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index eb5ff1e82947..d6b89e7545b5 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM సక్రియం కాలేదు"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM అనుమతించబడదు"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"ఫోన్ అనుమతించబడదు"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"పాప్అప్ విండో"</string>
</resources>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index f3aad668b274..9c5ad7268151 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1780,6 +1780,5 @@
<string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‏SIM فراہم کردہ نہیں ہے"</string>
<string name="mmcc_illegal_ms" msgid="2769452751852211112">"‏SIM کی اجازت نہیں ہے"</string>
<string name="mmcc_illegal_me" msgid="4438696681169345015">"فون کی اجازت نہیں ہے"</string>
- <!-- no translation found for popup_window_default_title (4874318849712115433) -->
- <skip />
+ <string name="popup_window_default_title" msgid="4874318849712115433">"پاپ اپ ونڈو"</string>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 70b22536f873..ffd88c31b422 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2200,15 +2200,6 @@
when alpha identifier is not provided by the UICC -->
<bool name="config_stkNoAlphaUsrCnf">true</bool>
- <!-- Don't use roaming icon for considered operators.
- A match on config_sameNamedOperatorConsideredRoaming supersedes a match on this.
- Can use mcc or mcc+mnc as item. For example, 302 or 21407.
- If operators, 21404 and 21407, make roaming agreements, user of 21404 should not see
- the roaming icon as using 21407 network.
- To do this, add 21407 item to values-mcc214-mnc04/config.xml -->
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- </string-array>
-
<!-- Threshold (in ms) under which a screen off / screen on will be considered a reset of the
immersive mode confirmation prompt.-->
<integer name="config_immersive_mode_confirmation_panic">5000</integer>
@@ -2216,17 +2207,6 @@
<!-- For some operators, PDU has garbages. To fix it, need to use valid index -->
<integer name="config_valid_wappush_index">-1</integer>
- <!-- This is NOT just for same named operators unlike the name suggests (will blacklist regardless of name).
- A match on this supersedes a match on config_operatorConsideredNonRoaming.
- Uses "startsWith" so you can use a leading substring like the mcc or
- use the complete mcc+mnc string.
- For a given mcc/mcc-mnc, some operators may want to roam (even if
- config_operatorConsideredNonRoaming has the mcc/mcc-mnc).
- user of 40485 should see the roaming icon as using 40483 network
- though same Reliance network.
- To do this, add 40483 item to values-mcc404-mnc85/config.xml -->
- <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
- </string-array>
<!-- call barring MMI code from TS 22.030 Annex B -->
<string-array translatable="false" name="config_callBarringMMI">
<item>33</item>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index f48e037c8e47..4d254c29d466 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -204,7 +204,7 @@
<!-- Displayed to tell the user that they should switch their network preference. -->
<string name="NetworkPreferenceSwitchTitle">Can\u2019t reach network</string>
<!-- Displayed to tell the user that they should switch their network preference. -->
- <string name="NetworkPreferenceSwitchSummary">To improve reception, try changing the type selected at System &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+ <string name="NetworkPreferenceSwitchSummary">To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
<!-- Telephony notification channel name for a channel containing network alert notifications. -->
<string name="notification_channel_network_alert">Alerts</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 934d4b04bf9a..4e634b719071 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1196,8 +1196,6 @@
<java-symbol type="array" name="config_cdma_dun_supported_types" />
<java-symbol type="array" name="config_disabledUntilUsedPreinstalledImes" />
<java-symbol type="array" name="config_disabledUntilUsedPreinstalledCarrierApps" />
- <java-symbol type="array" name="config_operatorConsideredNonRoaming" />
- <java-symbol type="array" name="config_sameNamedOperatorConsideredRoaming" />
<java-symbol type="array" name="config_callBarringMMI" />
<java-symbol type="array" name="config_globalActionsList" />
<java-symbol type="array" name="config_telephonyHardware" />
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index e36ceb8a3e13..c1e81c54f117 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -194,6 +194,12 @@ public final class AudioAttributes implements Parcelable {
* @see #SUPPRESSIBLE_USAGES
*/
public final static int SUPPRESSIBLE_CALL = 2;
+ /**
+ * @hide
+ * Denotes a usage that is never going to be muted, even in Total Silence.
+ * @see #SUPPRESSIBLE_USAGES
+ */
+ public final static int SUPPRESSIBLE_NEVER = 3;
/**
* @hide
@@ -211,6 +217,7 @@ public final class AudioAttributes implements Parcelable {
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_INSTANT,SUPPRESSIBLE_NOTIFICATION);
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_DELAYED,SUPPRESSIBLE_NOTIFICATION);
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_EVENT, SUPPRESSIBLE_NOTIFICATION);
+ SUPPRESSIBLE_USAGES.put(USAGE_ASSISTANCE_ACCESSIBILITY, SUPPRESSIBLE_NEVER);
}
/**
diff --git a/media/java/android/media/IMediaRouterClient.aidl b/media/java/android/media/IMediaRouterClient.aidl
index 9640dcbd6518..08344f188098 100644
--- a/media/java/android/media/IMediaRouterClient.aidl
+++ b/media/java/android/media/IMediaRouterClient.aidl
@@ -21,4 +21,5 @@ package android.media;
*/
oneway interface IMediaRouterClient {
void onStateChanged();
+ void onRestoreRoute();
}
diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl
index f8f5fdfd2d62..3308fc929b03 100644
--- a/media/java/android/media/IMediaRouterService.aidl
+++ b/media/java/android/media/IMediaRouterService.aidl
@@ -27,6 +27,7 @@ interface IMediaRouterService {
void unregisterClient(IMediaRouterClient client);
MediaRouterClientState getState(IMediaRouterClient client);
+ boolean isPlaybackActive(IMediaRouterClient client);
void setDiscoveryRequest(IMediaRouterClient client, int routeTypes, boolean activeScan);
void setSelectedRoute(IMediaRouterClient client, String routeId, boolean explicit);
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index d5509c14e09b..cff7043f0fa2 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -88,6 +88,7 @@ public class MediaRouter {
RouteInfo mBluetoothA2dpRoute;
RouteInfo mSelectedRoute;
+ RouteInfo mSystemAudioRoute;
final boolean mCanConfigureWifiDisplays;
boolean mActivelyScanningWifiDisplays;
@@ -149,6 +150,7 @@ public class MediaRouter {
}
addRouteStatic(mDefaultAudioVideo);
+ mSystemAudioRoute = mDefaultAudioVideo;
// This will select the active wifi display route if there is one.
updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus());
@@ -197,8 +199,8 @@ public class MediaRouter {
} else {
name = com.android.internal.R.string.default_audio_route_name;
}
- sStatic.mDefaultAudioVideo.mNameResId = name;
- dispatchRouteChanged(sStatic.mDefaultAudioVideo);
+ mDefaultAudioVideo.mNameResId = name;
+ dispatchRouteChanged(mDefaultAudioVideo);
updated = true;
}
@@ -207,22 +209,28 @@ public class MediaRouter {
if (!TextUtils.equals(newRoutes.bluetoothName, mCurAudioRoutesInfo.bluetoothName)) {
mCurAudioRoutesInfo.bluetoothName = newRoutes.bluetoothName;
if (mCurAudioRoutesInfo.bluetoothName != null) {
- if (sStatic.mBluetoothA2dpRoute == null) {
- final RouteInfo info = new RouteInfo(sStatic.mSystemCategory);
+ if (mBluetoothA2dpRoute == null) {
+ // BT connected
+ final RouteInfo info = new RouteInfo(mSystemCategory);
info.mName = mCurAudioRoutesInfo.bluetoothName;
- info.mDescription = sStatic.mResources.getText(
+ info.mDescription = mResources.getText(
com.android.internal.R.string.bluetooth_a2dp_audio_route_name);
info.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO;
info.mDeviceType = RouteInfo.DEVICE_TYPE_BLUETOOTH;
- sStatic.mBluetoothA2dpRoute = info;
- addRouteStatic(sStatic.mBluetoothA2dpRoute);
+ mBluetoothA2dpRoute = info;
+ addRouteStatic(mBluetoothA2dpRoute);
+ mSystemAudioRoute = mBluetoothA2dpRoute;
+ selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mSystemAudioRoute, false);
} else {
- sStatic.mBluetoothA2dpRoute.mName = mCurAudioRoutesInfo.bluetoothName;
- dispatchRouteChanged(sStatic.mBluetoothA2dpRoute);
+ mBluetoothA2dpRoute.mName = mCurAudioRoutesInfo.bluetoothName;
+ dispatchRouteChanged(mBluetoothA2dpRoute);
}
- } else if (sStatic.mBluetoothA2dpRoute != null) {
- removeRouteStatic(sStatic.mBluetoothA2dpRoute);
- sStatic.mBluetoothA2dpRoute = null;
+ } else if (mBluetoothA2dpRoute != null) {
+ // BT disconnected
+ removeRouteStatic(mBluetoothA2dpRoute);
+ mBluetoothA2dpRoute = null;
+ mSystemAudioRoute = mDefaultAudioVideo;
+ selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mSystemAudioRoute, false);
}
updated = true;
}
@@ -230,11 +238,13 @@ public class MediaRouter {
if (mBluetoothA2dpRoute != null) {
final boolean a2dpEnabled = isBluetoothA2dpOn();
if (mSelectedRoute == mBluetoothA2dpRoute && !a2dpEnabled) {
- selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo, false);
+ // A2DP off
+ mSystemAudioRoute = mDefaultAudioVideo;
updated = true;
} else if ((mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == null) &&
a2dpEnabled) {
- selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute, false);
+ // A2DP on or BT connected
+ mSystemAudioRoute = mBluetoothA2dpRoute;
updated = true;
}
}
@@ -471,7 +481,7 @@ public class MediaRouter {
}
RouteInfo makeGlobalRoute(MediaRouterClientState.RouteInfo globalRoute) {
- RouteInfo route = new RouteInfo(sStatic.mSystemCategory);
+ RouteInfo route = new RouteInfo(mSystemCategory);
route.mGlobalRouteId = globalRoute.id;
route.mName = globalRoute.name;
route.mDescription = globalRoute.description;
@@ -567,6 +577,17 @@ public class MediaRouter {
return null;
}
+ boolean isPlaybackActive() {
+ if (mClient != null) {
+ try {
+ return mMediaRouterService.isPlaybackActive(mClient);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Unable to retrieve playback active state.", ex);
+ }
+ }
+ return false;
+ }
+
final class Client extends IMediaRouterClient.Stub {
@Override
public void onStateChanged() {
@@ -579,6 +600,19 @@ public class MediaRouter {
}
});
}
+
+ @Override
+ public void onRestoreRoute() {
+ if ((mSelectedRoute != mDefaultAudioVideo && mSelectedRoute != mBluetoothA2dpRoute)
+ || mSelectedRoute == mSystemAudioRoute) {
+ return;
+ }
+ try {
+ sStatic.mAudioService.setBluetoothA2dpOn(mSelectedRoute == mBluetoothA2dpRoute);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error changing Bluetooth A2DP state", e);
+ }
+ }
}
}
@@ -900,7 +934,12 @@ public class MediaRouter {
Log.v(TAG, "Selecting route: " + route);
assert(route != null);
final RouteInfo oldRoute = sStatic.mSelectedRoute;
- if (oldRoute == route) return;
+ boolean wasDefaultOrBluetoothRoute = (oldRoute == sStatic.mDefaultAudioVideo
+ || oldRoute == sStatic.mBluetoothA2dpRoute);
+ if (oldRoute == route
+ && (!wasDefaultOrBluetoothRoute || oldRoute == sStatic.mSystemAudioRoute)) {
+ return;
+ }
if (!route.matchesTypes(types)) {
Log.w(TAG, "selectRoute ignored; cannot select route with supported types " +
typesToString(route.getSupportedTypes()) + " into route types " +
@@ -909,8 +948,8 @@ public class MediaRouter {
}
final RouteInfo btRoute = sStatic.mBluetoothA2dpRoute;
- if (btRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0 &&
- (route == btRoute || route == sStatic.mDefaultAudioVideo)) {
+ if (sStatic.isPlaybackActive() && btRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0
+ && (route == btRoute || route == sStatic.mDefaultAudioVideo)) {
try {
sStatic.mAudioService.setBluetoothA2dpOn(route == btRoute);
} catch (RemoteException e) {
diff --git a/packages/InputDevices/res/values-b+sr+Latn/strings.xml b/packages/InputDevices/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 88a977f4aed8..000000000000
--- a/packages/InputDevices/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Ulazni uređaji"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android tastatura"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"engleska (UK)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"engleska (SAD)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"engleska (SAD), međunarodni stil"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"engleska (SAD), Colemak stil"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"engleska (SAD), Dvorak stil"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"engleska (SAD), Workman stil"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"nemačka"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"francuska"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francuska (Kanada)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruska"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruska, Mac stil"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španska"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švajcarsko francuska"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švajcarsko nemačka"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgijska"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bugarska"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"italijanska"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"danska"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norveška"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"švedska"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finska"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"hrvatska"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"češka"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonska"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"mađarska"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandska"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilska"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalska"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovačka"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenačka"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turska"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinska"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arapski"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"grčki"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejski"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litvanski"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španski (Latinska Amerika)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"letonski"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-be/strings.xml b/packages/InputDevices/res/values-be/strings.xml
deleted file mode 100644
index a552fa57419d..000000000000
--- a/packages/InputDevices/res/values-be/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Клавіятура Android"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"англійская (Вялікабрытанія)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"англійская (ЗША)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Англійская (ЗША), міжнар. раскладка"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Англійская (ЗША), раскладка Colemak"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Англійская (ЗША), раскладка Дворака"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"Англійская (ЗША), раскладка Workman"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Нямецкая"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"Французская"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Французская (Канада)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Руская"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Руская, раскладка Mac"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Іспанская"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Французская (Швейцарыя)"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Нямецкая (Швейцарыя)"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Бельгійская"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Балгарская"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"Італьянская"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"Дацкая"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Нарвежская"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"Шведская"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Фінская"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Харвацкая"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"Чэшская"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Эстонская"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Венгерская"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Ісландская"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Бразільская"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Партугальская"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Славацкая"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Славенская"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Турэцкая"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Украінская"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабская"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"Грэчаская"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Іўрыт"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Літоўская"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Іспанская (Лацінская Амерыка)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латышская"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-bs/strings.xml b/packages/InputDevices/res/values-bs/strings.xml
deleted file mode 100644
index 9672ae84a0a7..000000000000
--- a/packages/InputDevices/res/values-bs/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Ulazni uređaji"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android tastatura"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"engleski (UK)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"engleski (SAD)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"engleski (SAD), međunarodni stil"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"engleski (SAD), Colemak stil"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"engleski (SAD), Dvorak stil"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"Engleski (SAD), Workman"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"njemački"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"francuski"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francuski (Kanada)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruski"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruski, Mac stil"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španski"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švicarski francuski"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švicarski njemački"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgijski"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bugarski"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"italijanski"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"danski"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norveški"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"švedski"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finski"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"hrvatski"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"češki"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonski"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"mađarski"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandski"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilski"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalski"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovački"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenački"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turski"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinski"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arapski"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"grčki"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejski"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litvanski"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španski (Latinska Amerika)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"latvijski"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-en-rAU/strings.xml b/packages/InputDevices/res/values-en-rAU/strings.xml
deleted file mode 100644
index 01c2979ec107..000000000000
--- a/packages/InputDevices/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"English (UK)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"English (US)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"English (US), International style"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"English (US), Colemak style"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"English (US), Dvorak style"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"English (US), Workman style"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, Mac style"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-gu/strings.xml b/packages/InputDevices/res/values-gu/strings.xml
deleted file mode 100644
index e83b0ca49dad..000000000000
--- a/packages/InputDevices/res/values-gu/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"ઇનપુટ ઉપકરણો"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android કીબોર્ડ"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"અંગ્રેજી (યુકે)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"અંગ્રેજી (યુએસ)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"અંગ્રેજી (યુએસ), આંતરરાષ્ટ્રીય શૈલી"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"અંગ્રેજી (યુએસ), કોલેમેક શૈલી"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"અંગ્રેજી (યુએસ), ડ્વોરક શૈલી"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"અંગ્રેજી (યુએસ), વર્કમૅન શૈલી"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"જર્મન"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"ફ્રેન્ચ"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ફ્રેન્ચ (કેનેડા)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"રશિયન"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"રશિયન, Mac શૈલી"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"સ્પેનિશ"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"સ્વિસ ફ્રેંચ"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"સ્વિસ જર્મન"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"બેલ્જિયન"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"બલ્ગેરિયન"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"ઇટાલિયન"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"ડેનિશ"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"નોર્વેજીયન"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"સ્વીડિશ"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ફિનિશ"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ક્રોએશિયન"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"ચેક"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"એસ્ટોનિયન"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"હંગેરિયન"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"આઇસલેન્ડિક"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"બ્રાઝિલિયન"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"પોર્ટુગીઝ"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"સ્લોવૅક"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"સ્લોવેનિયન"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ટર્કીશ"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"યુક્રેનિયન"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"અરબી"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"ગ્રીક"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"હીબ્રુ"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"લિથુનિયન"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"સ્પેનિશ (લેટિન)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"લાતવિયન"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-pa/strings.xml b/packages/InputDevices/res/values-pa/strings.xml
deleted file mode 100644
index 574ce810c8b1..000000000000
--- a/packages/InputDevices/res/values-pa/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"ਇਨਪੁਟ ਡਿਵਾਈਸਾਂ"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android ਕੀ-ਬੋਰਡ"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ਅੰਗ੍ਰੇਜ਼ੀ (ਯੂਕੇ)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ਅੰਗ੍ਰੇਜੀ (ਅਮ੍ਰੀਕਾ)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਅੰਤਰਰਾਸ਼ਟਰੀ ਸਟਾਈਲ"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਕੋਲਮਾਰਕ ਸਟਾਈਲ"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਵੋਰਕ ਸਟਾਈਲ"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"ਅੰਗਰੇਜ਼ੀ (US), ਵਰਕਮੈਨ ਸਟਾਈਲ"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"ਜਰਮਨ"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"ਫਰਾਂਸੀਸੀ"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ਫ੍ਰੈਂਚ (ਕੈਨੇਡਾ)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ਰੂਸੀ"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ਰੂਸੀ, ਮੈਕ ਸਟਾਈਲ"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"ਸਪੇਨੀ"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"ਸਵਿਸ ਫ੍ਰੈਂਚ"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"ਸਵਿਸ ਜਰਮਨ"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"ਬੈਲਜੀਅਨ"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ਬਲਗੇਰੀਅਨ"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"ਇਤਾਲਵੀ"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"ਡੈਨਿਸ਼"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ਨਾਰਵੇਜੀਅਨ"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"ਸਵੀਡਿਸ਼"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ਫਿਨਿਸ਼"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ਕਰੋਆਟੀਆਈ"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"ਚੈਕ"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ਇਸਟੋਨੀਅਨ"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ਹੰਗੇਰੀਅਨ"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ਆਈਸਲੈਂਡੀ"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ਬ੍ਰਾਜ਼ਿਲਿਆਈ"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"ਪੁਰਤਗਾਲੀ"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"ਸਲੋਵਾਕ"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"ਸਲੋਵੀਅਨ"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ਤੁਰਕੀ"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ਯੂਕਰੇਨੀਅਨ"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ਅਰਬੀ"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"ਯੂਨਾਨੀ"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ਹਿਬਰੀ"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ਲੀਥੂਨੀਅਨ"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ਸਪੇਨੀ (ਲਾਤੀਨੀ)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ਲਾਤਵੀਅਨ"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-pt-rBR/strings.xml b/packages/InputDevices/res/values-pt-rBR/strings.xml
deleted file mode 100644
index a1503a4ebcb3..000000000000
--- a/packages/InputDevices/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Dispositivos de entrada"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado do Android"</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglês (Reino Unido)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglês (EUA)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglês (EUA), estilo internacional"</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglês (EUA), estilo Colemak"</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglês (EUA), estilo Dvorak"</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"Inglês (EUA), estilo Workman"</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemão"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francês"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francês (Canadá)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russo"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russo, estilo Mac"</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espanhol"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francês suíço"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemão suíço"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgaro"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dinamarquês"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norueguês"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sueco"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandês"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tcheco"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estoniano"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandês"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasileiro"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Português"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovaco"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Esloveno"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraniano"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Árabe"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grego"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebraico"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letão"</string>
-</resources>
diff --git a/packages/InputDevices/res/values-sq/strings.xml b/packages/InputDevices/res/values-sq/strings.xml
deleted file mode 100644
index 8a9000db65c5..000000000000
--- a/packages/InputDevices/res/values-sq/strings.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="8016145283189546017">"Pajisjet e hyrjes"</string>
- <string name="keyboard_layouts_label" msgid="6688773268302087545">"Tastierë e llojit \"androidi\""</string>
- <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"anglisht (Mbretëria e Bashkuar)"</string>
- <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"anglisht (SHBA)"</string>
- <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"anglisht (SHBA), stili \"ndërkombëtar\""</string>
- <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"anglisht (SHBA), stili \"colemak\""</string>
- <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"anglisht (SHBA), stili \"dvorak\""</string>
- <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"anglisht (SHBA), stili \"workman\""</string>
- <string name="keyboard_layout_german_label" msgid="8451565865467909999">"gjermanisht"</string>
- <string name="keyboard_layout_french_label" msgid="813450119589383723">"frëngjisht"</string>
- <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"frëngjisht (Kanada)"</string>
- <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"rusisht"</string>
- <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"rusisht, stili \"mac\""</string>
- <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"spanjisht"</string>
- <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"frëngjishte zvicerane"</string>
- <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"gjermanishte zvicerane"</string>
- <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belge"</string>
- <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bullgarisht"</string>
- <string name="keyboard_layout_italian" msgid="6497079660449781213">"italisht"</string>
- <string name="keyboard_layout_danish" msgid="8036432066627127851">"danisht"</string>
- <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norvegjisht"</string>
- <string name="keyboard_layout_swedish" msgid="732959109088479351">"suedisht"</string>
- <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finlandisht"</string>
- <string name="keyboard_layout_croatian" msgid="4172229471079281138">"kroatisht"</string>
- <string name="keyboard_layout_czech" msgid="1349256901452975343">"çekisht"</string>
- <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonisht"</string>
- <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"hungarisht"</string>
- <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandisht"</string>
- <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"braziliane"</string>
- <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalisht"</string>
- <string name="keyboard_layout_slovak" msgid="2469379934672837296">"sllovakisht"</string>
- <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"sllovenisht"</string>
- <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turqisht"</string>
- <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrainisht"</string>
- <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabisht"</string>
- <string name="keyboard_layout_greek" msgid="7289253560162386040">"greqisht"</string>
- <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebraisht"</string>
- <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"lituanisht"</string>
- <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"spanjisht (latine)"</string>
- <string name="keyboard_layout_latvian" msgid="4405417142306250595">"letonisht"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-af/strings.xml b/packages/MtpDocumentsProvider/res/values-af/strings.xml
deleted file mode 100644
index c2c8761146f3..000000000000
--- a/packages/MtpDocumentsProvider/res/values-af/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-gasheer"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Aflaaie"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Toegang tot lêers word tans van <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> af verkry"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Die ander toestel is besig. Jy kan nie lêers oordra voordat dit beskikbaar is nie."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Geen lêers is gevind nie. Die ander toestel is dalk gesluit. Indien wel, ontsluit dit en probeer weer."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-am/strings.xml b/packages/MtpDocumentsProvider/res/values-am/strings.xml
deleted file mode 100644
index 7b721c86cec0..000000000000
--- a/packages/MtpDocumentsProvider/res/values-am/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"የMTP አስተናጋጅ"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"የወረዱ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"ፋይሎችን ከ<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> በመድረስ ላይ"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ሌላኛው መሣሪያ ሥራ በዝቶበታል። እስከሚገኝ ድረስ ፋይሎችን ማስተላለፍ አይችሉም።"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ምንም ፋይሎች አልተገኙም። ሌላኛው መሣሪያ ተቆልፎ ሊሆን ይችላል። ተቆልፎ ከሆነ ይክፈቱት እና እንደገና ይሞክሩ።"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ar/strings.xml b/packages/MtpDocumentsProvider/res/values-ar/strings.xml
deleted file mode 100644
index 284a8602ce6a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ar/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"‏مضيف بروتوكول نقل الوسائط (MTP)"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"التنزيلات"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"جارٍ الوصول إلى الملفات من <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"الجهاز الآخر مشغول، ولا يمكنك نقل الملفات إلا بعد أن يصبح متاحًا."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"لم يتم العثور على ملفات، وربما يكون الجهاز الآخر في وضع القفل. إذا كان الأمر كذلك، فعليك إلغاء قفله وإعادة المحاولة."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-az/strings.xml b/packages/MtpDocumentsProvider/res/values-az/strings.xml
deleted file mode 100644
index e8ed1242f13c..000000000000
--- a/packages/MtpDocumentsProvider/res/values-az/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Endirmələr"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Fayllara <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> cihazından daxil olunur"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Digər cihaz məşğuldur. Əlçatan olmayana kimi fayl köçürə bilməzsiniz."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Fayl tapılmadı. Digər cihaz kilidlənmiş ola bilər. Elədirsə, kiliddən çıxarın və yenidən cəhd edin."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml b/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index bc9009969a16..000000000000
--- a/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Pristup datotekama sa uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Drugi uređaj je zauzet. Datoteke možete da prenesete tek kad on postane dostupan."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nije pronađena nijedna datoteka. Drugi uređaj je možda zaključan. Ako jeste, otključajte ga i pokušajte ponovo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-be/strings.xml b/packages/MtpDocumentsProvider/res/values-be/strings.xml
deleted file mode 100644
index f6263acb0150..000000000000
--- a/packages/MtpDocumentsProvider/res/values-be/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Вузел MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Спампоўкі"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Доступ да файлаў з <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Іншая прылада занята. Вы не можаце перадаць файлы, пакуль яна не стане даступнай."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Файлы не знойдзены. Іншая прылада можа быць заблакіравана. Калі гэта так, разблакіруйце яе і паўтарыце спробу."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bg/strings.xml b/packages/MtpDocumentsProvider/res/values-bg/strings.xml
deleted file mode 100644
index 52d311971fc1..000000000000
--- a/packages/MtpDocumentsProvider/res/values-bg/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP хост"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Изтегляния"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> на <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"От <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> се осъществява достъп до файловете"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Другото устройство е заето. Не можете да прехвърляте файлове, докато то не се освободи."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Няма намерени файлове. Другото устройство може да е заключено. Ако е така, отключете го и опитайте отново."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bn/strings.xml b/packages/MtpDocumentsProvider/res/values-bn/strings.xml
deleted file mode 100644
index 7fad89e89d60..000000000000
--- a/packages/MtpDocumentsProvider/res/values-bn/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP হোস্ট"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ডাউনলোডগুলি"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> থেকে ফাইলগুলিকে অ্যাক্সেস করা হচ্ছে"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"অন্য ডিভাইসটি ব্যস্ত আছে৷ এটি উপলব্ধ না হওয়া পর্যন্ত আপনি ফাইলগুলিকে স্থানান্তর করতে পারবেন না৷"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"কোনো ফাইল পাওয়া যায়নি৷ অন্য ডিভাইসটি লক থাকতে পারে৷ যদি তাই হয়, তাহলে এটিকে আনলক করে আবার চেষ্টা করুন৷"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bs/strings.xml b/packages/MtpDocumentsProvider/res/values-bs/strings.xml
deleted file mode 100644
index 33323f81f81a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-bs/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Pristupanje datotekama iz uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Drugi uređaj je zauzet. Nećete moći prenositi fajlove dok ne bude dostupan."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Fajlovi nisu pronađeni. Moguće je da je drugi uređaj zaključan. Ako jeste, otključajte ga i pokušajte ponovo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ca/strings.xml b/packages/MtpDocumentsProvider/res/values-ca/strings.xml
deleted file mode 100644
index b2aa59966ac4..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ca/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Amfitrió MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Baixades"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"S\'està accedint als fitxers del dispositiu <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"L\'altre dispositiu està ocupat. No pots transferir fitxers fins que estigui disponible."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No s\'han trobat fitxers. És possible que l\'altre dispositiu estigui bloquejat. Si és així, desbloqueja\'l i torna-ho a provar."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-cs/strings.xml b/packages/MtpDocumentsProvider/res/values-cs/strings.xml
deleted file mode 100644
index 2156e8c52f7e..000000000000
--- a/packages/MtpDocumentsProvider/res/values-cs/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Hostitel MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Stahování"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> – <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Používání souborů ze zařízení <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Druhé zařízení je zaneprázdněné. Dokud nebude dostupné, soubory nelze přenést."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nebyly nalezeny žádné soubory. Druhé zařízení je možná uzamčené. Pokud ano, odemkněte jej a zkuste to znovu."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-da/strings.xml b/packages/MtpDocumentsProvider/res/values-da/strings.xml
deleted file mode 100644
index b82c5e8b0af8..000000000000
--- a/packages/MtpDocumentsProvider/res/values-da/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Adgang til filer fra <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Den anden enhed er optaget. Du kan ikke overføre filer, før den er tilgængelig."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Der blev ikke fundet nogen filer. Den anden enhed er muligvis låst. Hvis dette er tilfældet, skal du låse den op og prøve igen."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-de/strings.xml b/packages/MtpDocumentsProvider/res/values-de/strings.xml
deleted file mode 100644
index 9a71c769aaed..000000000000
--- a/packages/MtpDocumentsProvider/res/values-de/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> von <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Zugriff auf Dateien von <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Das andere Gerät ist nicht verfügbar. Du kannst die Dateien übertragen, sobald das Gerät wieder verfügbar ist."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Keine Dateien gefunden. Das andere Gerät ist möglicherweise gesperrt. Entsperre es in diesem Fall und versuche es noch einmal."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-el/strings.xml b/packages/MtpDocumentsProvider/res/values-el/strings.xml
deleted file mode 100644
index 562d2952988a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-el/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Κεντρικός υπολογιστής MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Λήψεις"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Πρόσβαση στα αρχεία από τη συσκευή <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Η άλλη συσκευή είναι απασχολημένη. Δεν μπορείτε να μεταφέρετε αρχεία μέχρι να γίνει διαθέσιμη."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Δεν βρέθηκαν αρχεία. Η άλλη συσκευή ενδέχεται να είναι κλειδωμένη. Εάν ισχύει αυτό, ξεκλειδώστε την και δοκιμάστε ξανά."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml
deleted file mode 100644
index 5f2167e8273a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml
deleted file mode 100644
index 5f2167e8273a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml
deleted file mode 100644
index 5f2167e8273a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml b/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml
deleted file mode 100644
index 740d224d7136..000000000000
--- a/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accediendo a los archivos de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"El otro dispositivo está ocupado. No podrás transferir archivos hasta que esté disponible."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No se encontraron archivos. Es posible que el otro dispositivo esté bloqueado. Si es así, desbloquéalo y vuelve a intentarlo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-es/strings.xml b/packages/MtpDocumentsProvider/res/values-es/strings.xml
deleted file mode 100644
index d80a75ac07f7..000000000000
--- a/packages/MtpDocumentsProvider/res/values-es/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host de MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accediendo a los archivos desde <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"El otro dispositivo está ocupado. No se pueden transferir archivos hasta que esté disponible."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"No se ha encontrado ningún archivo. Es posible que el otro dispositivo esté bloqueado. Si es así, desbloquéalo y vuelve a intentarlo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-et/strings.xml b/packages/MtpDocumentsProvider/res/values-et/strings.xml
deleted file mode 100644
index 7568777e15f7..000000000000
--- a/packages/MtpDocumentsProvider/res/values-et/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Allalaadimised"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>, <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Juurdepääsemine failidele seadmest <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Teine seade on hõivatud. Te ei saa faile üle viia enne, kui see seade on saadaval."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Faile ei leitud. Teine seade võib olla lukustatud. Kui see on nii, avage see ja proovige uuesti."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-eu/strings.xml b/packages/MtpDocumentsProvider/res/values-eu/strings.xml
deleted file mode 100644
index dc9d463b98eb..000000000000
--- a/packages/MtpDocumentsProvider/res/values-eu/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ostalaria"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Deskargak"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> gailuko fitxategiak atzitzen"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Beste gailua lanpetuta dago. Erabilgarri egon arte ezingo duzu transferitu fitxategirik."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Ez da aurkitu fitxategirik. Baliteke beste gailua blokeatuta egotea. Hala bada, desblokea ezazu eta saiatu berriro."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fa/strings.xml b/packages/MtpDocumentsProvider/res/values-fa/strings.xml
deleted file mode 100644
index 9ac58c7ad3f1..000000000000
--- a/packages/MtpDocumentsProvider/res/values-fa/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"‏میزبان MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"بارگیری‌ها"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"دسترسی به فایل‌ها از <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"دستگاه دیگر مشغول است. تا زمانی که این دستگاه دردسترس قرار نگیرد نمی‌توانید فایل‌ها را منتقل کنید."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"فایلی پیدا نشد. دستگاه دیگر ممکن است قفل باشد. اگر این‌طور است، قفل آن را باز کنید و دوباره تلاش کنید."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fi/strings.xml b/packages/MtpDocumentsProvider/res/values-fi/strings.xml
deleted file mode 100644
index 0a61d08a566e..000000000000
--- a/packages/MtpDocumentsProvider/res/values-fi/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-isäntä"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Lataukset"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Käytetään laitteen <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> tiedostoja"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Toinen laite on varattu. Et voi siirtää tiedostoja, ennen kuin se on käytettävissä."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Tiedostoja ei löytynyt. Toinen laite voi olla lukittu. Jos näin on, avaa se ja yritä uudelleen."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml b/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml
deleted file mode 100644
index 281760ecb620..000000000000
--- a/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Hôte MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Téléchargements"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accès aux fichiers à partir de l\'appareil <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"L\'autre appareil est occupé. Vous devez attendre qu\'il soit disponible pour transférer des fichiers."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Aucun fichier trouvé. L\'autre appareil est peut-être verrouillé. Si c\'est le cas, déverrouillez-le, puis réessayez."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fr/strings.xml b/packages/MtpDocumentsProvider/res/values-fr/strings.xml
deleted file mode 100644
index 96c713b61af4..000000000000
--- a/packages/MtpDocumentsProvider/res/values-fr/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Hôte MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Téléchargements"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> – <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accès aux fichiers depuis le <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>…"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"L\'autre appareil est occupé. Vous devez attendre qu\'il soit disponible pour transférer des fichiers."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Aucun fichier trouvé. L\'autre appareil est peut-être verrouillé. Si tel est le cas, déverrouillez-le, puis réessayez."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-gl/strings.xml b/packages/MtpDocumentsProvider/res/values-gl/strings.xml
deleted file mode 100644
index 7e61c7cedff9..000000000000
--- a/packages/MtpDocumentsProvider/res/values-gl/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accedendo aos ficheiros do dispositivo <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Non podes transferir ficheiros ata que estea dispoñible."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Non se atopou ningún ficheiro. Se o outro dispositivo está bloqueado, desbloquéao e téntao de novo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-gu/strings.xml b/packages/MtpDocumentsProvider/res/values-gu/strings.xml
deleted file mode 100644
index 40ec38ddcda9..000000000000
--- a/packages/MtpDocumentsProvider/res/values-gu/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP હોસ્ટ"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ડાઉનલોડ્સ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ની ફાઇલોને ઍક્સેસ કરી રહ્યાં છે"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"અન્ય ઉપકરણ વ્યસ્ત છે. તે ઉપલબ્ધ ન થાય ત્યાં સુધી તમે ફાઇલોને સ્થાનાંતરિત કરી શકતાં નથી."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"કોઈ ફાઇલો મળી નહીં. અન્ય ઉપકરણ લૉક કરેલ હોઈ શકે છે. જો આમ હોય, તો તેને અનલૉક કરો અને ફરી પ્રયાસ કરો."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hi/strings.xml b/packages/MtpDocumentsProvider/res/values-hi/strings.xml
deleted file mode 100644
index 1cf1c03780e8..000000000000
--- a/packages/MtpDocumentsProvider/res/values-hi/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> से फ़ाइलें एक्सेस कर रहा है"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"दूसरा डिवाइस व्यस्त है. आप उसके उपलब्ध हो जाने तक फ़ाइलें स्थानांतरित नहीं कर सकते हैं."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"कोई फ़ाइल नहीं मिली. हो सकता है कि दूसरा डिवाइस लॉक हो. यदि ऐसा है, तो उसे अनलॉक करें और पुन: प्रयास करें."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hr/strings.xml b/packages/MtpDocumentsProvider/res/values-hr/strings.xml
deleted file mode 100644
index 63fc5c768113..000000000000
--- a/packages/MtpDocumentsProvider/res/values-hr/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g><xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Pristupanje datotekama s uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Drugi je uređaj zauzet. Datoteke ćete moći prenijeti kada postane dostupan."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Datoteke nisu pronađene. Drugi je uređaj možda zaključan. U tom ga slučaju otključajte i pokušajte ponovo."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hu/strings.xml b/packages/MtpDocumentsProvider/res/values-hu/strings.xml
deleted file mode 100644
index e5b822c14271..000000000000
--- a/packages/MtpDocumentsProvider/res/values-hu/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Letöltések"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Hozzáférés a fájlokhoz a következő eszközről: <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"A másik eszköz elfoglalt. Nem vihetők át fájlok addig, amíg rendelkezésre nem áll."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nem található fájl. Lehet, hogy a másik eszköz zárolva van. Ha igen, oldja fel, és próbálkozzon újra."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hy/strings.xml b/packages/MtpDocumentsProvider/res/values-hy/strings.xml
deleted file mode 100644
index 3a6bfb50de44..000000000000
--- a/packages/MtpDocumentsProvider/res/values-hy/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP խնամորդ"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Ներբեռնումներ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Մուտք է գործում ֆայլեր <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> սարքից"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Մյուս սարքը զբաղված է: Ֆայլերը կարող եք փոխանցել միայն երբ այն հասանելի է:"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Ֆայլեր չեն գտնվել: Հնարավոր է, որ մյուս սարքը կողպված է: Եթե դա այդպես է, ապակողպեք այն և փորձեք նորից:"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-in/strings.xml b/packages/MtpDocumentsProvider/res/values-in/strings.xml
deleted file mode 100644
index 6f65337a1d61..000000000000
--- a/packages/MtpDocumentsProvider/res/values-in/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Download"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Mengakses file dari <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Perangkat lainnya sedang sibuk. Anda dapat mentransfer file jika telah tersedia."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"File tidak ditemukan. Perangkat lainnya mungkin terkunci. Jika begitu, buka kuncinya dan coba lagi."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-is/strings.xml b/packages/MtpDocumentsProvider/res/values-is/strings.xml
deleted file mode 100644
index 9388f7e76efa..000000000000
--- a/packages/MtpDocumentsProvider/res/values-is/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-hýsill"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Niðurhal"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Fær aðgang að skrám frá <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Hitt tækið er upptekið. Þú getur ekki fært skrár fyrr en það er tiltækt."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Engar skrár fundust. Hitt tækið gæti verið læst. Ef svo er skaltu opna það og reyna aftur."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-it/strings.xml b/packages/MtpDocumentsProvider/res/values-it/strings.xml
deleted file mode 100644
index a41699f55282..000000000000
--- a/packages/MtpDocumentsProvider/res/values-it/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Download"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> di <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Accesso ai file da <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"L\'altro dispositivo è occupato. I file non possono essere trasferiti fino a quando non sarà disponibile."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nessun file trovato. L\'altro dispositivo potrebbe essere bloccato. In questo caso, sbloccalo e riprova."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-iw/strings.xml b/packages/MtpDocumentsProvider/res/values-iw/strings.xml
deleted file mode 100644
index 62dfe7dd4ebb..000000000000
--- a/packages/MtpDocumentsProvider/res/values-iw/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"‏מארח פרוטוקול העברת מדיה (MTP)"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"הורדות"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"גישה לקבצים מ-<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"המכשיר השני לא פנוי. ניתן יהיה להעביר קבצים רק לאחר שהוא יהיה זמין."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"לא נמצאו קבצים. ייתכן שהמכשיר השני נעול. אם כן, פתח אותו ונסה שוב."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ja/strings.xml b/packages/MtpDocumentsProvider/res/values-ja/strings.xml
deleted file mode 100644
index 4ae59f5d9037..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ja/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ホスト"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ダウンロード"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> からファイルにアクセスしています"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"接続先の端末は使用中のため、利用できるようになるまでファイルを転送できません。"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ファイルが見つかりません。接続先の端末がロックされている可能性があります。その場合は、ロックを解除してからもう一度お試しください。"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ka/strings.xml b/packages/MtpDocumentsProvider/res/values-ka/strings.xml
deleted file mode 100644
index 33812dfbf3df..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ka/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ჰოსტი"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ჩამოტვირთვები"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"მიმდინარეობს <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>-ზე არსებულ ფაილებზე წვდომა"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"სხვა მოწყობილობა დაკავებულია. ფაილების გადატანა ვერ მოხერხდება, სანამ ის ხელმისაწვდომი არ გახდება."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ფაილები ვერ მოიძებნა. მეორე მოწყობილობა შეიძლება დაბლოკილი იყოს. ამ შემთხვევაში, განბლოკეთ ის და ცადეთ ხელახლა."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-kk/strings.xml b/packages/MtpDocumentsProvider/res/values-kk/strings.xml
deleted file mode 100644
index a6dea5b97b03..000000000000
--- a/packages/MtpDocumentsProvider/res/values-kk/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP хосты"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Жүктеп алынғандар"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Файлдарға <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> құрылғысынан кіру"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Екінші құрылғы бос емес. Ол босамайынша, файлдар тасымалданбайды."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Ешқандай файл табылмады. Екінші құрылғы құлыптаулы болуы мүмкін. Құлыптаулы болса, құлпын ашып, қайталап көріңіз."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-km/strings.xml b/packages/MtpDocumentsProvider/res/values-km/strings.xml
deleted file mode 100644
index baffa95c426b..000000000000
--- a/packages/MtpDocumentsProvider/res/values-km/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"ម៉ាស៊ីន MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ដោយឡូត"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"កំពុងចូលដំណើរការពី <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ឧបករណ៍ផ្សេងទៀតកំពុងជាប់រវល់។ អ្នកមិនផ្ទេរឯកសារបានទេ រហូតទាល់តែវាអាចប្រើបាន។"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"រកមិនឃើញឯកសារទេ។ ឧបករណ៍ផ្សេងទៀតប្រហែលជាត្រូវបានចាក់សោ។ ប្រសិនបើវាត្រូវបានចាក់សោមែន សូមដោះសោ ហើយព្យាយាមម្តងទៀត។"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-kn/strings.xml b/packages/MtpDocumentsProvider/res/values-kn/strings.xml
deleted file mode 100644
index 3f16c142aba1..000000000000
--- a/packages/MtpDocumentsProvider/res/values-kn/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ಹೋಸ್ಟ್"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ಡೌನ್‌ಲೋಡ್‌ಗಳು"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ನಿಂದ ಫೈಲ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ಬೇರೆಯ ಸಾಧನವು ಕಾರ್ಯನಿರತವಾಗಿದೆ. ಇದು ಲಭ್ಯವಾಗುವವರೆಗೆ ಫೈಲ್‌ಗಳನ್ನು ನಿಮಗೆ ವರ್ಗಾಯಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ಯಾವುದೇ ಫೈಲ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ಬೇರೆಯ ಸಾಧನವು ಲಾಕ್ ಆಗಿರಬಹುದು. ಹಾಗಾದಲ್ಲಿ, ಇದನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ko/strings.xml b/packages/MtpDocumentsProvider/res/values-ko/strings.xml
deleted file mode 100644
index bbe2fe6d78a4..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ko/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP 호스트"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"다운로드"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>에서 파일에 액세스 중"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"다른 기기가 사용 중입니다. 다른 기기를 사용할 수 있을 때까지 파일을 전송할 수 없습니다."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"파일이 없습니다. 다른 기기가 잠겨 있을 수 있습니다. 기기의 잠금을 해제하고 다시 시도하세요."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ky/strings.xml b/packages/MtpDocumentsProvider/res/values-ky/strings.xml
deleted file mode 100644
index e60a494a9919..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ky/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP хосту"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Жүктөлүп алынган нерселер"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> түзмөгүндөгү файлдар колдонулууда"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Берки түзмөк бош эмес. Ал бошомоюнча файлдарды өткөрө албайсыз."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Бир дагы файл табылган жок. Берки түзмөк кулпуланып турат окшойт. Кулпусун ачып, кайра аракет кылып көрүңүз."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lo/strings.xml b/packages/MtpDocumentsProvider/res/values-lo/strings.xml
deleted file mode 100644
index bcc0ee6b7ff3..000000000000
--- a/packages/MtpDocumentsProvider/res/values-lo/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"ໂຮສ MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ການດາວໂຫລດ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"ກຳລັງເຂົ້າເຖິງໄຟລ໌ຈາກ <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ອຸປະກອນອື່ນບໍ່ຫວ່າງເທື່ອ. ທ່ານບໍ່ສາມາດໂອນຍ້າຍໄຟລ໌ໄດ້ຈົນກວ່າມັນຈະຫວ່າງ."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ບໍ່ພົບໄຟລ໌. ອຸປະກອນອີກເຄື່ອງອາດຖືກລັອກໄວ້ຢູ່. ຫາກມັນຖືກລັອກໄວ້, ໃຫ້ປົດລັອກມັນກ່ອນແລ້ວລອງໃໝ່ອີກຄັ້ງ."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lt/strings.xml b/packages/MtpDocumentsProvider/res/values-lt/strings.xml
deleted file mode 100644
index 8bff3a8fe78a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-lt/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MPP priegloba"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Atsisiuntimai"</string>
- <string name="root_name" msgid="5819495383921089536">"„<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>“ <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Pasiekiami failai iš „<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>“"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Kitas įrenginys yra užsiėmęs. Failus galėsite perkelti tik tada, kai jis bus pasiekiamas."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nerasta failų. Gali būti, kad kitas įrenginys yra užrakintas. Jei taip yra, atrakinkite jį ir bandykite dar kartą."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lv/strings.xml b/packages/MtpDocumentsProvider/res/values-lv/strings.xml
deleted file mode 100644
index 5e96338afaa0..000000000000
--- a/packages/MtpDocumentsProvider/res/values-lv/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP saimniekdators"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Lejupielādes"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Piekļuve failiem no: <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Otra ierīce ir aizņemta. Varēsiet pārsūtīt failus tikai tad, kad tā būs pieejama."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Neviens fails netika atrasts. Iespējams, otra ierīce ir bloķēta. Ja tā ir, atbloķējiet ierīci un mēģiniet vēlreiz."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mk/strings.xml b/packages/MtpDocumentsProvider/res/values-mk/strings.xml
deleted file mode 100644
index 6028b716ec9e..000000000000
--- a/packages/MtpDocumentsProvider/res/values-mk/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-хост"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Преземања"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Се пристапува до датотеки од <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Другиот уред е зафатен. Не може да се пренесуваат датотеки сѐ додека не стане достапен."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Не се најдени датотеки. Другиот уред можеби е заклучен. Ако е така, отклучете го и обидете се повторно."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ml/strings.xml b/packages/MtpDocumentsProvider/res/values-ml/strings.xml
deleted file mode 100644
index 49eb847b1173..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ml/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ഹോസ്റ്റ്"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ഡൗണ്‍ലോഡുകൾ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ഉപകരണത്തിൽ നിന്ന് ഫയലുകൾ ആക്സസ്സ് ചെയ്യുന്നു"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"രണ്ടാമത്തെ ഉപകരണം തിരക്കിലാണ്. അത് ലഭ്യമാകുന്നത് വരെ നിങ്ങൾക്ക് ഫയലുകൾ കൈമാറാൻ കഴിയില്ല."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ഫയലുകളൊന്നും കണ്ടെത്തിയില്ല. രണ്ടാമത്തെ ഉപകരണം ലോക്കുചെയ്ത നിലയിലായിരിക്കാം. ആണെങ്കിൽ, അൺലോക്കുചെയ്ത് വീണ്ടും ശ്രമിക്കുക."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mn/strings.xml b/packages/MtpDocumentsProvider/res/values-mn/strings.xml
deleted file mode 100644
index 43b8204e7599..000000000000
--- a/packages/MtpDocumentsProvider/res/values-mn/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Хост"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Таталт"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>-с файлд хандаж байна"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Нөгөө төхөөрөмж завгүй байна. Үүнийг боломжтой болох хүртэл файл шилжүүлэх боломжгүй."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Файл олдсонгүй. Нөгөө төхөөрөмж түгжигдсэн байж болзошгүй. Ингэсэн тохиолдолд түгжээг нь тайлаад, дахин оролдоно уу."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mr/strings.xml b/packages/MtpDocumentsProvider/res/values-mr/strings.xml
deleted file mode 100644
index 5b856dc4ec19..000000000000
--- a/packages/MtpDocumentsProvider/res/values-mr/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> मधून फायलींंमध्ये प्रवेश करीत आहे"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"अन्य डिव्हाइस व्यस्त आहे. ते उपलब्‍ध होईपर्यंत आपण फायली हस्तांतरित करू शकत नाही."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"कोणत्याही फायली आढळल्या नाहीत. अन्य डिव्हाइस कदाचित बंद असू शकते. तसे असल्यास, ते अनलॉक करा आणि पुन्हा प्रयत्न करा."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ms/strings.xml b/packages/MtpDocumentsProvider/res/values-ms/strings.xml
deleted file mode 100644
index febec1d349af..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ms/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Hos MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Muat turun"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Mengakses fail daripada <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Peranti lain sedang sibuk. Anda tidak boleh memindahkan fail sehingga peranti itu tersedia."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Tiada fail ditemui. Peranti lain itu mungkin dikunci. Jika benar, sila buka kuncinya dan cuba lagi."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-my/strings.xml b/packages/MtpDocumentsProvider/res/values-my/strings.xml
deleted file mode 100644
index 8b509fbf0167..000000000000
--- a/packages/MtpDocumentsProvider/res/values-my/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP လက်ခံစက်"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ဒေါင်းလုဒ်များ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> မှ ဖိုင်များကို အသုံးပြုနေသည်"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"တခြားစက်ပစ္စည်းသည် မအားသေးပါ။ ၎င်းအဆင်သင့် မဖြစ်သေးသ၍ ဖိုင်များကို လွှဲပြောင်း၍ရမည် မဟုတ်ပါ။"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"မည်သည့်ဖိုင်မျှ မတွေ့ပါ။ ၎င်းစက်ပစ္စည်းကို လော့ခ်ချထားပုံရပါသည်။ သို့ဖြစ်လျှင် ၎င်းကိုလော့ခ်ဖြုတ်ပြီး ထပ်လုပ်ကြည့်ပါ။"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-nb/strings.xml b/packages/MtpDocumentsProvider/res/values-nb/strings.xml
deleted file mode 100644
index 40fabed73f40..000000000000
--- a/packages/MtpDocumentsProvider/res/values-nb/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-vert"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Nedlastinger"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> på <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Bruker filer på <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Den andre enheten er opptatt. Du kan ikke overføre filer før den er tilgjengelig."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Ingen filer ble funnet. Den andre enheten kan være låst. I så fall må du låse den opp og prøve igjen."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ne/strings.xml b/packages/MtpDocumentsProvider/res/values-ne/strings.xml
deleted file mode 100644
index 53c0954d296e..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ne/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोडहरू"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> बाट फाइलहरूमाथि पहुँच राख्दै"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"अर्को यन्त्र व्यस्त छ। त्यो यन्त्र उपलब्ध नभएसम्म तपाईं फाइल स्थानान्तरण गर्न सक्नुहुन्न।"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"कुनै फाइल भेट्टिएन। अर्को यन्त्र लक गरिएको हुन सक्छ। यदि त्यसो हो भने त्यसलाई अनलक गरेर फेरि प्रयास गर्नुहोस्।"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-nl/strings.xml b/packages/MtpDocumentsProvider/res/values-nl/strings.xml
deleted file mode 100644
index b1a01b2cd8a9..000000000000
--- a/packages/MtpDocumentsProvider/res/values-nl/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Bestanden openen op <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Het andere apparaat wordt gebruikt. Je moet wachten tot het beschikbaar is om bestanden te kunnen overzetten."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Geen bestanden gevonden. Het kan zijn dat het andere apparaat is vergrendeld. Als dat het geval is, ontgrendel je het en probeer je het opnieuw."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pa/strings.xml b/packages/MtpDocumentsProvider/res/values-pa/strings.xml
deleted file mode 100644
index ab8ba1592ba7..000000000000
--- a/packages/MtpDocumentsProvider/res/values-pa/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ਹੋਸਟ"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ਡਾਊਨਲੋਡ"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ਦੀਆਂ ਫ਼ਾਈਲਾਂ \'ਤੇ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ਦੂਜੀ ਡੀਵਾਈਸ ਰੁਝੇਵੇਂ ਵਿੱਚ ਹੈ। ਉਸਦੇ ਉਪਲਬਧ ਹੋਣ ਤੱਕ ਤੁਸੀਂ ਫ਼ਾਈਲਾਂ ਦਾ ਤਬਾਦਲਾ ਨਹੀਂ ਕਰ ਸਕਦੇ।"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ਕੋਈ ਫ਼ਾਈਲਾਂ ਨਹੀਂ ਮਿਲੀਆਂ। ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜੀ ਡੀਵਾਈਸ ਲੌਕ ਹੋਵੇ। ਜੇਕਰ ਇੰਝ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਅਨਲੌਕ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pl/strings.xml b/packages/MtpDocumentsProvider/res/values-pl/strings.xml
deleted file mode 100644
index 69fa0f4473ca..000000000000
--- a/packages/MtpDocumentsProvider/res/values-pl/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Pobrane"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> – <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Uzyskuję dostęp do plików na urządzeniu <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Drugie urządzenie jest zajęte. Dopóki nie będzie dostępne, nie możesz przesłać plików."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nie znaleziono plików. Drugie urządzenie może być zablokowane. Jeśli tak jest, odblokuj je i spróbuj ponownie."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml b/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 03a14263f9c3..000000000000
--- a/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host do MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Acessando arquivos do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não é possível transferir arquivos até que ele esteja disponível."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nenhum arquivo encontrado. É possível que o outro dispositivo esteja bloqueado. Se for o caso, desbloqueie-o e tente novamente."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml b/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 05d32d40fa27..000000000000
--- a/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Anfitrião MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Transferências"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Aceder a ficheiros do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não pode transferir os ficheiros enquanto não estiver disponível."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nenhum ficheiro encontrado. O outro dispositivo pode estar bloqueado. Se assim for, desbloqueie e tente novamente."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt/strings.xml b/packages/MtpDocumentsProvider/res/values-pt/strings.xml
deleted file mode 100644
index 03a14263f9c3..000000000000
--- a/packages/MtpDocumentsProvider/res/values-pt/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host do MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Acessando arquivos do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não é possível transferir arquivos até que ele esteja disponível."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nenhum arquivo encontrado. É possível que o outro dispositivo esteja bloqueado. Se for o caso, desbloqueie-o e tente novamente."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ro/strings.xml b/packages/MtpDocumentsProvider/res/values-ro/strings.xml
deleted file mode 100644
index 21ebc57836b4..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ro/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Gazdă MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Descărcări"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Se accesează fișierele de pe <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Celălalt dispozitiv este ocupat. Nu puteți să transferați fișiere înainte să fie disponibil."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nu s-au găsit fișiere. Este posibil ca celălalt dispozitiv să fie blocat. În acest caz, deblocați-l și încercați din nou."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ru/strings.xml b/packages/MtpDocumentsProvider/res/values-ru/strings.xml
deleted file mode 100644
index 717f12f5403f..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ru/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-хост"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Загрузки"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Доступ к файлам на устройстве <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>…"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Другое устройство занято. Вы сможете передать файлы, когда оно будет доступно."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Файлы не найдены. Если другое устройство заблокировано, разблокируйте его и повторите попытку."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-si/strings.xml b/packages/MtpDocumentsProvider/res/values-si/strings.xml
deleted file mode 100644
index 7a096b0a356a..000000000000
--- a/packages/MtpDocumentsProvider/res/values-si/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP සංග්‍රාහක"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"බාගැනීම්"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> වෙතින් ගොනු වෙත පිවිසීම"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"අනෙක් උපාංගය කාර්ය බහුලය. එය ලබා ගත හැකි වන තෙක් ඔබට ගොනු මාරු කළ නොහැකිය."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ගොනු හමු නොවීය. අනෙක් උපාංගය අගුලු දමා තිබිය හැකිය. එසේ නම්, එය අගුලු හැර නැවත උත්සාහ කරන්න."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sk/strings.xml b/packages/MtpDocumentsProvider/res/values-sk/strings.xml
deleted file mode 100644
index 365e1b7ba0ae..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sk/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Hostiteľ MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Stiahnuté súbory"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Prístup k súborom zo zariadenia <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Druhé zariadenie je zaneprázdnené. Súbory bude možné preniesť, keď bude k dispozícii."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nenašli sa žiadne súbory. Druhé zariadenie môže byť uzamknuté. Ak je to tak, odomknite ho a skúste to znova."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sl/strings.xml b/packages/MtpDocumentsProvider/res/values-sl/strings.xml
deleted file mode 100644
index 60945d64fe8f..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sl/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Gostitelj MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Prenosi"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Dostopanje do datotek iz naprave <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Druga naprava ni na voljo. Dokler ne bo na voljo, ne bo mogoče prenašati datotek."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Ni datotek. Druga naprava je morda zaklenjena. Če je zaklenjena, jo odklenite in poskusite znova."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sq/strings.xml b/packages/MtpDocumentsProvider/res/values-sq/strings.xml
deleted file mode 100644
index d92f29f6db60..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sq/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Pritësi i protokollit MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Shkarkimet"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Po qaset te skedarët nga <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Pajisja tjetër është e zënë. Nuk mund të transferosh skedarë deri sa të jetë në dispozicion."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Nuk u gjet asnjë skedar. Pajisja tjetër mund të jetë e kyçur. Nëse po, shkyçe dhe provo përsëri."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sr/strings.xml b/packages/MtpDocumentsProvider/res/values-sr/strings.xml
deleted file mode 100644
index d91c5c4354ce..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sr/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP хост"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Преузимања"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Приступ датотекама са уређаја <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Други уређај је заузет. Датотеке можете да пренесете тек кад он постане доступан."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Није пронађена ниједна датотека. Други уређај је можда закључан. Ако јесте, откључајте га и покушајте поново."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sv/strings.xml b/packages/MtpDocumentsProvider/res/values-sv/strings.xml
deleted file mode 100644
index 26818eb220ce..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sv/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP-värd"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Nedladdningar"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Åtkomst till filer från <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Den andra enheten är upptagen. Du kan inte överföra filer förrän den är tillgänglig."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Inga filer hittades. Den andra enheten kan vara låst. Om den är det låser du upp den och försöker igen."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sw/strings.xml b/packages/MtpDocumentsProvider/res/values-sw/strings.xml
deleted file mode 100644
index de3ed54b367f..000000000000
--- a/packages/MtpDocumentsProvider/res/values-sw/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Seva pangishi ya MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Vipakuliwa"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Inafikia faili kwenye <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Kifaa hicho kingine kinatumika. Huwezi kuhamisha faili hadi kipatikane."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Hakuna faili zilizopatikana. Huenda kifaa hicho kingine kimefungwa. Ikiwa kimefungwa, kifungue na ujaribu tena."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ta/strings.xml b/packages/MtpDocumentsProvider/res/values-ta/strings.xml
deleted file mode 100644
index c6e6e6204e2f..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ta/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP ஹோஸ்ட்"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"இறக்கங்கள்"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> இலிருந்து கோப்புகளை அணுகுகிறது"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"பிற சாதனம் பணிமிகுதியில் உள்ளதால், அந்தப் பணி முடியும் வரை கோப்புகளை இடமாற்ற முடியாது."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"கோப்புகள் இல்லை. பிற சாதனம் பூட்டப்பட்டிருக்கக்கூடும் என்பதால் முதலில் அதைத் திறந்து, மீண்டும் முயலவும்."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-te/strings.xml b/packages/MtpDocumentsProvider/res/values-te/strings.xml
deleted file mode 100644
index 7add85835da7..000000000000
--- a/packages/MtpDocumentsProvider/res/values-te/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP హోస్ట్"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"డౌన్‌లోడ్‌లు"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> నుండి ఫైల్‌లను ప్రాప్యత చేస్తోంది"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"ఇతర పరికరం బిజీగా ఉంది. అది అందుబాటులోకి వచ్చే వరకు మీరు ఫైల్‌లను బదిలీ చేయలేరు."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ఫైల్‍లు ఏవీ కనుగొనబడలేదు. ఇతర పరికరం లాక్ చేయబడి ఉండవచ్చు. అలా జరిగి ఉంటే, దాన్ని అన్‌లాక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-th/strings.xml b/packages/MtpDocumentsProvider/res/values-th/strings.xml
deleted file mode 100644
index d2b62fe516e1..000000000000
--- a/packages/MtpDocumentsProvider/res/values-th/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"โฮสต์ MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ดาวน์โหลด"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"กำลังเข้าถึงไฟล์จาก <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"อุปกรณ์อีกเครื่องหนึ่งไม่ว่าง คุณไม่สามารถโอนไฟล์จนกว่าอุปกรณ์จะสามารถใช้ได้"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"ไม่พบไฟล์ อุปกรณ์อีกเครื่องหนึ่งอาจล็อกอยู่ หากเป็นเช่นนั้น ให้ปลดล็อกและลองอีกครั้ง"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-tl/strings.xml b/packages/MtpDocumentsProvider/res/values-tl/strings.xml
deleted file mode 100644
index 68b2eba38ea3..000000000000
--- a/packages/MtpDocumentsProvider/res/values-tl/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Host ng MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Mga Download"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Nag-a-access ng mga file mula sa <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Abala ang kabilang device. Hindi ka makakapaglipat ng mga file hanggang sa maging available ito."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Walang natagpuang mga file. Maaaring naka-lock ang kabilang device. Kung gayon, i-unlock ito at subukang muli."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-tr/strings.xml b/packages/MtpDocumentsProvider/res/values-tr/strings.xml
deleted file mode 100644
index 14250ef527c7..000000000000
--- a/packages/MtpDocumentsProvider/res/values-tr/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Ana Makinesi"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"İndirilenler"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> cihazdaki dosyalara erişiliyor"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Diğer cihaz meşgul. Cihaz kullanılabilir duruma gelene kadar dosyaları aktaramazsınız."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Hiçbir dosya bulunamadı. Diğer cihaz kilitli olabilir. Kilitliyse, kilidini açıp tekrar deneyin."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-uk/strings.xml b/packages/MtpDocumentsProvider/res/values-uk/strings.xml
deleted file mode 100644
index 8589f8c594b6..000000000000
--- a/packages/MtpDocumentsProvider/res/values-uk/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Хост MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Завантаження"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Відкриваються файли з пристрою <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Інший пристрій зайнятий. Щоб передавати файли, він має бути доступним."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Не вдалося знайти файли. Можливо, інший пристрій заблоковано. У такому разі розблокуйте його та повторіть спробу."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ur/strings.xml b/packages/MtpDocumentsProvider/res/values-ur/strings.xml
deleted file mode 100644
index 17578ae51b9f..000000000000
--- a/packages/MtpDocumentsProvider/res/values-ur/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"‏MTP میزبان"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"ڈاؤن لوڈز"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> سے فائلوں کی رسائی ہو رہی ہے"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"دوسرا آلہ مصروف ہے۔ اس کے دستیاب ہونے تک آپ فائلیں منتقل نہیں کر سکتے۔"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"کوئی فائلیں نہیں ملیں۔ ہو سکتا ہے دوسرا آلہ مقفل ہو۔ اگر ایسا ہے تو اسے غیر مقفل کریں اور دوبارہ کوشش کریں۔"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-uz/strings.xml b/packages/MtpDocumentsProvider/res/values-uz/strings.xml
deleted file mode 100644
index c511172076c0..000000000000
--- a/packages/MtpDocumentsProvider/res/values-uz/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Yuklanmalar"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g><xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> qurilmasidan fayllar o‘qilmoqda"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Ulangan qurilma band. U bo‘shamaguncha fayllarni o‘tkazib bo‘lmaydi."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Hech qanday fayl topilmadi. Ulangan qurilma qulflangan bo‘lishi mumkin. Agar shunday bo‘lsa, uni qulfdan chiqaring va qayta urinib ko‘ring."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-vi/strings.xml b/packages/MtpDocumentsProvider/res/values-vi/strings.xml
deleted file mode 100644
index 0eb63106d85e..000000000000
--- a/packages/MtpDocumentsProvider/res/values-vi/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Máy chủ MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Tải xuống"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Đang truy cập tệp từ <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Thiết bị khác đang bận. Bạn không thể chuyển tệp cho đến khi thiết bị rảnh."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Không tìm thấy tệp. Thiết bị khác có thể đã bị khóa. Nếu như vậy, hãy mở khóa thiết bị rồi thử lại."</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 7f1f3942c911..000000000000
--- a/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"MTP 主机"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"下载"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"正在访问 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 的文件"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"另一台设备正忙。您必须等到该设备可用时才能传输文件。"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"未找到任何文件。另一台设备可能处于锁定状态;如果是这样,请解锁该设备并重试。"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml
deleted file mode 100644
index be8c5482c13c..000000000000
--- a/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"媒體傳輸協定主機"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"下載"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 的「<xliff:g id="STORAGE_NAME">%2$s</xliff:g>」"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"正在從 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 存取檔案"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"另一部裝置目前處於忙碌狀態,要等到該裝置可用時才能轉移檔案。"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"找不到檔案。如果另一部裝置處於鎖定狀態,請解鎖該裝置,然後再試一次。"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 2fe3c06898e0..000000000000
--- a/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"媒體傳輸通訊協定主機"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"下載"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"正在從 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 存取檔案"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"另一個裝置忙碌中。必須等到該裝置可用時才能轉移檔案。"</string>
- <string name="error_locked_device" msgid="7557872102188356147">"找不到任何檔案。如果另一個裝置處於鎖定狀態,請將該裝置解鎖後再試一次。"</string>
-</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zu/strings.xml b/packages/MtpDocumentsProvider/res/values-zu/strings.xml
deleted file mode 100644
index f3f720676b22..000000000000
--- a/packages/MtpDocumentsProvider/res/values-zu/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_label" msgid="6271216747302322594">"Ukusingatha kwe-MTP"</string>
- <string name="downloads_app_label" msgid="7120690641874849726">"Okulandiwe"</string>
- <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
- <string name="accessing_notification_title" msgid="3030133609230917944">"Ifinyelela kumafayela kusukela ku-<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
- <string name="error_busy_device" msgid="3997316850357386589">"Enye idivayisi imatasatasa. Awukwazi ukudlulisela amafayela ize itholakale."</string>
- <string name="error_locked_device" msgid="7557872102188356147">"Awekho amafayela atholiwe. Enye idivayisi kungenzeka ikhiyiwe. Uma kunjalo, yivule uphinde uzame futhi."</string>
-</resources>
diff --git a/packages/PrintSpooler/res/layout/print_activity.xml b/packages/PrintSpooler/res/layout/print_activity.xml
index 94519d425f0a..774f320d6fd2 100644
--- a/packages/PrintSpooler/res/layout/print_activity.xml
+++ b/packages/PrintSpooler/res/layout/print_activity.xml
@@ -31,7 +31,7 @@
android:elevation="@dimen/preview_controls_elevation"
android:background="?android:attr/colorPrimary">
- <Spinner
+ <com.android.printspooler.widget.ClickInterceptSpinner
android:id="@+id/destination_spinner"
android:layout_width="wrap_content"
android:minWidth="@dimen/preview_destination_spinner_width"
@@ -39,7 +39,7 @@
android:layout_marginTop="4dip"
android:dropDownWidth="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
- </Spinner>
+ </com.android.printspooler.widget.ClickInterceptSpinner>
</FrameLayout>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 601491abfd7e..1b7a1b8b9567 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -70,7 +70,6 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
-import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
@@ -101,6 +100,7 @@ import com.android.printspooler.util.ApprovedPrintServices;
import com.android.printspooler.util.MediaSizeUtils;
import com.android.printspooler.util.MediaSizeUtils.MediaSizeComparator;
import com.android.printspooler.util.PageRangeUtils;
+import com.android.printspooler.widget.ClickInterceptSpinner;
import com.android.printspooler.widget.PrintContentView;
import com.android.printspooler.widget.PrintContentView.OptionsStateChangeListener;
import com.android.printspooler.widget.PrintContentView.OptionsStateController;
@@ -200,7 +200,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
private TextView mPageRangeTitle;
private EditText mPageRangeEditText;
- private Spinner mDestinationSpinner;
+ private ClickInterceptSpinner mDestinationSpinner;
private DestinationAdapter mDestinationSpinnerAdapter;
private boolean mShowDestinationPrompt;
@@ -1383,19 +1383,14 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
mSummaryCopies.setEnabled(false);
mSummaryPaperSize.setEnabled(false);
- mDestinationSpinner.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- mShowDestinationPrompt = false;
- mSummaryCopies.setEnabled(true);
- mSummaryPaperSize.setEnabled(true);
- updateOptionsUi();
-
- mDestinationSpinner.setOnTouchListener(null);
- mDestinationSpinnerAdapter.notifyDataSetChanged();
+ mDestinationSpinner.setPerformClickListener((v) -> {
+ mShowDestinationPrompt = false;
+ mSummaryCopies.setEnabled(true);
+ mSummaryPaperSize.setEnabled(true);
+ updateOptionsUi();
- return false;
- }
+ mDestinationSpinner.setPerformClickListener(null);
+ mDestinationSpinnerAdapter.notifyDataSetChanged();
});
}
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java b/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java
new file mode 100644
index 000000000000..1d3aac9997ff
--- /dev/null
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 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.printspooler.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.Spinner;
+
+/**
+ * Spinner that can intercept {@link Spinner#performClick()}
+ */
+public class ClickInterceptSpinner extends Spinner {
+ private OnClickListener mListener;
+
+ /**
+ * Create a new spinner with the given attributes.
+ *
+ * @param context The context for the spinner
+ * @param attrs Attributes of the spinner
+ */
+ public ClickInterceptSpinner(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ /**
+ * Set a listener invoked on {@link #performClick()}
+ *
+ * @param listener The listener to be invoked
+ */
+ public void setPerformClickListener(OnClickListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public boolean performClick() {
+ if (mListener != null) {
+ mListener.onClick(this);
+ }
+
+ return super.performClick();
+ }
+}
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index b4c8cec2d698..438cbbbb16fe 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -376,6 +376,6 @@
<string name="active_input_method_subtypes" msgid="3596398805424733238">"Mètodes d\'introducció actius"</string>
<string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Utilitza els idiomes del sistema"</string>
<string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"No s\'ha pogut obrir la configuració de: <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
- <string name="ime_security_warning" msgid="4135828934735934248">"Pot ser que aquest mètode d\'entrada pugui recopilar tot el que escriviu, incloses dades personals, com ara contrasenyes i números de targetes de crèdit. Ve de l\'aplicació <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Voleu utilitzar aquest mètode d\'entrada?"</string>
+ <string name="ime_security_warning" msgid="4135828934735934248">"Pot ser que aquest mètode d\'introducció pugui recopilar tot el que escriviu, incloses dades personals, com ara contrasenyes i números de targetes de crèdit. Ve de l\'aplicació <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Voleu utilitzar aquest mètode d\'introducció?"</string>
<string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Nota: després de reiniciar, l\'aplicació no s\'iniciarà fins que no desbloquegis el telèfon"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 09dae27da47f..eb20fdc5ad60 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -86,7 +86,7 @@
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"페어링"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"페어링"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"취소"</string>
- <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"페어링하면 연결 시 주소록 및 통화 기록에 액세스할 수 있습니다."</string>
+ <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"페어링하면 연결 시 연락처 및 통화 기록에 액세스할 수 있습니다."</string>
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 페어링하지 못했습니다."</string>
<string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"PIN 또는 패스키가 잘못되어 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 페어링하지 못했습니다."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 통신할 수 없습니다."</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index f9d193058306..675a6d09ebea 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -90,7 +90,7 @@
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g> por causa de um PIN ou senha incorretos."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Não é possível se comunicar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Emparelhamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pareamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi desligado."</string>
<string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi desconectado"</string>
<string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Uma barra de Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index f9d193058306..675a6d09ebea 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -90,7 +90,7 @@
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g> por causa de um PIN ou senha incorretos."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Não é possível se comunicar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Emparelhamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pareamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi desligado."</string>
<string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi desconectado"</string>
<string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Uma barra de Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 61f280cab7f6..ff6c838536e0 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -59,7 +59,7 @@
<string name="bluetooth_profile_headset" msgid="7815495680863246034">"Звонки"</string>
<string name="bluetooth_profile_opp" msgid="9168139293654233697">"Профиль OPP"</string>
<string name="bluetooth_profile_hid" msgid="3680729023366986480">"Профиль HID"</string>
- <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Интернет-доступ"</string>
+ <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Доступ к Интернету"</string>
<string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Обмен контактами"</string>
<string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Использовать для обмена контактами"</string>
<string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Профиль PAN"</string>
@@ -83,12 +83,12 @@
<string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Использовать для аудиоустройства телефона"</string>
<string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Используется для передачи файлов"</string>
<string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Использовать для ввода"</string>
- <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Подключить"</string>
- <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ПОДКЛЮЧИТЬ"</string>
+ <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Добавить"</string>
+ <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ДОБАВИТЬ"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Отмена"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Сопряжение обеспечивает доступ к вашим контактам и журналу звонков при подключении."</string>
- <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Не удалось подключиться к устройству \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Не удалось подключиться к устройству \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\", так как введен неверный PIN-код или пароль."</string>
+ <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Не удалось установить сопряжение с устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Не удалось установить сопряжение с устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\", так как введен неверный PIN-код или пароль."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Не удается установить соединение с устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> не разрешает сопряжение."</string>
<string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi выключен"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/CustomDialogPreference.java b/packages/SettingsLib/src/com/android/settingslib/CustomDialogPreference.java
new file mode 100644
index 000000000000..9554e8128122
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/CustomDialogPreference.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2015 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.settingslib;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v14.preference.PreferenceDialogFragment;
+import android.support.v7.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+
+public class CustomDialogPreference extends DialogPreference {
+
+ private CustomPreferenceDialogFragment mFragment;
+
+ public CustomDialogPreference(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public CustomDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public CustomDialogPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public CustomDialogPreference(Context context) {
+ super(context);
+ }
+
+ public boolean isDialogOpen() {
+ return getDialog() != null && getDialog().isShowing();
+ }
+
+ public Dialog getDialog() {
+ return mFragment != null ? mFragment.getDialog() : null;
+ }
+
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder,
+ DialogInterface.OnClickListener listener) {
+ }
+
+ protected void onDialogClosed(boolean positiveResult) {
+ }
+
+ protected void onClick(DialogInterface dialog, int which) {
+ }
+
+ protected void onBindDialogView(View view) {
+ }
+
+ private void setFragment(CustomPreferenceDialogFragment fragment) {
+ mFragment = fragment;
+ }
+
+ public static class CustomPreferenceDialogFragment extends PreferenceDialogFragment {
+
+ public static CustomPreferenceDialogFragment newInstance(String key) {
+ final CustomPreferenceDialogFragment fragment = new CustomPreferenceDialogFragment();
+ final Bundle b = new Bundle(1);
+ b.putString(ARG_KEY, key);
+ fragment.setArguments(b);
+ return fragment;
+ }
+
+ private CustomDialogPreference getCustomizablePreference() {
+ return (CustomDialogPreference) getPreference();
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ getCustomizablePreference().setFragment(this);
+ getCustomizablePreference().onPrepareDialogBuilder(builder, this);
+ }
+
+ @Override
+ public void onDialogClosed(boolean positiveResult) {
+ getCustomizablePreference().onDialogClosed(positiveResult);
+ }
+
+ @Override
+ protected void onBindDialogView(View view) {
+ super.onBindDialogView(view);
+ getCustomizablePreference().onBindDialogView(view);
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ super.onClick(dialog, which);
+ getCustomizablePreference().onClick(dialog, which);
+ }
+ }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java
new file mode 100644
index 000000000000..253ca11bc44e
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2015 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.settingslib;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v14.preference.EditTextPreferenceDialogFragment;
+import android.support.v7.preference.EditTextPreference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.EditText;
+
+public class CustomEditTextPreference extends EditTextPreference {
+
+ private CustomPreferenceDialogFragment mFragment;
+
+ public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public CustomEditTextPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public CustomEditTextPreference(Context context) {
+ super(context);
+ }
+
+ public EditText getEditText() {
+ return mFragment != null ? (EditText) mFragment.getDialog().findViewById(android.R.id.edit)
+ : null;
+ }
+
+ public boolean isDialogOpen() {
+ return getDialog() != null && getDialog().isShowing();
+ }
+
+ public Dialog getDialog() {
+ return mFragment != null ? mFragment.getDialog() : null;
+ }
+
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder,
+ DialogInterface.OnClickListener listener) {
+ }
+
+ protected void onDialogClosed(boolean positiveResult) {
+ }
+
+ protected void onClick(DialogInterface dialog, int which) {
+ }
+
+ protected void onBindDialogView(View view) {
+ }
+
+ private void setFragment(CustomPreferenceDialogFragment fragment) {
+ mFragment = fragment;
+ }
+
+ public static class CustomPreferenceDialogFragment extends EditTextPreferenceDialogFragment {
+
+ public static CustomPreferenceDialogFragment newInstance(String key) {
+ final CustomPreferenceDialogFragment fragment = new CustomPreferenceDialogFragment();
+ final Bundle b = new Bundle(1);
+ b.putString(ARG_KEY, key);
+ fragment.setArguments(b);
+ return fragment;
+ }
+
+ private CustomEditTextPreference getCustomizablePreference() {
+ return (CustomEditTextPreference) getPreference();
+ }
+
+ @Override
+ protected void onBindDialogView(View view) {
+ super.onBindDialogView(view);
+ getCustomizablePreference().onBindDialogView(view);
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ getCustomizablePreference().setFragment(this);
+ getCustomizablePreference().onPrepareDialogBuilder(builder, this);
+ }
+
+ @Override
+ public void onDialogClosed(boolean positiveResult) {
+ super.onDialogClosed(positiveResult);
+ getCustomizablePreference().onDialogClosed(positiveResult);
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ super.onClick(dialog, which);
+ getCustomizablePreference().onClick(dialog, which);
+ }
+ }
+}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
index a3345ee58b7d..0ec75ecee066 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
@@ -36,6 +36,8 @@ import static junit.framework.Assert.assertTrue;
public class ZoneGetterTest {
private static final String TIME_ZONE_LONDON_ID = "Europe/London";
private static final String TIME_ZONE_LA_ID = "America/Los_Angeles";
+ private static final String TIME_ZONE_ALGIERS_ID = "Africa/Algiers";
+ private static final String TIME_ZONE_CEUTA_ID = "Africa/Ceuta";
private Locale mLocaleEnUs;
private Calendar mCalendar;
@@ -59,6 +61,16 @@ public class ZoneGetterTest {
}
@Test
+ public void getTimeZoneOffsetAndName_setAlgiers_returnCentralEuropeanStandardTime() {
+ testTimeZoneOffsetAndNameInner(TIME_ZONE_ALGIERS_ID, "Central European Standard Time");
+ }
+
+ @Test
+ public void getTimeZoneOffsetAndName_setCeuta_returnCentralEuropeanSummerTime() {
+ testTimeZoneOffsetAndNameInner(TIME_ZONE_CEUTA_ID, "Central European Summer Time");
+ }
+
+ @Test
public void getZonesList_checkTypes() {
final List<Map<String, Object>> zones =
ZoneGetter.getZonesList(InstrumentationRegistry.getContext());
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
index 3cd5d89ea142..f6cf03562014 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
@@ -22,6 +22,7 @@ import android.service.notification.SnoozeCriterion;
import android.service.notification.StatusBarNotification;
import android.view.MotionEvent;
import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
@ProvidesInterface(version = NotificationSwipeActionHelper.VERSION)
@DependsOn(target = SnoozeOption.class)
@@ -56,19 +57,17 @@ public interface NotificationSwipeActionHelper {
public boolean swipedFastEnough(float translation, float velocity);
@ProvidesInterface(version = SnoozeOption.VERSION)
- public static class SnoozeOption {
- public static final int VERSION = 1;
- public int snoozeForMinutes;
- public SnoozeCriterion criterion;
- public CharSequence description;
- public CharSequence confirmation;
-
- public SnoozeOption(SnoozeCriterion crit, int minsToSnoozeFor, CharSequence desc,
- CharSequence confirm) {
- criterion = crit;
- snoozeForMinutes = minsToSnoozeFor;
- description = desc;
- confirmation = confirm;
- }
+ public interface SnoozeOption {
+ public static final int VERSION = 2;
+
+ public SnoozeCriterion getSnoozeCriterion();
+
+ public CharSequence getDescription();
+
+ public CharSequence getConfirmation();
+
+ public int getMinutesToSnoozeFor();
+
+ public AccessibilityAction getAccessibilityAction();
}
}
diff --git a/packages/SystemUI/res/layout/notification_snooze.xml b/packages/SystemUI/res/layout/notification_snooze.xml
index b70f24b4d552..3209f27f7e00 100644
--- a/packages/SystemUI/res/layout/notification_snooze.xml
+++ b/packages/SystemUI/res/layout/notification_snooze.xml
@@ -20,12 +20,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
+ android:clickable="true"
android:background="@color/notification_guts_bg_color"
android:theme="@*android:style/Theme.DeviceDefault.Light">
<RelativeLayout
- android:layout_width="match_parent"
android:id="@+id/notification_snooze"
+ android:layout_width="match_parent"
android:layout_height="@dimen/snooze_snackbar_min_height">
<TextView
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 3c6ad23c9f07..b27deddb4dd0 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -78,5 +78,13 @@
<item type="id" name="action_move_tl_50" />
<item type="id" name="action_move_tl_30" />
<item type="id" name="action_move_rb_full" />
+
+ <!-- Accessibility actions for the notification menu -->
+ <item type="id" name="action_snooze_undo"/>
+ <item type="id" name="action_snooze_15_min"/>
+ <item type="id" name="action_snooze_30_min"/>
+ <item type="id" name="action_snooze_1_hour"/>
+ <item type="id" name="action_snooze_2_hours"/>
+ <item type="id" name="action_snooze_assistant_suggestion_1"/>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
index 5528bb997031..7d76b9b7c944 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -312,7 +312,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
@Override
public boolean performClick() {
- if (mWasActivatedOnDown || !mNeedsDimming) {
+ if (mWasActivatedOnDown || !mNeedsDimming || isTouchExplorationEnabled()) {
return super.performClick();
}
return false;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
index 0e5e4161c886..c45ca54024db 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
@@ -21,11 +21,14 @@ import java.util.List;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
+import android.os.Bundle;
import android.service.notification.SnoozeCriterion;
import android.service.notification.StatusBarNotification;
import android.text.SpannableString;
@@ -35,6 +38,9 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -45,6 +51,10 @@ import com.android.systemui.R;
public class NotificationSnooze extends LinearLayout
implements NotificationGuts.GutsContent, View.OnClickListener {
+ /**
+ * If this changes more number increases, more assistant action resId's should be defined for
+ * accessibility purposes, see {@link #setSnoozeOptions(List)}
+ */
private static final int MAX_ASSISTANT_SUGGESTIONS = 1;
private NotificationGuts mGutsContainer;
private NotificationSwipeActionHelper mSnoozeListener;
@@ -79,16 +89,60 @@ public class NotificationSnooze extends LinearLayout
mDivider = findViewById(R.id.divider);
mDivider.setAlpha(0f);
mSnoozeOptionContainer = (ViewGroup) findViewById(R.id.snooze_options);
+ mSnoozeOptionContainer.setVisibility(View.INVISIBLE);
mSnoozeOptionContainer.setAlpha(0f);
// Create the different options based on list
mSnoozeOptions = getDefaultSnoozeOptions();
createOptionViews();
- // Default to first option in list
setSelected(mDefaultOption);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ if (mGutsContainer != null && mGutsContainer.isExposed()) {
+ if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
+ event.getText().add(mSelectedOptionText.getText());
+ }
+ }
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.addAction(new AccessibilityAction(R.id.action_snooze_undo,
+ getResources().getString(R.string.snooze_undo)));
+ int count = mSnoozeOptions.size();
+ for (int i = 0; i < count; i++) {
+ AccessibilityAction action = mSnoozeOptions.get(i).getAccessibilityAction();
+ if (action != null) {
+ info.addAction(action);
+ }
+ }
+ }
+
+ @Override
+ public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
+ if (super.performAccessibilityActionInternal(action, arguments)) {
+ return true;
+ }
+ if (action == R.id.action_snooze_undo) {
+ undoSnooze(mUndoButton);
+ return true;
+ }
+ for (int i = 0; i < mSnoozeOptions.size(); i++) {
+ SnoozeOption so = mSnoozeOptions.get(i);
+ if (so.getAccessibilityAction() != null
+ && so.getAccessibilityAction().getId() == action) {
+ setSelected(so);
+ return true;
+ }
+ }
+ return false;
+ }
+
public void setSnoozeOptions(final List<SnoozeCriterion> snoozeList) {
if (snoozeList == null) {
return;
@@ -98,7 +152,10 @@ public class NotificationSnooze extends LinearLayout
final int count = Math.min(MAX_ASSISTANT_SUGGESTIONS, snoozeList.size());
for (int i = 0; i < count; i++) {
SnoozeCriterion sc = snoozeList.get(i);
- mSnoozeOptions.add(new SnoozeOption(sc, 0, sc.getExplanation(), sc.getConfirmation()));
+ AccessibilityAction action = new AccessibilityAction(
+ R.id.action_snooze_assistant_suggestion_1, sc.getExplanation());
+ mSnoozeOptions.add(new NotificationSnoozeOption(sc, 0, sc.getExplanation(),
+ sc.getConfirmation(), action));
}
createOptionViews();
}
@@ -117,15 +174,16 @@ public class NotificationSnooze extends LinearLayout
private ArrayList<SnoozeOption> getDefaultSnoozeOptions() {
ArrayList<SnoozeOption> options = new ArrayList<>();
- options.add(createOption(15 /* minutes */));
- options.add(createOption(30 /* minutes */));
- mDefaultOption = createOption(60 /* minutes */);
+
+ options.add(createOption(15 /* minutes */, R.id.action_snooze_15_min));
+ options.add(createOption(30 /* minutes */, R.id.action_snooze_30_min));
+ mDefaultOption = createOption(60 /* minutes */, R.id.action_snooze_1_hour);
options.add(mDefaultOption);
- options.add(createOption(60 * 2 /* minutes */));
+ options.add(createOption(60 * 2 /* minutes */, R.id.action_snooze_2_hours));
return options;
}
- private SnoozeOption createOption(int minutes) {
+ private SnoozeOption createOption(int minutes, int accessibilityActionId) {
Resources res = getResources();
boolean showInHours = minutes >= 60;
int pluralResId = showInHours
@@ -137,7 +195,9 @@ public class NotificationSnooze extends LinearLayout
SpannableString string = new SpannableString(resultText);
string.setSpan(new StyleSpan(Typeface.BOLD),
resultText.length() - description.length(), resultText.length(), 0 /* flags */);
- return new SnoozeOption(null, minutes, description, string);
+ AccessibilityAction action = new AccessibilityAction(accessibilityActionId, description);
+ return new NotificationSnoozeOption(null, minutes, description, string,
+ action);
}
private void createOptionViews() {
@@ -149,7 +209,7 @@ public class NotificationSnooze extends LinearLayout
TextView tv = (TextView) inflater.inflate(R.layout.notification_snooze_option,
mSnoozeOptionContainer, false);
mSnoozeOptionContainer.addView(tv);
- tv.setText(option.description);
+ tv.setText(option.getDescription());
tv.setTag(option);
tv.setOnClickListener(this);
}
@@ -184,18 +244,36 @@ public class NotificationSnooze extends LinearLayout
mDivider.getAlpha(), show ? 1f : 0f);
ObjectAnimator optionAnim = ObjectAnimator.ofFloat(mSnoozeOptionContainer, View.ALPHA,
mSnoozeOptionContainer.getAlpha(), show ? 1f : 0f);
+ mSnoozeOptionContainer.setVisibility(View.VISIBLE);
mExpandAnimation = new AnimatorSet();
mExpandAnimation.playTogether(dividerAnim, optionAnim);
mExpandAnimation.setDuration(150);
mExpandAnimation.setInterpolator(show ? Interpolators.ALPHA_IN : Interpolators.ALPHA_OUT);
+ mExpandAnimation.addListener(new AnimatorListenerAdapter() {
+ boolean cancelled = false;
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ cancelled = true;
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (!show && !cancelled) {
+ mSnoozeOptionContainer.setVisibility(View.INVISIBLE);
+ mSnoozeOptionContainer.setAlpha(0f);
+ }
+ }
+ });
mExpandAnimation.start();
}
private void setSelected(SnoozeOption option) {
mSelectedOption = option;
- mSelectedOptionText.setText(option.confirmation);
+ mSelectedOptionText.setText(option.getConfirmation());
showSnoozeOptions(false);
hideSelectedOption();
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
}
@Override
@@ -212,20 +290,24 @@ public class NotificationSnooze extends LinearLayout
showSnoozeOptions(!mExpanded);
} else {
// Undo snooze was selected
- mSelectedOption = null;
- int[] parentLoc = new int[2];
- int[] targetLoc = new int[2];
- mGutsContainer.getLocationOnScreen(parentLoc);
- v.getLocationOnScreen(targetLoc);
- final int centerX = v.getWidth() / 2;
- final int centerY = v.getHeight() / 2;
- final int x = targetLoc[0] - parentLoc[0] + centerX;
- final int y = targetLoc[1] - parentLoc[1] + centerY;
- showSnoozeOptions(false);
- mGutsContainer.closeControls(x, y, false /* save */, false /* force */);
+ undoSnooze(v);
}
}
+ private void undoSnooze(View v) {
+ mSelectedOption = null;
+ int[] parentLoc = new int[2];
+ int[] targetLoc = new int[2];
+ mGutsContainer.getLocationOnScreen(parentLoc);
+ v.getLocationOnScreen(targetLoc);
+ final int centerX = v.getWidth() / 2;
+ final int centerY = v.getHeight() / 2;
+ final int x = targetLoc[0] - parentLoc[0] + centerX;
+ final int y = targetLoc[1] - parentLoc[1] + centerY;
+ showSnoozeOptions(false);
+ mGutsContainer.closeControls(x, y, false /* save */, false /* force */);
+ }
+
@Override
public int getActualHeight() {
return mExpanded ? getHeight() : mCollapsedHeight;
@@ -270,4 +352,48 @@ public class NotificationSnooze extends LinearLayout
public boolean isLeavebehind() {
return true;
}
+
+ public class NotificationSnoozeOption implements SnoozeOption {
+ private SnoozeCriterion mCriterion;
+ private int mMinutesToSnoozeFor;
+ private CharSequence mDescription;
+ private CharSequence mConfirmation;
+ private AccessibilityAction mAction;
+
+ public NotificationSnoozeOption(SnoozeCriterion sc, int minToSnoozeFor,
+ CharSequence description,
+ CharSequence confirmation, AccessibilityAction action) {
+ mCriterion = sc;
+ mMinutesToSnoozeFor = minToSnoozeFor;
+ mDescription = description;
+ mConfirmation = confirmation;
+ mAction = action;
+ }
+
+ @Override
+ public SnoozeCriterion getSnoozeCriterion() {
+ return mCriterion;
+ }
+
+ @Override
+ public CharSequence getDescription() {
+ return mDescription;
+ }
+
+ @Override
+ public CharSequence getConfirmation() {
+ return mConfirmation;
+ }
+
+ @Override
+ public int getMinutesToSnoozeFor() {
+ return mMinutesToSnoozeFor;
+ }
+
+ @Override
+ public AccessibilityAction getAccessibilityAction() {
+ return mAction;
+ }
+
+ }
}
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 95c2fc8df704..16d85bec4829 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -304,10 +304,10 @@ public abstract class PanelView extends FrameLayout {
trackMovement(event);
if (!mGestureWaitForTouchSlop || (mHeightAnimator != null && !mHintAnimationRunning)
|| mPeekAnimator != null) {
- cancelHeightAnimator();
- cancelPeek();
mTouchSlopExceeded = (mHeightAnimator != null && !mHintAnimationRunning)
|| mPeekAnimator != null;
+ cancelHeightAnimator();
+ cancelPeek();
onTrackingStarted();
}
if (isFullyCollapsed() && !mHeadsUpManager.hasPinnedHeadsUp()) {
@@ -612,6 +612,9 @@ public abstract class PanelView extends FrameLayout {
protected void cancelHeightAnimator() {
if (mHeightAnimator != null) {
+ if (mHeightAnimator.isRunning()) {
+ mPanelUpdateWhenAnimatorEnds = false;
+ }
mHeightAnimator.cancel();
}
endClosing();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index e3b3c4c23e2c..d8db3222734d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -6080,11 +6080,12 @@ public class StatusBar extends SystemUI implements DemoMode,
}
public void setNotificationSnoozed(StatusBarNotification sbn, SnoozeOption snoozeOption) {
- if (snoozeOption.criterion != null) {
- mNotificationListener.snoozeNotification(sbn.getKey(), snoozeOption.criterion.getId());
+ if (snoozeOption.getSnoozeCriterion() != null) {
+ mNotificationListener.snoozeNotification(sbn.getKey(),
+ snoozeOption.getSnoozeCriterion().getId());
} else {
mNotificationListener.snoozeNotification(sbn.getKey(),
- snoozeOption.snoozeForMinutes * 60 * 1000);
+ snoozeOption.getMinutesToSnoozeFor() * 60 * 1000);
}
}
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 2eb94d30d4e5..f696f94cae1f 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -4114,6 +4114,16 @@ message MetricsEvent {
// OS: O DR
ACTION_OPEN_APP_SETTING = 1017;
+ // OPEN: Settings > Connected devices > Bluetooth > Pair new device
+ // CATEGORY: SETTINGS
+ // OS: O DR
+ BLUETOOTH_PAIRING = 1018;
+
+ // ACTION: Collect PSD Signals
+ // CATEGORY: SETTINGS
+ // OS: O DR
+ ACTION_PSD_LOADER = 1019;
+
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
}
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 38b796b316de..1a02e8d8eb97 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -489,46 +489,78 @@ final class AutofillManagerServiceImpl {
* Initializes the last fill selection after an autofill service returned a new
* {@link FillResponse}.
*/
- void setLastResponse(int serviceUid, @NonNull FillResponse response) {
+ void setLastResponse(int serviceUid, int sessionId, @NonNull FillResponse response) {
synchronized (mLock) {
- mEventHistory = new FillEventHistory(serviceUid, response.getClientState());
+ mEventHistory = new FillEventHistory(serviceUid, sessionId, response.getClientState());
}
}
/**
+ * Resets the last fill selection.
+ */
+ void resetLastResponse() {
+ synchronized (mLock) {
+ mEventHistory = null;
+ }
+ }
+
+ private boolean isValidEventLocked(String method, int sessionId) {
+ if (mEventHistory == null) {
+ Slog.w(TAG, method + ": not logging event because history is null");
+ return false;
+ }
+ if (sessionId != mEventHistory.getSessionId()) {
+ if (sDebug) {
+ Slog.d(TAG, method + ": not logging event for session " + sessionId
+ + " because tracked session is " + mEventHistory.getSessionId());
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
* Updates the last fill selection when an authentication was selected.
*/
- void setAuthenticationSelected() {
+ void setAuthenticationSelected(int sessionId) {
synchronized (mLock) {
- mEventHistory.addEvent(new Event(Event.TYPE_AUTHENTICATION_SELECTED, null));
+ if (isValidEventLocked("setAuthenticationSelected()", sessionId)) {
+ mEventHistory.addEvent(new Event(Event.TYPE_AUTHENTICATION_SELECTED, null));
+ }
}
}
/**
* Updates the last fill selection when an dataset authentication was selected.
*/
- void setDatasetAuthenticationSelected(@Nullable String selectedDataset) {
+ void setDatasetAuthenticationSelected(@Nullable String selectedDataset, int sessionId) {
synchronized (mLock) {
- mEventHistory.addEvent(
- new Event(Event.TYPE_DATASET_AUTHENTICATION_SELECTED, selectedDataset));
+ if (isValidEventLocked("setDatasetAuthenticationSelected()", sessionId)) {
+ mEventHistory.addEvent(
+ new Event(Event.TYPE_DATASET_AUTHENTICATION_SELECTED, selectedDataset));
+ }
}
}
/**
* Updates the last fill selection when an save Ui is shown.
*/
- void setSaveShown() {
+ void setSaveShown(int sessionId) {
synchronized (mLock) {
- mEventHistory.addEvent(new Event(Event.TYPE_SAVE_SHOWN, null));
+ if (isValidEventLocked("setSaveShown()", sessionId)) {
+ mEventHistory.addEvent(new Event(Event.TYPE_SAVE_SHOWN, null));
+ }
}
}
/**
* Updates the last fill response when a dataset was selected.
*/
- void setDatasetSelected(@Nullable String selectedDataset) {
+ void setDatasetSelected(@Nullable String selectedDataset, int sessionId) {
synchronized (mLock) {
- mEventHistory.addEvent(new Event(Event.TYPE_DATASET_SELECTED, selectedDataset));
+ if (isValidEventLocked("setDatasetSelected()", sessionId)) {
+ mEventHistory.addEvent(new Event(Event.TYPE_DATASET_SELECTED, selectedDataset));
+ }
}
}
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index 9aebf6d2bacb..aebe92e1687d 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -427,6 +427,7 @@ final class RemoteFillService implements DeathRecipient {
mCompleted = true;
}
+ Slog.w(LOG_TAG, getClass().getSimpleName() + " timed out");
final RemoteFillService remoteService = mWeakService.get();
if (remoteService != null) {
fail(remoteService);
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 3ae05115217a..72ad752caf19 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -407,13 +407,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if ((requestFlags & FLAG_MANUAL_REQUEST) != 0) {
getUiForShowing().showError(R.string.autofill_error_cannot_autofill, this);
}
+ mService.resetLastResponse();
// Nothing to be done, but need to notify client.
notifyUnavailableToClient();
removeSelf();
return;
}
- mService.setLastResponse(serviceUid, response);
+ mService.setLastResponse(serviceUid, id, response);
if ((response.getDatasets() == null || response.getDatasets().isEmpty())
&& response.getAuthentication() == null) {
@@ -444,6 +445,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
+ id + " destroyed");
return;
}
+ mService.resetLastResponse();
}
LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
.setType(MetricsEvent.TYPE_FAILURE)
@@ -542,7 +544,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
getFillContextByRequestIdLocked(requestId).getStructure(), extras);
}
- mService.setAuthenticationSelected();
+ mService.setAuthenticationSelected(id);
final int authenticationId = AutofillManager.makeAuthenticationId(requestId, datasetIndex);
mHandlerCaller.getHandler().post(() -> startAuthentication(authenticationId,
@@ -831,7 +833,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
if (atLeastOneChanged) {
if (sDebug) Slog.d(TAG, "at least one field changed - showing save UI");
- mService.setSaveShown();
+ mService.setSaveShown(id);
getUiForShowing().showSaveUi(mService.getServiceLabel(), saveInfo, mPackageName,
this);
@@ -1362,14 +1364,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
// Autofill it directly...
if (dataset.getAuthentication() == null) {
- mService.setDatasetSelected(dataset.getId());
+ mService.setDatasetSelected(dataset.getId(), id);
autoFillApp(dataset);
return;
}
// ...or handle authentication.
- mService.setDatasetAuthenticationSelected(dataset.getId());
+ mService.setDatasetAuthenticationSelected(dataset.getId(), id);
setViewStatesLocked(null, dataset, ViewState.STATE_WAITING_DATASET_AUTH, false);
final Intent fillInIntent = createAuthFillInIntent(
getFillContextByRequestIdLocked(requestId).getStructure(), mClientState);
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index 9068745c1ef3..18108234c004 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -865,6 +865,17 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
}
+ public void onServiceDisconnected() {
+ if (DBG) {
+ Slog.d(TAG, "onServiceDisconnected");
+ }
+
+ synchronized(mSpellCheckerMap) {
+ mSpellChecker = null;
+ mConnected = false;
+ }
+ }
+
public void removeListener(ISpellCheckerSessionListener listener) {
if (DBG) {
Slog.w(TAG, "remove listener: " + listener.hashCode());
@@ -1019,10 +1030,17 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
@Override
public void onServiceDisconnected(ComponentName name) {
synchronized(mSpellCheckerMap) {
- final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
- if (group != null && this == group.mInternalConnection) {
- mSpellCheckerBindGroups.remove(mSciId);
- }
+ onServiceDisconnectedInnerLocked(name);
+ }
+ }
+
+ private void onServiceDisconnectedInnerLocked(ComponentName name) {
+ if (DBG) {
+ Slog.w(TAG, "onServiceDisconnected: " + name);
+ }
+ final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
+ if (group != null && this == group.mInternalConnection) {
+ group.onServiceDisconnected();
}
}
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index 6c3fe915f386..2cd2603bf554 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -48,9 +48,11 @@ final class ActivityManagerConstants extends ContentObserver {
private static final String KEY_GC_MIN_INTERVAL = "gc_min_interval";
private static final String KEY_FULL_PSS_MIN_INTERVAL = "full_pss_min_interval";
private static final String KEY_FULL_PSS_LOWERED_INTERVAL = "full_pss_lowered_interval";
- private static final String KEY_POWER_CHECK_DELAY = "power_check_delay";
- private static final String KEY_WAKE_LOCK_MIN_CHECK_DURATION = "wake_lock_min_check_duration";
- private static final String KEY_CPU_MIN_CHECK_DURATION = "cpu_min_check_duration";
+ private static final String KEY_POWER_CHECK_INTERVAL = "power_check_interval";
+ private static final String KEY_POWER_CHECK_MAX_CPU_1 = "power_check_max_cpu_1";
+ private static final String KEY_POWER_CHECK_MAX_CPU_2 = "power_check_max_cpu_2";
+ private static final String KEY_POWER_CHECK_MAX_CPU_3 = "power_check_max_cpu_3";
+ private static final String KEY_POWER_CHECK_MAX_CPU_4 = "power_check_max_cpu_4";
private static final String KEY_SERVICE_USAGE_INTERACTION_TIME
= "service_usage_interaction_time";
private static final String KEY_USAGE_STATS_INTERACTION_INTERVAL
@@ -73,11 +75,11 @@ final class ActivityManagerConstants extends ContentObserver {
private static final long DEFAULT_GC_MIN_INTERVAL = 60*1000;
private static final long DEFAULT_FULL_PSS_MIN_INTERVAL = 10*60*1000;
private static final long DEFAULT_FULL_PSS_LOWERED_INTERVAL = 2*60*1000;
- private static final long DEFAULT_POWER_CHECK_DELAY = (DEBUG_POWER_QUICK ? 2 : 15) * 60*1000;
- private static final long DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION
- = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
- private static final long DEFAULT_CPU_MIN_CHECK_DURATION
- = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
+ private static final long DEFAULT_POWER_CHECK_INTERVAL = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
+ private static final int DEFAULT_POWER_CHECK_MAX_CPU_1 = 25;
+ private static final int DEFAULT_POWER_CHECK_MAX_CPU_2 = 25;
+ private static final int DEFAULT_POWER_CHECK_MAX_CPU_3 = 10;
+ private static final int DEFAULT_POWER_CHECK_MAX_CPU_4 = 2;
private static final long DEFAULT_SERVICE_USAGE_INTERACTION_TIME = 30*60*1000;
private static final long DEFAULT_USAGE_STATS_INTERACTION_INTERVAL = 24*60*60*1000L;
private static final long DEFAULT_SERVICE_RESTART_DURATION = 1*1000;
@@ -133,16 +135,26 @@ final class ActivityManagerConstants extends ContentObserver {
// when the request is due to the memory state being lowered.
long FULL_PSS_LOWERED_INTERVAL = DEFAULT_FULL_PSS_LOWERED_INTERVAL;
- // The rate at which we check for apps using excessive power -- 15 mins.
- long POWER_CHECK_DELAY = DEFAULT_POWER_CHECK_DELAY;
-
- // The minimum sample duration we will allow before deciding we have
- // enough data on wake locks to start killing things.
- long WAKE_LOCK_MIN_CHECK_DURATION = DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION;
-
// The minimum sample duration we will allow before deciding we have
// enough data on CPU usage to start killing things.
- long CPU_MIN_CHECK_DURATION = DEFAULT_CPU_MIN_CHECK_DURATION;
+ long POWER_CHECK_INTERVAL = DEFAULT_POWER_CHECK_INTERVAL;
+
+ // The maximum CPU (as a percentage) a process is allowed to use over the first
+ // power check interval that it is cached.
+ int POWER_CHECK_MAX_CPU_1 = DEFAULT_POWER_CHECK_MAX_CPU_1;
+
+ // The maximum CPU (as a percentage) a process is allowed to use over the second
+ // power check interval that it is cached. The home app will never check for less
+ // CPU than this (it will not test against the 3 or 4 levels).
+ int POWER_CHECK_MAX_CPU_2 = DEFAULT_POWER_CHECK_MAX_CPU_2;
+
+ // The maximum CPU (as a percentage) a process is allowed to use over the third
+ // power check interval that it is cached.
+ int POWER_CHECK_MAX_CPU_3 = DEFAULT_POWER_CHECK_MAX_CPU_3;
+
+ // The maximum CPU (as a percentage) a process is allowed to use over the fourth
+ // power check interval that it is cached.
+ int POWER_CHECK_MAX_CPU_4 = DEFAULT_POWER_CHECK_MAX_CPU_4;
// This is the amount of time an app needs to be running a foreground service before
// we will consider it to be doing interaction for usage stats.
@@ -270,12 +282,16 @@ final class ActivityManagerConstants extends ContentObserver {
DEFAULT_FULL_PSS_MIN_INTERVAL);
FULL_PSS_LOWERED_INTERVAL = mParser.getLong(KEY_FULL_PSS_LOWERED_INTERVAL,
DEFAULT_FULL_PSS_LOWERED_INTERVAL);
- POWER_CHECK_DELAY = mParser.getLong(KEY_POWER_CHECK_DELAY,
- DEFAULT_POWER_CHECK_DELAY);
- WAKE_LOCK_MIN_CHECK_DURATION = mParser.getLong(KEY_WAKE_LOCK_MIN_CHECK_DURATION,
- DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION);
- CPU_MIN_CHECK_DURATION = mParser.getLong(KEY_CPU_MIN_CHECK_DURATION,
- DEFAULT_CPU_MIN_CHECK_DURATION);
+ POWER_CHECK_INTERVAL = mParser.getLong(KEY_POWER_CHECK_INTERVAL,
+ DEFAULT_POWER_CHECK_INTERVAL);
+ POWER_CHECK_MAX_CPU_1 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_1,
+ DEFAULT_POWER_CHECK_MAX_CPU_1);
+ POWER_CHECK_MAX_CPU_2 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_2,
+ DEFAULT_POWER_CHECK_MAX_CPU_2);
+ POWER_CHECK_MAX_CPU_3 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_3,
+ DEFAULT_POWER_CHECK_MAX_CPU_3);
+ POWER_CHECK_MAX_CPU_4 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_4,
+ DEFAULT_POWER_CHECK_MAX_CPU_4);
SERVICE_USAGE_INTERACTION_TIME = mParser.getLong(KEY_SERVICE_USAGE_INTERACTION_TIME,
DEFAULT_SERVICE_USAGE_INTERACTION_TIME);
USAGE_STATS_INTERACTION_INTERVAL = mParser.getLong(KEY_USAGE_STATS_INTERACTION_INTERVAL,
@@ -335,12 +351,16 @@ final class ActivityManagerConstants extends ContentObserver {
pw.println(FULL_PSS_MIN_INTERVAL);
pw.print(" "); pw.print(KEY_FULL_PSS_LOWERED_INTERVAL); pw.print("=");
pw.println(FULL_PSS_LOWERED_INTERVAL);
- pw.print(" "); pw.print(KEY_POWER_CHECK_DELAY); pw.print("=");
- pw.println(POWER_CHECK_DELAY);
- pw.print(" "); pw.print(KEY_WAKE_LOCK_MIN_CHECK_DURATION); pw.print("=");
- pw.println(WAKE_LOCK_MIN_CHECK_DURATION);
- pw.print(" "); pw.print(KEY_CPU_MIN_CHECK_DURATION); pw.print("=");
- pw.println(CPU_MIN_CHECK_DURATION);
+ pw.print(" "); pw.print(KEY_POWER_CHECK_INTERVAL); pw.print("=");
+ pw.println(POWER_CHECK_INTERVAL);
+ pw.print(" "); pw.print(KEY_POWER_CHECK_MAX_CPU_1); pw.print("=");
+ pw.println(POWER_CHECK_MAX_CPU_1);
+ pw.print(" "); pw.print(KEY_POWER_CHECK_MAX_CPU_2); pw.print("=");
+ pw.println(POWER_CHECK_MAX_CPU_2);
+ pw.print(" "); pw.print(KEY_POWER_CHECK_MAX_CPU_3); pw.print("=");
+ pw.println(POWER_CHECK_MAX_CPU_3);
+ pw.print(" "); pw.print(KEY_POWER_CHECK_MAX_CPU_4); pw.print("=");
+ pw.println(POWER_CHECK_MAX_CPU_4);
pw.print(" "); pw.print(KEY_SERVICE_USAGE_INTERACTION_TIME); pw.print("=");
pw.println(SERVICE_USAGE_INTERACTION_TIME);
pw.print(" "); pw.print(KEY_USAGE_STATS_INTERACTION_INTERVAL); pw.print("=");
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 05c123d07e3b..5bffe1ea6bb7 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -255,7 +255,6 @@ import android.content.IIntentReceiver;
import android.content.IIntentSender;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.IntentSender;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ConfigurationInfo;
@@ -1320,11 +1319,6 @@ public class ActivityManagerService extends IActivityManager.Stub
boolean mDidAppSwitch;
/**
- * Last time (in realtime) at which we checked for power usage.
- */
- long mLastPowerCheckRealtime;
-
- /**
* Last time (in uptime) at which we checked for power usage.
*/
long mLastPowerCheckUptime;
@@ -1658,7 +1652,7 @@ public class ActivityManagerService extends IActivityManager.Stub
static final int POST_HEAVY_NOTIFICATION_MSG = 24;
static final int CANCEL_HEAVY_NOTIFICATION_MSG = 25;
static final int SHOW_STRICT_MODE_VIOLATION_UI_MSG = 26;
- static final int CHECK_EXCESSIVE_WAKE_LOCKS_MSG = 27;
+ static final int CHECK_EXCESSIVE_POWER_USE_MSG = 27;
static final int CLEAR_DNS_CACHE_MSG = 28;
static final int UPDATE_HTTP_PROXY_MSG = 29;
static final int SHOW_COMPAT_MODE_DIALOG_UI_MSG = 30;
@@ -2123,12 +2117,12 @@ public class ActivityManagerService extends IActivityManager.Stub
} catch (RemoteException e) {
}
} break;
- case CHECK_EXCESSIVE_WAKE_LOCKS_MSG: {
+ case CHECK_EXCESSIVE_POWER_USE_MSG: {
synchronized (ActivityManagerService.this) {
- checkExcessivePowerUsageLocked(true);
- removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
- Message nmsg = obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
- sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
+ checkExcessivePowerUsageLocked();
+ removeMessages(CHECK_EXCESSIVE_POWER_USE_MSG);
+ Message nmsg = obtainMessage(CHECK_EXCESSIVE_POWER_USE_MSG);
+ sendMessageDelayed(nmsg, mConstants.POWER_CHECK_INTERVAL);
}
} break;
case REPORT_MEM_USAGE_MSG: {
@@ -3003,6 +2997,9 @@ public class ActivityManagerService extends IActivityManager.Stub
}
ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
pr.curCpuTime += st.rel_utime + st.rel_stime;
+ if (pr.lastCpuTime == 0) {
+ pr.lastCpuTime = pr.curCpuTime;
+ }
} else {
BatteryStatsImpl.Uid.Proc ps = st.batteryStats;
if (ps == null || !ps.isActive()) {
@@ -7259,8 +7256,8 @@ public class ActivityManagerService extends IActivityManager.Stub
if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
// Start looking for apps that are abusing wake locks.
- Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
- mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
+ Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_POWER_USE_MSG);
+ mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_INTERVAL);
// Tell anyone interested that we are done booting!
SystemProperties.set("sys.boot_completed", "1");
@@ -12451,12 +12448,6 @@ public class ActivityManagerService extends IActivityManager.Stub
mStackSupervisor.goingToSleepLocked();
sendNotifyVrManagerOfSleepState(true);
updateOomAdjLocked();
-
- // Initialize the wake times of all processes.
- checkExcessivePowerUsageLocked(false);
- mHandler.removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
- Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
- mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
}
// Also update state in a special way for running foreground services UI.
@@ -15975,9 +15966,6 @@ public class ActivityManagerService extends IActivityManager.Stub
pw.println(" mBooting=" + mBooting
+ " mCallFinishBooting=" + mCallFinishBooting
+ " mBootAnimationComplete=" + mBootAnimationComplete);
- pw.print(" mLastPowerCheckRealtime=");
- TimeUtils.formatDuration(mLastPowerCheckRealtime, pw);
- pw.println("");
pw.print(" mLastPowerCheckUptime=");
TimeUtils.formatDuration(mLastPowerCheckUptime, pw);
pw.println("");
@@ -16632,8 +16620,6 @@ public class ActivityManagerService extends IActivityManager.Stub
Collections.sort(list, comparator);
- final long curRealtime = SystemClock.elapsedRealtime();
- final long realtimeSince = curRealtime - service.mLastPowerCheckRealtime;
final long curUptime = SystemClock.uptimeMillis();
final long uptimeSince = curUptime - service.mLastPowerCheckUptime;
@@ -16730,24 +16716,6 @@ public class ActivityManagerService extends IActivityManager.Stub
pw.print(" hasAboveClient="); pw.println(r.hasAboveClient);
if (r.setProcState >= ActivityManager.PROCESS_STATE_SERVICE) {
- if (r.lastWakeTime != 0) {
- long wtime;
- BatteryStatsImpl stats = service.mBatteryStatsService.getActiveStatistics();
- synchronized (stats) {
- wtime = stats.getProcessWakeTime(r.info.uid,
- r.pid, curRealtime);
- }
- long timeUsed = wtime - r.lastWakeTime;
- pw.print(prefix);
- pw.print(" ");
- pw.print("keep awake over ");
- TimeUtils.formatDuration(realtimeSince, pw);
- pw.print(" used ");
- TimeUtils.formatDuration(timeUsed, pw);
- pw.print(" (");
- pw.print((timeUsed*100)/realtimeSince);
- pw.println("%)");
- }
if (r.lastCpuTime != 0) {
long timeUsed = r.curCpuTime - r.lastCpuTime;
pw.print(prefix);
@@ -21886,58 +21854,28 @@ public class ActivityManagerService extends IActivityManager.Stub
}
}
- final void checkExcessivePowerUsageLocked(boolean doKills) {
+ final void checkExcessivePowerUsageLocked() {
updateCpuStatsNow();
BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
- boolean doWakeKills = doKills;
- boolean doCpuKills = doKills;
- if (mLastPowerCheckRealtime == 0) {
- doWakeKills = false;
- }
+ boolean doCpuKills = true;
if (mLastPowerCheckUptime == 0) {
doCpuKills = false;
}
- if (stats.isScreenOn()) {
- doWakeKills = false;
- }
- final long curRealtime = SystemClock.elapsedRealtime();
- final long realtimeSince = curRealtime - mLastPowerCheckRealtime;
final long curUptime = SystemClock.uptimeMillis();
final long uptimeSince = curUptime - mLastPowerCheckUptime;
- mLastPowerCheckRealtime = curRealtime;
mLastPowerCheckUptime = curUptime;
- if (realtimeSince < mConstants.WAKE_LOCK_MIN_CHECK_DURATION) {
- doWakeKills = false;
- }
- if (uptimeSince < mConstants.CPU_MIN_CHECK_DURATION) {
- doCpuKills = false;
- }
int i = mLruProcesses.size();
while (i > 0) {
i--;
ProcessRecord app = mLruProcesses.get(i);
if (app.setProcState >= ActivityManager.PROCESS_STATE_HOME) {
- long wtime;
- synchronized (stats) {
- wtime = stats.getProcessWakeTime(app.info.uid,
- app.pid, curRealtime);
+ if (app.lastCpuTime <= 0) {
+ continue;
}
- long wtimeUsed = wtime - app.lastWakeTime;
long cputimeUsed = app.curCpuTime - app.lastCpuTime;
if (DEBUG_POWER) {
StringBuilder sb = new StringBuilder(128);
- sb.append("Wake for ");
- app.toShortString(sb);
- sb.append(": over ");
- TimeUtils.formatDuration(realtimeSince, sb);
- sb.append(" used ");
- TimeUtils.formatDuration(wtimeUsed, sb);
- sb.append(" (");
- sb.append((wtimeUsed*100)/realtimeSince);
- sb.append("%)");
- Slog.i(TAG_POWER, sb.toString());
- sb.setLength(0);
sb.append("CPU for ");
app.toShortString(sb);
sb.append(": over ");
@@ -21949,29 +21887,33 @@ public class ActivityManagerService extends IActivityManager.Stub
sb.append("%)");
Slog.i(TAG_POWER, sb.toString());
}
- // If a process has held a wake lock for more
- // than 50% of the time during this period,
- // that sounds bad. Kill!
- if (doWakeKills && realtimeSince > 0
- && ((wtimeUsed*100)/realtimeSince) >= 50) {
- synchronized (stats) {
- stats.reportExcessiveWakeLocked(app.info.uid, app.processName,
- realtimeSince, wtimeUsed);
+ // If the process has used too much CPU over the last duration, the
+ // user probably doesn't want this, so kill!
+ if (doCpuKills && uptimeSince > 0) {
+ // What is the limit for this process?
+ int cpuLimit;
+ long checkDur = curUptime - app.whenUnimportant;
+ if (checkDur <= mConstants.POWER_CHECK_INTERVAL) {
+ cpuLimit = mConstants.POWER_CHECK_MAX_CPU_1;
+ } else if (checkDur <= (mConstants.POWER_CHECK_INTERVAL*2)
+ || app.setProcState <= ActivityManager.PROCESS_STATE_HOME) {
+ cpuLimit = mConstants.POWER_CHECK_MAX_CPU_2;
+ } else if (checkDur <= (mConstants.POWER_CHECK_INTERVAL*3)) {
+ cpuLimit = mConstants.POWER_CHECK_MAX_CPU_3;
+ } else {
+ cpuLimit = mConstants.POWER_CHECK_MAX_CPU_4;
}
- app.kill("excessive wake held " + wtimeUsed + " during " + realtimeSince, true);
- app.baseProcessTracker.reportExcessiveWake(app.pkgList);
- } else if (doCpuKills && uptimeSince > 0
- && ((cputimeUsed*100)/uptimeSince) >= 25) {
- synchronized (stats) {
- stats.reportExcessiveCpuLocked(app.info.uid, app.processName,
- uptimeSince, cputimeUsed);
+ if (((cputimeUsed*100)/uptimeSince) >= cpuLimit) {
+ synchronized (stats) {
+ stats.reportExcessiveCpuLocked(app.info.uid, app.processName,
+ uptimeSince, cputimeUsed);
+ }
+ app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince
+ + " dur=" + checkDur + " limit=" + cpuLimit, true);
+ app.baseProcessTracker.reportExcessiveCpu(app.pkgList);
}
- app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince, true);
- app.baseProcessTracker.reportExcessiveCpu(app.pkgList);
- } else {
- app.lastWakeTime = wtime;
- app.lastCpuTime = app.curCpuTime;
}
+ app.lastCpuTime = app.curCpuTime;
}
}
}
@@ -22145,15 +22087,10 @@ public class ActivityManagerService extends IActivityManager.Stub
if (setImportant && !curImportant) {
// This app is no longer something we consider important enough to allow to
// use arbitrary amounts of battery power. Note
- // its current wake lock time to later know to kill it if
+ // its current CPU time to later know to kill it if
// it is not behaving well.
- BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
- synchronized (stats) {
- app.lastWakeTime = stats.getProcessWakeTime(app.info.uid,
- app.pid, nowElapsed);
- }
- app.lastCpuTime = app.curCpuTime;
-
+ app.whenUnimportant = now;
+ app.lastCpuTime = 0;
}
// Inform UsageStats of important process state change
// Must be called before updating setProcState
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 53c7f845f2f0..411e973de032 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -143,7 +143,7 @@ final class ProcessRecord {
ActiveInstrumentation instr;// Set to currently active instrumentation running in process
boolean usingWrapper; // Set to true when process was launched with a wrapper attached
final ArraySet<BroadcastRecord> curReceivers = new ArraySet<BroadcastRecord>();// receivers currently running in the app
- long lastWakeTime; // How long proc held wake lock at last check
+ long whenUnimportant; // When (uptime) the process last became unimportant
long lastCpuTime; // How long proc has run CPU at last check
long curCpuTime; // How long proc has run CPU most recently
long lastRequestedGc; // When we last asked the app to do a gc
@@ -204,7 +204,7 @@ final class ProcessRecord {
boolean whitelistManager;
void dump(PrintWriter pw, String prefix) {
- final long now = SystemClock.uptimeMillis();
+ final long nowUptime = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("user #"); pw.print(userId);
pw.print(" uid="); pw.print(info.uid);
@@ -254,11 +254,11 @@ final class ProcessRecord {
pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting=");
pw.println(starting);
pw.print(prefix); pw.print("lastActivityTime=");
- TimeUtils.formatDuration(lastActivityTime, now, pw);
+ TimeUtils.formatDuration(lastActivityTime, nowUptime, pw);
pw.print(" lastPssTime=");
- TimeUtils.formatDuration(lastPssTime, now, pw);
+ TimeUtils.formatDuration(lastPssTime, nowUptime, pw);
pw.print(" nextPssTime=");
- TimeUtils.formatDuration(nextPssTime, now, pw);
+ TimeUtils.formatDuration(nextPssTime, nowUptime, pw);
pw.println();
pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq);
pw.print(" lruSeq="); pw.print(lruSeq);
@@ -294,7 +294,7 @@ final class ProcessRecord {
pw.print(" pssProcState="); pw.print(pssProcState);
pw.print(" setProcState="); pw.print(setProcState);
pw.print(" lastStateTime=");
- TimeUtils.formatDuration(lastStateTime, now, pw);
+ TimeUtils.formatDuration(lastStateTime, nowUptime, pw);
pw.println();
if (hasShownUi || pendingUiClean || hasAboveClient || treatLikeActivity) {
pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi);
@@ -334,29 +334,26 @@ final class ProcessRecord {
}
if (lastProviderTime > 0) {
pw.print(prefix); pw.print("lastProviderTime=");
- TimeUtils.formatDuration(lastProviderTime, now, pw);
+ TimeUtils.formatDuration(lastProviderTime, nowUptime, pw);
pw.println();
}
if (hasStartedServices) {
pw.print(prefix); pw.print("hasStartedServices="); pw.println(hasStartedServices);
}
- if (setProcState >= ActivityManager.PROCESS_STATE_SERVICE) {
- long wtime;
- synchronized (mBatteryStats) {
- wtime = mBatteryStats.getProcessWakeTime(info.uid,
- pid, SystemClock.elapsedRealtime());
- }
- pw.print(prefix); pw.print("lastWakeTime="); pw.print(lastWakeTime);
- pw.print(" timeUsed=");
- TimeUtils.formatDuration(wtime-lastWakeTime, pw); pw.println("");
+ if (setProcState > ActivityManager.PROCESS_STATE_SERVICE) {
pw.print(prefix); pw.print("lastCpuTime="); pw.print(lastCpuTime);
- pw.print(" timeUsed=");
- TimeUtils.formatDuration(curCpuTime-lastCpuTime, pw); pw.println("");
+ if (lastCpuTime > 0) {
+ pw.print(" timeUsed=");
+ TimeUtils.formatDuration(curCpuTime - lastCpuTime, pw);
+ }
+ pw.print(" whenUnimportant=");
+ TimeUtils.formatDuration(whenUnimportant - nowUptime, pw);
+ pw.println();
}
pw.print(prefix); pw.print("lastRequestedGc=");
- TimeUtils.formatDuration(lastRequestedGc, now, pw);
+ TimeUtils.formatDuration(lastRequestedGc, nowUptime, pw);
pw.print(" lastLowMemory=");
- TimeUtils.formatDuration(lastLowMemory, now, pw);
+ TimeUtils.formatDuration(lastLowMemory, nowUptime, pw);
pw.print(" reportLowMemory="); pw.println(reportLowMemory);
if (killed || killedByAm || waitingToKill != null) {
pw.print(prefix); pw.print("killed="); pw.print(killed);
diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java
index b7fbfb756b1d..7efa1664788c 100644
--- a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java
+++ b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java
@@ -17,6 +17,7 @@
package com.android.server.connectivity.tethering;
import static android.content.Context.TELEPHONY_SERVICE;
+import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
@@ -211,29 +212,26 @@ public class TetheringConfiguration {
// *always* an upstream, regardless of the upstream interface types
// specified by configuration resources.
if (dunCheck == DUN_REQUIRED) {
- if (!upstreamIfaceTypes.contains(TYPE_MOBILE_DUN)) {
- upstreamIfaceTypes.add(TYPE_MOBILE_DUN);
- }
+ appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE_DUN);
} else if (dunCheck == DUN_NOT_REQUIRED) {
- if (!upstreamIfaceTypes.contains(TYPE_MOBILE)) {
- upstreamIfaceTypes.add(TYPE_MOBILE);
- }
- if (!upstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)) {
- upstreamIfaceTypes.add(TYPE_MOBILE_HIPRI);
- }
+ appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE);
+ appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE_HIPRI);
} else {
// Fix upstream interface types for case DUN_UNSPECIFIED.
// Do not modify if a cellular interface type is already present in the
// upstream interface types. Add TYPE_MOBILE and TYPE_MOBILE_HIPRI if no
// cellular interface types are found in the upstream interface types.
- if (!(upstreamIfaceTypes.contains(TYPE_MOBILE_DUN)
- || upstreamIfaceTypes.contains(TYPE_MOBILE)
- || upstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI))) {
+ if (!(containsOneOf(upstreamIfaceTypes,
+ TYPE_MOBILE_DUN, TYPE_MOBILE, TYPE_MOBILE_HIPRI))) {
upstreamIfaceTypes.add(TYPE_MOBILE);
upstreamIfaceTypes.add(TYPE_MOBILE_HIPRI);
}
}
+ // Always make sure our good friend Ethernet is present.
+ // TODO: consider unilaterally forcing this at the front.
+ prependIfNotPresent(upstreamIfaceTypes, TYPE_ETHERNET);
+
return upstreamIfaceTypes;
}
@@ -256,4 +254,21 @@ public class TetheringConfiguration {
private static String[] copy(String[] strarray) {
return Arrays.copyOf(strarray, strarray.length);
}
+
+ private static void prependIfNotPresent(ArrayList<Integer> list, int value) {
+ if (list.contains(value)) return;
+ list.add(0, value);
+ }
+
+ private static void appendIfNotPresent(ArrayList<Integer> list, int value) {
+ if (list.contains(value)) return;
+ list.add(value);
+ }
+
+ private static boolean containsOneOf(ArrayList<Integer> list, Integer... values) {
+ for (Integer value : values) {
+ if (list.contains(value)) return true;
+ }
+ return false;
+ }
}
diff --git a/services/core/java/com/android/server/job/JobPackageTracker.java b/services/core/java/com/android/server/job/JobPackageTracker.java
index 8ad1beace643..ba922959213c 100644
--- a/services/core/java/com/android/server/job/JobPackageTracker.java
+++ b/services/core/java/com/android/server/job/JobPackageTracker.java
@@ -39,19 +39,23 @@ public final class JobPackageTracker {
public static final int EVENT_NULL = 0;
public static final int EVENT_START_JOB = 1;
public static final int EVENT_STOP_JOB = 2;
+ public static final int EVENT_START_PERIODIC_JOB = 3;
+ public static final int EVENT_STOP_PERIODIC_JOB = 4;
private final RingBufferIndices mEventIndices = new RingBufferIndices(EVENT_BUFFER_SIZE);
private final int[] mEventCmds = new int[EVENT_BUFFER_SIZE];
private final long[] mEventTimes = new long[EVENT_BUFFER_SIZE];
private final int[] mEventUids = new int[EVENT_BUFFER_SIZE];
private final String[] mEventTags = new String[EVENT_BUFFER_SIZE];
+ private final int[] mEventJobIds = new int[EVENT_BUFFER_SIZE];
- public void addEvent(int cmd, int uid, String tag) {
+ public void addEvent(int cmd, int uid, String tag, int jobId) {
int index = mEventIndices.add();
mEventCmds[index] = cmd;
mEventTimes[index] = SystemClock.elapsedRealtime();
mEventUids[index] = uid;
mEventTags[index] = tag;
+ mEventJobIds[index] = jobId;
}
DataSet mCurDataSet = new DataSet();
@@ -365,7 +369,8 @@ public final class JobPackageTracker {
} else {
mCurDataSet.incActive(job.getSourceUid(), job.getSourcePackageName(), now);
}
- addEvent(EVENT_START_JOB, job.getSourceUid(), job.getBatteryName());
+ addEvent(job.getJob().isPeriodic() ? EVENT_START_PERIODIC_JOB : EVENT_START_JOB,
+ job.getSourceUid(), job.getBatteryName(), job.getJobId());
}
public void noteInactive(JobStatus job) {
@@ -376,7 +381,8 @@ public final class JobPackageTracker {
mCurDataSet.decActive(job.getSourceUid(), job.getSourcePackageName(), now);
}
rebatchIfNeeded(now);
- addEvent(EVENT_STOP_JOB, job.getSourceUid(), job.getBatteryName());
+ addEvent(job.getJob().isPeriodic() ? EVENT_STOP_JOB : EVENT_STOP_PERIODIC_JOB,
+ job.getSourceUid(), job.getBatteryName(), job.getJobId());
}
public void noteConcurrency(int totalActive, int fgActive) {
@@ -448,16 +454,20 @@ public final class JobPackageTracker {
}
final String label;
switch (mEventCmds[index]) {
- case EVENT_START_JOB: label = "START"; break;
- case EVENT_STOP_JOB: label = " STOP"; break;
- default: label = " ??"; break;
+ case EVENT_START_JOB: label = " START"; break;
+ case EVENT_STOP_JOB: label = " STOP"; break;
+ case EVENT_START_PERIODIC_JOB: label = "START-P"; break;
+ case EVENT_STOP_PERIODIC_JOB: label = " STOP-P"; break;
+ default: label = " ??"; break;
}
pw.print(prefix);
TimeUtils.formatDuration(mEventTimes[index]-now, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN);
pw.print(" ");
pw.print(label);
- pw.print(": ");
+ pw.print(": #");
UserHandle.formatUid(pw, uid);
+ pw.print("/");
+ pw.print(mEventJobIds[index]);
pw.print(" ");
pw.println(mEventTags[index]);
}
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index b8fe88439c2d..98c65fd487ca 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -1122,7 +1122,8 @@ public final class JobSchedulerService extends com.android.server.SystemService
delayMillis =
Math.min(delayMillis, JobInfo.MAX_BACKOFF_DELAY_MILLIS);
JobStatus newJob = new JobStatus(failureToReschedule, elapsedNowMillis + delayMillis,
- JobStatus.NO_LATEST_RUNTIME, backoffAttempts);
+ JobStatus.NO_LATEST_RUNTIME, backoffAttempts,
+ failureToReschedule.getLastSuccessfulRunTime(), System.currentTimeMillis());
for (int ic=0; ic<mControllers.size(); ic++) {
StateController controller = mControllers.get(ic);
controller.rescheduleForFailureLocked(newJob, failureToReschedule);
@@ -1160,7 +1161,9 @@ public final class JobSchedulerService extends com.android.server.SystemService
newEarliestRunTimeElapsed/1000 + ", " + newLatestRuntimeElapsed/1000 + "]s");
}
return new JobStatus(periodicToReschedule, newEarliestRunTimeElapsed,
- newLatestRuntimeElapsed, 0 /* backoffAttempt */);
+ newLatestRuntimeElapsed, 0 /* backoffAttempt */,
+ System.currentTimeMillis() /* lastSuccessfulRunTime */,
+ periodicToReschedule.getLastFailedRunTime());
}
// JobCompletedListener implementations.
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java
index f0cd8a8569e0..84810bebf1f1 100644
--- a/services/core/java/com/android/server/job/JobStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -345,6 +345,11 @@ public final class JobStore {
out.attribute(null, "uid", Integer.toString(jobStatus.getUid()));
out.attribute(null, "priority", String.valueOf(jobStatus.getPriority()));
out.attribute(null, "flags", String.valueOf(jobStatus.getFlags()));
+
+ out.attribute(null, "lastSuccessfulRunTime",
+ String.valueOf(jobStatus.getLastSuccessfulRunTime()));
+ out.attribute(null, "lastFailedRunTime",
+ String.valueOf(jobStatus.getLastFailedRunTime()));
}
private void writeBundleToXml(PersistableBundle extras, XmlSerializer out)
@@ -555,6 +560,8 @@ public final class JobStore {
IOException {
JobInfo.Builder jobBuilder;
int uid, sourceUserId;
+ long lastSuccessfulRunTime;
+ long lastFailedRunTime;
// Read out job identifier attributes and priority.
try {
@@ -572,6 +579,12 @@ public final class JobStore {
}
val = parser.getAttributeValue(null, "sourceUserId");
sourceUserId = val == null ? -1 : Integer.parseInt(val);
+
+ val = parser.getAttributeValue(null, "lastSuccessfulRunTime");
+ lastSuccessfulRunTime = val == null ? 0 : Long.parseLong(val);
+
+ val = parser.getAttributeValue(null, "lastFailedRunTime");
+ lastFailedRunTime = val == null ? 0 : Long.parseLong(val);
} catch (NumberFormatException e) {
Slog.e(TAG, "Error parsing job's required fields, skipping");
return null;
@@ -708,7 +721,8 @@ public final class JobStore {
// And now we're done
JobStatus js = new JobStatus(
jobBuilder.build(), uid, sourcePackageName, sourceUserId, sourceTag,
- elapsedRuntimes.first, elapsedRuntimes.second);
+ elapsedRuntimes.first, elapsedRuntimes.second,
+ lastSuccessfulRunTime, lastFailedRunTime);
return js;
}
diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java
index 446b0d67ce95..9658da7a5de0 100644
--- a/services/core/java/com/android/server/job/controllers/JobStatus.java
+++ b/services/core/java/com/android/server/job/controllers/JobStatus.java
@@ -26,6 +26,7 @@ import android.net.Uri;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.text.format.Time;
import android.util.ArraySet;
import android.util.Slog;
import android.util.TimeUtils;
@@ -184,6 +185,17 @@ public final class JobStatus {
public long madeActive;
/**
+ * Last time a job finished successfully for a periodic job, in the currentTimeMillis time,
+ * for dumpsys.
+ */
+ private long mLastSuccessfulRunTime;
+
+ /**
+ * Last time a job finished unsuccessfully, in the currentTimeMillis time, for dumpsys.
+ */
+ private long mLastFailedRunTime;
+
+ /**
* For use only by ContentObserverController: state it is maintaining about content URIs
* being observed.
*/
@@ -196,7 +208,7 @@ public final class JobStatus {
private JobStatus(JobInfo job, int callingUid, String sourcePackageName,
int sourceUserId, String tag, int numFailures, long earliestRunTimeElapsedMillis,
- long latestRunTimeElapsedMillis) {
+ long latestRunTimeElapsedMillis, long lastSuccessfulRunTime, long lastFailedRunTime) {
this.job = job;
this.callingUid = callingUid;
@@ -263,6 +275,9 @@ public final class JobStatus {
requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER;
}
this.requiredConstraints = requiredConstraints;
+
+ mLastSuccessfulRunTime = lastSuccessfulRunTime;
+ mLastFailedRunTime = lastFailedRunTime;
}
/** Copy constructor. */
@@ -270,7 +285,8 @@ public final class JobStatus {
this(jobStatus.getJob(), jobStatus.getUid(),
jobStatus.getSourcePackageName(), jobStatus.getSourceUserId(),
jobStatus.getSourceTag(), jobStatus.getNumFailures(),
- jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed());
+ jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed(),
+ jobStatus.getLastSuccessfulRunTime(), jobStatus.getLastFailedRunTime());
}
/**
@@ -281,18 +297,22 @@ public final class JobStatus {
* We consider a freshly loaded job to no longer be in back-off.
*/
public JobStatus(JobInfo job, int callingUid, String sourcePackageName, int sourceUserId,
- String sourceTag, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis) {
+ String sourceTag, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis,
+ long lastSuccessfulRunTime, long lastFailedRunTime) {
this(job, callingUid, sourcePackageName, sourceUserId, sourceTag, 0,
- earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis);
+ earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis,
+ lastSuccessfulRunTime, lastFailedRunTime);
}
/** Create a new job to be rescheduled with the provided parameters. */
public JobStatus(JobStatus rescheduling, long newEarliestRuntimeElapsedMillis,
- long newLatestRuntimeElapsedMillis, int backoffAttempt) {
+ long newLatestRuntimeElapsedMillis, int backoffAttempt,
+ long lastSuccessfulRunTime, long lastFailedRunTime) {
this(rescheduling.job, rescheduling.getUid(),
rescheduling.getSourcePackageName(), rescheduling.getSourceUserId(),
rescheduling.getSourceTag(), backoffAttempt, newEarliestRuntimeElapsedMillis,
- newLatestRuntimeElapsedMillis);
+ newLatestRuntimeElapsedMillis,
+ lastSuccessfulRunTime, lastFailedRunTime);
}
/**
@@ -316,7 +336,8 @@ public final class JobStatus {
elapsedNow + job.getMaxExecutionDelayMillis() : NO_LATEST_RUNTIME;
}
return new JobStatus(job, callingUid, sourcePackageName, sourceUserId, tag, 0,
- earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis);
+ earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis,
+ 0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */);
}
public void enqueueWorkLocked(IActivityManager am, JobWorkItem work) {
@@ -669,6 +690,14 @@ public final class JobStatus {
trackingControllers |= which;
}
+ public long getLastSuccessfulRunTime() {
+ return mLastSuccessfulRunTime;
+ }
+
+ public long getLastFailedRunTime() {
+ return mLastFailedRunTime;
+ }
+
public boolean shouldDump(int filterUid) {
return filterUid == -1 || UserHandle.getAppId(getUid()) == filterUid
|| UserHandle.getAppId(getSourceUid()) == filterUid;
@@ -1041,5 +1070,17 @@ public final class JobStatus {
if (numFailures != 0) {
pw.print(prefix); pw.print("Num failures: "); pw.println(numFailures);
}
+ final Time t = new Time();
+ final String format = "%Y-%m-%d %H:%M:%S";
+ if (mLastSuccessfulRunTime != 0) {
+ pw.print(prefix); pw.print("Last successful run: ");
+ t.set(mLastSuccessfulRunTime);
+ pw.println(t.format(format));
+ }
+ if (mLastFailedRunTime != 0) {
+ pw.print(prefix); pw.print("Last failed run: ");
+ t.set(mLastFailedRunTime);
+ pw.println(t.format(format));
+ }
}
}
diff --git a/services/core/java/com/android/server/media/AudioPlaybackMonitor.java b/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
index c6dc11c53393..f6f767653c83 100644
--- a/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
+++ b/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
@@ -31,17 +31,22 @@ import android.util.SparseArray;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
- * Monitors changes in audio playback and notify the newly started audio playback through the
- * {@link OnAudioPlaybackStartedListener}.
+ * Monitors changes in audio playback, and notify the newly started audio playback through the
+ * {@link OnAudioPlaybackStartedListener} and the activeness change through the
+ * {@link OnAudioPlaybackActiveStateListener}.
*/
class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
private static boolean DEBUG = MediaSessionService.DEBUG;
private static String TAG = "AudioPlaybackMonitor";
+ private static AudioPlaybackMonitor sInstance;
+
/**
* Called when audio playback is started for a given UID.
*/
@@ -49,22 +54,36 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
void onAudioPlaybackStarted(int uid);
}
+ /**
+ * Called when audio player state is changed.
+ */
+ interface OnAudioPlayerActiveStateChangedListener {
+ void onAudioPlayerActiveStateChanged(int uid, boolean active);
+ }
+
private final Object mLock = new Object();
private final Context mContext;
- private final OnAudioPlaybackStartedListener mListener;
-
- private Set<Integer> mActiveAudioPlaybackPlayerInterfaceIds = new HashSet<>();
- private Set<Integer> mActiveAudioPlaybackClientUids = new HashSet<>();
+ private final List<OnAudioPlaybackStartedListener> mAudioPlaybackStartedListeners
+ = new ArrayList<>();
+ private final List<OnAudioPlayerActiveStateChangedListener>
+ mAudioPlayerActiveStateChangedListeners = new ArrayList<>();
+ private final Map<Integer, Integer> mAudioPlaybackStates = new HashMap<>();
+ private final Set<Integer> mActiveAudioPlaybackClientUids = new HashSet<>();
// Sorted array of UIDs that had active audio playback. (i.e. playing an audio/video)
// The UID whose audio playback becomes active at the last comes first.
// TODO(b/35278867): Find and use unique identifier for apps because apps may share the UID.
private final IntArray mSortedAudioPlaybackClientUids = new IntArray();
- AudioPlaybackMonitor(Context context, IAudioService audioService,
- OnAudioPlaybackStartedListener listener) {
+ static AudioPlaybackMonitor getInstance(Context context, IAudioService audioService) {
+ if (sInstance == null) {
+ sInstance = new AudioPlaybackMonitor(context, audioService);
+ }
+ return sInstance;
+ }
+
+ private AudioPlaybackMonitor(Context context, IAudioService audioService) {
mContext = context;
- mListener = listener;
try {
audioService.registerPlaybackCallback(this);
} catch (RemoteException e) {
@@ -84,9 +103,12 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
public void dispatchPlaybackConfigChange(List<AudioPlaybackConfiguration> configs) {
final long token = Binder.clearCallingIdentity();
try {
- Set<Integer> newActiveAudioPlaybackPlayerInterfaceIds = new HashSet<>();
List<Integer> newActiveAudioPlaybackClientUids = new ArrayList<>();
+ List<OnAudioPlayerActiveStateChangedListener> audioPlayerActiveStateChangedListeners;
+ List<OnAudioPlaybackStartedListener> audioPlaybackStartedListeners;
synchronized (mLock) {
+ // Update mActiveAudioPlaybackClientUids and mSortedAudioPlaybackClientUids,
+ // and find newly activated audio playbacks.
mActiveAudioPlaybackClientUids.clear();
for (AudioPlaybackConfiguration config : configs) {
// Ignore inactive (i.e. not playing) or PLAYER_TYPE_JAM_SOUNDPOOL
@@ -94,16 +116,14 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
// playback.
// Note that we shouldn't ignore PLAYER_TYPE_UNKNOWN because it might be OEM
// specific audio/video players.
- if (!config.isActive()
- || config.getPlayerType()
+ if (!config.isActive() || config.getPlayerType()
== AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL) {
continue;
}
- mActiveAudioPlaybackClientUids.add(config.getClientUid());
- newActiveAudioPlaybackPlayerInterfaceIds.add(config.getPlayerInterfaceId());
- if (!mActiveAudioPlaybackPlayerInterfaceIds.contains(
- config.getPlayerInterfaceId())) {
+ mActiveAudioPlaybackClientUids.add(config.getClientUid());
+ Integer oldState = mAudioPlaybackStates.get(config.getPlayerInterfaceId());
+ if (!isActiveState(oldState)) {
if (DEBUG) {
Log.d(TAG, "Found a new active media playback. " +
AudioPlaybackConfiguration.toLogFriendlyString(config));
@@ -120,11 +140,32 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
mSortedAudioPlaybackClientUids.add(0, config.getClientUid());
}
}
- mActiveAudioPlaybackPlayerInterfaceIds.clear();
- mActiveAudioPlaybackPlayerInterfaceIds = newActiveAudioPlaybackPlayerInterfaceIds;
+ audioPlayerActiveStateChangedListeners = new ArrayList<>(
+ mAudioPlayerActiveStateChangedListeners);
+ audioPlaybackStartedListeners = new ArrayList<>(mAudioPlaybackStartedListeners);
}
+ // Notify the change of audio playback states.
+ for (AudioPlaybackConfiguration config : configs) {
+ boolean wasActive = isActiveState(
+ mAudioPlaybackStates.get(config.getPlayerInterfaceId()));
+ boolean isActive = config.isActive();
+ if (wasActive != isActive) {
+ for (OnAudioPlayerActiveStateChangedListener listener
+ : audioPlayerActiveStateChangedListeners) {
+ listener.onAudioPlayerActiveStateChanged(config.getClientUid(),
+ isActive);
+ }
+ }
+ }
+ // Notify the start of audio playback
for (int uid : newActiveAudioPlaybackClientUids) {
- mListener.onAudioPlaybackStarted(uid);
+ for (OnAudioPlaybackStartedListener listener : audioPlaybackStartedListeners) {
+ listener.onAudioPlaybackStarted(uid);
+ }
+ }
+ mAudioPlaybackStates.clear();
+ for (AudioPlaybackConfiguration config : configs) {
+ mAudioPlaybackStates.put(config.getPlayerInterfaceId(), config.getPlayerState());
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -132,6 +173,44 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
}
/**
+ * Registers OnAudioPlaybackStartedListener.
+ */
+ public void registerOnAudioPlaybackStartedListener(OnAudioPlaybackStartedListener listener) {
+ synchronized (mLock) {
+ mAudioPlaybackStartedListeners.add(listener);
+ }
+ }
+
+ /**
+ * Unregisters OnAudioPlaybackStartedListener.
+ */
+ public void unregisterOnAudioPlaybackStartedListener(OnAudioPlaybackStartedListener listener) {
+ synchronized (mLock) {
+ mAudioPlaybackStartedListeners.remove(listener);
+ }
+ }
+
+ /**
+ * Registers OnAudioPlayerActiveStateChangedListener.
+ */
+ public void registerOnAudioPlayerActiveStateChangedListener(
+ OnAudioPlayerActiveStateChangedListener listener) {
+ synchronized (mLock) {
+ mAudioPlayerActiveStateChangedListeners.add(listener);
+ }
+ }
+
+ /**
+ * Unregisters OnAudioPlayerActiveStateChangedListener.
+ */
+ public void unregisterOnAudioPlayerActiveStateChangedListener(
+ OnAudioPlayerActiveStateChangedListener listener) {
+ synchronized (mLock) {
+ mAudioPlayerActiveStateChangedListeners.remove(listener);
+ }
+ }
+
+ /**
* Returns the sorted list of UIDs that have had active audio playback. (i.e. playing an
* audio/video) The UID whose audio playback becomes active at the last comes first.
*/
@@ -167,7 +246,8 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
if (mSortedAudioPlaybackClientUids.get(i) == mediaButtonSessionUid) {
break;
}
- if (userId == UserHandle.getUserId(mSortedAudioPlaybackClientUids.get(i))) {
+ int uid = mSortedAudioPlaybackClientUids.get(i);
+ if (userId == UserHandle.getUserId(uid) && !isPlaybackActive(uid)) {
// Clean up unnecessary UIDs.
// It doesn't need to be managed profile aware because it's just to prevent
// the list from increasing indefinitely. The media button session updating
@@ -198,4 +278,8 @@ class AudioPlaybackMonitor extends IPlaybackConfigDispatcher.Stub {
}
}
}
+
+ private boolean isActiveState(Integer state) {
+ return state != null && state.equals(AudioPlaybackConfiguration.PLAYER_STATE_STARTED);
+ }
}
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index d1fa5efe4dc1..5ba8f4853407 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -18,6 +18,7 @@ package com.android.server.media;
import com.android.internal.util.DumpUtils;
import com.android.server.Watchdog;
+import com.android.server.media.AudioPlaybackMonitor.OnAudioPlayerActiveStateChangedListener;
import android.Manifest;
import android.app.ActivityManager;
@@ -26,7 +27,10 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.media.AudioRoutesInfo;
import android.media.AudioSystem;
+import android.media.IAudioRoutesObserver;
+import android.media.IAudioService;
import android.media.IMediaRouterClient;
import android.media.IMediaRouterService;
import android.media.MediaRouter;
@@ -39,9 +43,12 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.IntArray;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
@@ -89,10 +96,54 @@ public final class MediaRouterService extends IMediaRouterService.Stub
private final ArrayMap<IBinder, ClientRecord> mAllClientRecords =
new ArrayMap<IBinder, ClientRecord>();
private int mCurrentUserId = -1;
+ private boolean mHasBluetoothRoute = false;
+ private final IAudioService mAudioService;
+ private final AudioPlaybackMonitor mAudioPlaybackMonitor;
public MediaRouterService(Context context) {
mContext = context;
Watchdog.getInstance().addMonitor(this);
+
+ mAudioService = IAudioService.Stub.asInterface(
+ ServiceManager.getService(Context.AUDIO_SERVICE));
+
+ mAudioPlaybackMonitor = AudioPlaybackMonitor.getInstance(context, mAudioService);
+ mAudioPlaybackMonitor.registerOnAudioPlayerActiveStateChangedListener(
+ new AudioPlaybackMonitor.OnAudioPlayerActiveStateChangedListener() {
+ @Override
+ public void onAudioPlayerActiveStateChanged(int uid, boolean active) {
+ if (active) {
+ restoreRoute(uid);
+ } else {
+ IntArray sortedAudioPlaybackClientUids =
+ mAudioPlaybackMonitor.getSortedAudioPlaybackClientUids();
+ boolean restored = false;
+ for (int i = 0; i < sortedAudioPlaybackClientUids.size(); i++) {
+ if (mAudioPlaybackMonitor.isPlaybackActive(
+ sortedAudioPlaybackClientUids.get(i))) {
+ restoreRoute(sortedAudioPlaybackClientUids.get(i));
+ restored = true;
+ break;
+ }
+ }
+ if (!restored) {
+ restoreBluetoothA2dp();
+ }
+ }
+ }
+ });
+ AudioRoutesInfo audioRoutes = null;
+ try {
+ audioRoutes = mAudioService.startWatchingRoutes(new IAudioRoutesObserver.Stub() {
+ @Override
+ public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
+ mHasBluetoothRoute = newRoutes.bluetoothName != null;
+ }
+ });
+ } catch (RemoteException e) {
+ Slog.w(TAG, "RemoteException in the audio service.");
+ }
+ mHasBluetoothRoute = (audioRoutes != null && audioRoutes.bluetoothName != null);
}
public void systemRunning() {
@@ -135,7 +186,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- registerClientLocked(client, pid, packageName, resolvedUserId, trusted);
+ registerClientLocked(client, uid, pid, packageName, resolvedUserId, trusted);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -178,6 +229,23 @@ public final class MediaRouterService extends IMediaRouterService.Stub
// Binder call
@Override
+ public boolean isPlaybackActive(IMediaRouterClient client) {
+ if (client == null) {
+ throw new IllegalArgumentException("client must not be null");
+ }
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ return isPlaybackActiveLocked(client);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ // Binder call
+ @Override
public void setDiscoveryRequest(IMediaRouterClient client,
int routeTypes, boolean activeScan) {
if (client == null) {
@@ -276,6 +344,36 @@ public final class MediaRouterService extends IMediaRouterService.Stub
}
}
+ void restoreBluetoothA2dp() {
+ try {
+ mAudioService.setBluetoothA2dpOn(mHasBluetoothRoute);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "RemoteException while calling setBluetoothA2dpOn.");
+ }
+ }
+
+ void restoreRoute(int uid) {
+ ClientRecord clientRecord = null;
+ UserRecord userRecord = mUserRecords.get(UserHandle.getUserId(uid));
+ if (userRecord.mClientRecords != null) {
+ for (ClientRecord cr : userRecord.mClientRecords) {
+ if (validatePackageName(uid, cr.mPackageName)) {
+ clientRecord = cr;
+ break;
+ }
+ }
+ }
+ if (clientRecord != null) {
+ try {
+ clientRecord.mClient.onRestoreRoute();
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onRestoreRoute. Client probably died.");
+ }
+ } else {
+ restoreBluetoothA2dp();
+ }
+ }
+
void switchUser() {
synchronized (mLock) {
int userId = ActivityManager.getCurrentUser();
@@ -304,7 +402,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub
}
private void registerClientLocked(IMediaRouterClient client,
- int pid, String packageName, int userId, boolean trusted) {
+ int uid, int pid, String packageName, int userId, boolean trusted) {
final IBinder binder = client.asBinder();
ClientRecord clientRecord = mAllClientRecords.get(binder);
if (clientRecord == null) {
@@ -314,7 +412,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub
userRecord = new UserRecord(userId);
newUser = true;
}
- clientRecord = new ClientRecord(userRecord, client, pid, packageName, trusted);
+ clientRecord = new ClientRecord(userRecord, client, uid, pid, packageName, trusted);
try {
binder.linkToDeath(clientRecord, 0);
} catch (RemoteException ex) {
@@ -350,6 +448,14 @@ public final class MediaRouterService extends IMediaRouterService.Stub
return null;
}
+ private boolean isPlaybackActiveLocked(IMediaRouterClient client) {
+ ClientRecord clientRecord = mAllClientRecords.get(client.asBinder());
+ if (clientRecord != null) {
+ return mAudioPlaybackMonitor.isPlaybackActive(clientRecord.mUid);
+ }
+ return false;
+ }
+
private void setDiscoveryRequestLocked(IMediaRouterClient client,
int routeTypes, boolean activeScan) {
final IBinder binder = client.asBinder();
@@ -489,6 +595,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub
final class ClientRecord implements DeathRecipient {
public final UserRecord mUserRecord;
public final IMediaRouterClient mClient;
+ public final int mUid;
public final int mPid;
public final String mPackageName;
public final boolean mTrusted;
@@ -498,9 +605,10 @@ public final class MediaRouterService extends IMediaRouterService.Stub
public String mSelectedRouteId;
public ClientRecord(UserRecord userRecord, IMediaRouterClient client,
- int pid, String packageName, boolean trusted) {
+ int uid, int pid, String packageName, boolean trusted) {
mUserRecord = userRecord;
mClient = client;
+ mUid = uid;
mPid = pid;
mPackageName = packageName;
mTrusted = trusted;
@@ -997,7 +1105,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub
try {
mTempClients.get(i).onStateChanged();
} catch (RemoteException ex) {
- // ignore errors, client probably died
+ Slog.w(TAG, "Failed to call onStateChanged. Client probably died.");
}
}
} finally {
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 67920edcf56a..a0487f93981b 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -136,19 +136,20 @@ public class MediaSessionService extends SystemService implements Monitor {
mKeyguardManager =
(KeyguardManager) getContext().getSystemService(Context.KEYGUARD_SERVICE);
mAudioService = getAudioService();
- mAudioPlaybackMonitor = new AudioPlaybackMonitor(getContext(), mAudioService,
+ mAudioPlaybackMonitor = AudioPlaybackMonitor.getInstance(getContext(), mAudioService);
+ mAudioPlaybackMonitor.registerOnAudioPlaybackStartedListener(
new AudioPlaybackMonitor.OnAudioPlaybackStartedListener() {
- @Override
- public void onAudioPlaybackStarted(int uid) {
- synchronized (mLock) {
- FullUserRecord user =
- getFullUserRecordLocked(UserHandle.getUserId(uid));
- if (user != null) {
- user.mPriorityStack.updateMediaButtonSessionIfNeeded();
- }
- }
+ @Override
+ public void onAudioPlaybackStarted(int uid) {
+ synchronized (mLock) {
+ FullUserRecord user =
+ getFullUserRecordLocked(UserHandle.getUserId(uid));
+ if (user != null) {
+ user.mPriorityStack.updateMediaButtonSessionIfNeeded();
}
- });
+ }
+ }
+ });
mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class);
mContentResolver = getContext().getContentResolver();
mSettingsObserver = new SettingsObserver();
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 75190f3e3e89..15e32ff6469e 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -762,7 +762,9 @@ public class ZenModeHelper {
for (int usage : AudioAttributes.SDK_USAGES) {
final int suppressionBehavior = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage);
- if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_NOTIFICATION) {
+ if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_NEVER) {
+ applyRestrictions(false /*mute*/, usage);
+ } else if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_NOTIFICATION) {
applyRestrictions(muteNotifications || muteEverything, usage);
} else if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_CALL) {
applyRestrictions(muteCalls || muteEverything, usage);
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 52d471629cda..0c854c28f761 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -58,6 +58,7 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE
import static android.content.pm.PackageManager.INSTALL_FORWARD_LOCK;
import static android.content.pm.PackageManager.INSTALL_INTERNAL;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
+import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
@@ -5058,9 +5059,6 @@ public class PackageManagerService extends IPackageManager.Stub
@Override
public String getPermissionControllerPackageName() {
- if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
- throw new SecurityException("Instant applications don't have access to this method");
- }
synchronized (mPackages) {
return mRequiredInstallerPackage;
}
@@ -10489,8 +10487,9 @@ public class PackageManagerService extends IPackageManager.Stub
if ((scanFlags & SCAN_NEW_INSTALL) == 0) {
if ((scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) != 0) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "derivePackageAbi");
- derivePackageAbi(
- pkg, scanFile, cpuAbiOverride, true /*extractLibs*/, mAppLib32InstallDir);
+ final boolean extractNativeLibs = !pkg.isLibrary();
+ derivePackageAbi(pkg, scanFile, cpuAbiOverride, extractNativeLibs,
+ mAppLib32InstallDir);
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
// Some system apps still use directory structure for native libraries
@@ -11520,6 +11519,12 @@ public class PackageManagerService extends IPackageManager.Stub
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
+ // Shared library native code should be in the APK zip aligned
+ if (abi32 >= 0 && pkg.isLibrary() && extractLibs) {
+ throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
+ "Shared library native lib extraction not supported");
+ }
+
maybeThrowExceptionForMultiArchCopy(
"Error unpackaging 32 bit native libs for multiarch app.", abi32);
@@ -11540,6 +11545,11 @@ public class PackageManagerService extends IPackageManager.Stub
"Error unpackaging 64 bit native libs for multiarch app.", abi64);
if (abi64 >= 0) {
+ // Shared library native libs should be in the APK zip aligned
+ if (extractLibs && pkg.isLibrary()) {
+ throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
+ "Shared library native lib extraction not supported");
+ }
pkg.applicationInfo.primaryCpuAbi = Build.SUPPORTED_64_BIT_ABIS[abi64];
}
@@ -11556,7 +11566,6 @@ public class PackageManagerService extends IPackageManager.Stub
pkg.applicationInfo.primaryCpuAbi = abi;
}
}
-
} else {
String[] abiList = (cpuAbiOverride != null) ?
new String[] { cpuAbiOverride } : Build.SUPPORTED_ABIS;
@@ -11589,6 +11598,11 @@ public class PackageManagerService extends IPackageManager.Stub
}
if (copyRet >= 0) {
+ // Shared libraries that have native libs must be multi-architecture
+ if (pkg.isLibrary()) {
+ throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
+ "Shared library with native libs must be multiarch");
+ }
pkg.applicationInfo.primaryCpuAbi = abiList[copyRet];
} else if (copyRet == PackageManager.NO_NATIVE_LIBRARIES && cpuAbiOverride != null) {
pkg.applicationInfo.primaryCpuAbi = cpuAbiOverride;
@@ -18143,8 +18157,9 @@ public class PackageManagerService extends IPackageManager.Stub
try {
String abiOverride = (TextUtils.isEmpty(pkg.cpuAbiOverride) ?
args.abiOverride : pkg.cpuAbiOverride);
+ final boolean extractNativeLibs = !pkg.isLibrary();
derivePackageAbi(pkg, new File(pkg.codePath), abiOverride,
- true /*extractLibs*/, mAppLib32InstallDir);
+ extractNativeLibs, mAppLib32InstallDir);
} catch (PackageManagerException pme) {
Slog.e(TAG, "Error deriving application ABI", pme);
res.setError(INSTALL_FAILED_INTERNAL_ERROR, "Error deriving application ABI");
diff --git a/services/core/java/com/android/server/radio/RadioService.java b/services/core/java/com/android/server/radio/RadioService.java
index 227ea6bdef9b..87a6fc1ea5ce 100644
--- a/services/core/java/com/android/server/radio/RadioService.java
+++ b/services/core/java/com/android/server/radio/RadioService.java
@@ -98,7 +98,6 @@ public class RadioService extends SystemService {
throw new IllegalArgumentException("Callback must not be empty");
}
synchronized (mLock) {
- // TODO(b/36863239): add death monitoring for binder
return nativeOpenTuner(mNativeContext, moduleId, bandConfig, withAudio, callback);
}
}
diff --git a/services/core/java/com/android/server/radio/Tuner.java b/services/core/java/com/android/server/radio/Tuner.java
index 38f16d536cb1..c4e4657d4267 100644
--- a/services/core/java/com/android/server/radio/Tuner.java
+++ b/services/core/java/com/android/server/radio/Tuner.java
@@ -20,6 +20,8 @@ import android.annotation.NonNull;
import android.hardware.radio.ITuner;
import android.hardware.radio.ITunerCallback;
import android.hardware.radio.RadioManager;
+import android.os.IBinder;
+import android.os.RemoteException;
import android.util.Slog;
import java.util.List;
@@ -33,18 +35,28 @@ class Tuner extends ITuner.Stub {
*/
private final long mNativeContext;
- @NonNull private final TunerCallback mTunerCallback;
private final Object mLock = new Object();
+ @NonNull private final TunerCallback mTunerCallback;
+ @NonNull private final ITunerCallback mClientCallback;
+ @NonNull private final IBinder.DeathRecipient mDeathRecipient;
+
private boolean mIsClosed = false;
private boolean mIsMuted = false;
private int mRegion; // TODO(b/62710330): find better solution to handle regions
private final boolean mWithAudio;
Tuner(@NonNull ITunerCallback clientCallback, int halRev, int region, boolean withAudio) {
+ mClientCallback = clientCallback;
mTunerCallback = new TunerCallback(this, clientCallback, halRev);
mRegion = region;
mWithAudio = withAudio;
- mNativeContext = nativeInit(halRev);
+ mNativeContext = nativeInit(halRev, withAudio);
+ mDeathRecipient = this::close;
+ try {
+ mClientCallback.asBinder().linkToDeath(mDeathRecipient, 0);
+ } catch (RemoteException ex) {
+ close();
+ }
}
@Override
@@ -53,7 +65,7 @@ class Tuner extends ITuner.Stub {
super.finalize();
}
- private native long nativeInit(int halRev);
+ private native long nativeInit(int halRev, boolean withAudio);
private native void nativeFinalize(long nativeContext);
private native void nativeClose(long nativeContext);
@@ -80,12 +92,18 @@ class Tuner extends ITuner.Stub {
public void close() {
synchronized (mLock) {
if (mIsClosed) return;
+ mIsClosed = true;
mTunerCallback.detach();
+ mClientCallback.asBinder().unlinkToDeath(mDeathRecipient, 0);
nativeClose(mNativeContext);
- mIsClosed = true;
}
}
+ @Override
+ public boolean isClosed() {
+ return mIsClosed;
+ }
+
private void checkNotClosedLocked() {
if (mIsClosed) {
throw new IllegalStateException("Tuner is closed, no further operations are allowed");
@@ -122,7 +140,7 @@ class Tuner extends ITuner.Stub {
if (mIsMuted == mute) return;
mIsMuted = mute;
- // TODO(b/34348946): notifify audio policy manager of media activity on radio audio
+ // TODO(b/62713378): notifify audio policy manager of media activity on radio audio
// device. This task is pulled directly from previous implementation of native service.
}
}
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 2d7fc6883292..6b514552b227 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -427,8 +427,9 @@ public class DockedStackDividerController implements DimLayerUser {
inputMethodManagerInternal.hideCurrentInputMethod();
mImeHideRequested = true;
}
+ return;
}
- setMinimizedDockedStack(false, false /* animate */);
+ setMinimizedDockedStack(false /* minimizedDock */, false /* animate */);
}
/**
diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk
index 3c5779e3a670..fdcf9df50426 100644
--- a/services/core/jni/Android.mk
+++ b/services/core/jni/Android.mk
@@ -56,6 +56,7 @@ LOCAL_C_INCLUDES += \
LOCAL_SHARED_LIBRARIES += \
libandroid_runtime \
libandroidfw \
+ libaudioclient \
libbase \
libappfuse \
libbinder \
diff --git a/services/core/jni/NativeCallbackThread.cpp b/services/core/jni/NativeCallbackThread.cpp
index 7d668e3183a7..0c84e6dbf03b 100644
--- a/services/core/jni/NativeCallbackThread.cpp
+++ b/services/core/jni/NativeCallbackThread.cpp
@@ -107,10 +107,15 @@ void NativeCallbackThread::stop() {
mQueueCond.signal();
}
- auto ret = pthread_join(mThread, nullptr);
- ALOGE_IF(ret != 0, "Couldn't join thread: %d", ret);
-
- ALOGD("Stopped native callback thread %p", this);
+ if (pthread_self() == mThread) {
+ // you can't self-join a thread, but it's ok when calling from our sub-task
+ ALOGD("About to stop native callback thread %p", this);
+ } else {
+ auto ret = pthread_join(mThread, nullptr);
+ ALOGE_IF(ret != 0, "Couldn't join thread: %d", ret);
+
+ ALOGD("Stopped native callback thread %p", this);
+ }
}
} // namespace android
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index c722629a28f4..86c5e9927617 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -157,8 +157,10 @@ static void nativeReleaseSuspendBlocker(JNIEnv *env, jclass /* clazz */, jstring
static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
std::lock_guard<std::mutex> lock(gPowerHalMutex);
if (getPowerHal()) {
- String8 err("Excessive delay in setInteractive(%s) while turning screen %s");
- ALOGD_IF_SLOW(20, String8::format(err, enable ? "true" : "false", enable ? "on" : "off"));
+ String8 err = String8::format(
+ "Excessive delay in setInteractive(%s) while turning screen %s",
+ enable ? "true" : "false", enable ? "on" : "off");
+ ALOGD_IF_SLOW(20, err);
Return<void> ret = gPowerHal->setInteractive(enable);
processReturn(ret, "setInteractive");
}
diff --git a/services/core/jni/com_android_server_radio_Tuner.cpp b/services/core/jni/com_android_server_radio_Tuner.cpp
index 2819e1237037..f9418e4c108e 100644
--- a/services/core/jni/com_android_server_radio_Tuner.cpp
+++ b/services/core/jni/com_android_server_radio_Tuner.cpp
@@ -23,7 +23,9 @@
#include "com_android_server_radio_TunerCallback.h"
#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
+#include <binder/IPCThreadState.h>
#include <core_jni_helpers.h>
+#include <media/AudioSystem.h>
#include <utils/Log.h>
#include <JNIHelp.h>
@@ -33,6 +35,7 @@ namespace radio {
namespace Tuner {
using hardware::Return;
+using hardware::hidl_death_recipient;
using hardware::hidl_vec;
namespace V1_0 = hardware::broadcastradio::V1_0;
@@ -59,12 +62,26 @@ static struct {
} Tuner;
} gjni;
+static const char* const kAudioDeviceName = "Radio tuner source";
+
+class HalDeathRecipient : public hidl_death_recipient {
+ wp<V1_1::ITunerCallback> mTunerCallback;
+
+public:
+ HalDeathRecipient(wp<V1_1::ITunerCallback> tunerCallback):mTunerCallback(tunerCallback) {}
+
+ virtual void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who);
+};
+
struct TunerContext {
TunerContext() {}
+ bool mIsClosed = false;
HalRevision mHalRev;
+ bool mWithAudio;
sp<V1_0::ITuner> mHalTuner;
sp<V1_1::ITuner> mHalTuner11;
+ sp<HalDeathRecipient> mHalDeathRecipient;
private:
DISALLOW_COPY_AND_ASSIGN(TunerContext);
@@ -83,12 +100,13 @@ static TunerContext& getNativeContext(JNIEnv *env, JavaRef<jobject> const &jTune
return getNativeContext(env->GetLongField(jTuner.get(), gjni.Tuner.nativeContext));
}
-static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev) {
+static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev, bool withAudio) {
ALOGV("nativeInit()");
AutoMutex _l(gContextMutex);
auto ctx = new TunerContext();
ctx->mHalRev = static_cast<HalRevision>(halRev);
+ ctx->mWithAudio = withAudio;
static_assert(sizeof(jlong) >= sizeof(ctx), "jlong is smaller than a pointer");
return reinterpret_cast<jlong>(ctx);
@@ -102,6 +120,28 @@ static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
delete ctx;
}
+void HalDeathRecipient::serviceDied(uint64_t cookie __unused,
+ const wp<hidl::base::V1_0::IBase>& who __unused) {
+ ALOGW("HAL Tuner died unexpectedly");
+
+ auto tunerCallback = mTunerCallback.promote();
+ if (tunerCallback == nullptr) return;
+
+ tunerCallback->hardwareFailure();
+}
+
+// TODO(b/62713378): implement support for multiple tuners open at the same time
+static void notifyAudioService(TunerContext& ctx, bool connected) {
+ if (!ctx.mWithAudio) return;
+
+ ALOGD("Notifying AudioService about new state: %d", connected);
+ auto token = IPCThreadState::self()->clearCallingIdentity();
+ AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_IN_FM_TUNER,
+ connected ? AUDIO_POLICY_DEVICE_STATE_AVAILABLE : AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
+ nullptr, kAudioDeviceName);
+ IPCThreadState::self()->restoreCallingIdentity(token);
+}
+
void setHalTuner(JNIEnv *env, JavaRef<jobject> const &jTuner, sp<V1_0::ITuner> halTuner) {
ALOGV("setHalTuner(%p)", halTuner.get());
ALOGE_IF(halTuner == nullptr, "HAL tuner is a nullptr");
@@ -109,10 +149,25 @@ void setHalTuner(JNIEnv *env, JavaRef<jobject> const &jTuner, sp<V1_0::ITuner> h
AutoMutex _l(gContextMutex);
auto& ctx = getNativeContext(env, jTuner);
+ if (ctx.mIsClosed) {
+ ALOGI("Tuner was closed during initialization");
+ // dropping the last reference will close HAL tuner
+ return;
+ }
+ if (ctx.mHalTuner != nullptr) {
+ ALOGE("HAL tuner is already set.");
+ return;
+ }
+
ctx.mHalTuner = halTuner;
ctx.mHalTuner11 = V1_1::ITuner::castFrom(halTuner).withDefault(nullptr);
ALOGW_IF(ctx.mHalRev >= HalRevision::V1_1 && ctx.mHalTuner11 == nullptr,
"Provided tuner does not implement 1.1 HAL");
+
+ ctx.mHalDeathRecipient = new HalDeathRecipient(getNativeCallback(env, jTuner));
+ halTuner->linkToDeath(ctx.mHalDeathRecipient, 0);
+
+ notifyAudioService(ctx, true);
}
sp<V1_0::ITuner> getHalTuner(jlong nativeContext) {
@@ -139,8 +194,21 @@ Region getRegion(JNIEnv *env, jobject obj) {
static void nativeClose(JNIEnv *env, jobject obj, jlong nativeContext) {
AutoMutex _l(gContextMutex);
auto& ctx = getNativeContext(nativeContext);
- if (ctx.mHalTuner == nullptr) return;
+ if (ctx.mIsClosed) return;
+ ctx.mIsClosed = true;
+
+ if (ctx.mHalTuner == nullptr) {
+ ALOGI("Tuner closed during initialization");
+ return;
+ }
+
ALOGI("Closing tuner %p", ctx.mHalTuner.get());
+
+ notifyAudioService(ctx, false);
+
+ ctx.mHalTuner->unlinkToDeath(ctx.mHalDeathRecipient);
+ ctx.mHalDeathRecipient = nullptr;
+
ctx.mHalTuner11 = nullptr;
ctx.mHalTuner = nullptr;
}
@@ -334,7 +402,7 @@ static bool nativeIsAntennaConnected(JNIEnv *env, jobject obj, jlong nativeConte
}
static const JNINativeMethod gTunerMethods[] = {
- { "nativeInit", "(I)J", (void*)nativeInit },
+ { "nativeInit", "(IZ)J", (void*)nativeInit },
{ "nativeFinalize", "(J)V", (void*)nativeFinalize },
{ "nativeClose", "(J)V", (void*)nativeClose },
{ "nativeSetConfiguration", "(JLandroid/hardware/radio/RadioManager$BandConfig;)V",
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index d5e19931460b..fbcf20b584d0 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -189,6 +189,8 @@ public final class SystemServer {
"com.google.android.clockwork.connectivity.WearConnectivityService";
private static final String WEAR_DISPLAY_SERVICE_CLASS =
"com.google.android.clockwork.display.WearDisplayService";
+ private static final String WEAR_LEFTY_SERVICE_CLASS =
+ "com.google.android.clockwork.lefty.WearLeftyService";
private static final String WEAR_TIME_SERVICE_CLASS =
"com.google.android.clockwork.time.WearTimeService";
private static final String ACCOUNT_SERVICE_CLASS =
@@ -703,6 +705,7 @@ public final class SystemServer {
false);
// TODO(b/36863239): Remove when transitioned from native service.
boolean enableRadioService = SystemProperties.getBoolean("config.enable_java_radio", false);
+ boolean enableLeftyService = SystemProperties.getBoolean("config.enable_lefty", false);
boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
@@ -1498,6 +1501,12 @@ public final class SystemServer {
mSystemServiceManager.startService(WEAR_DISPLAY_SERVICE_CLASS);
mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS);
traceEnd();
+
+ if (enableLeftyService) {
+ traceBeginAndSlog("StartWearLeftyService");
+ mSystemServiceManager.startService(WEAR_LEFTY_SERVICE_CLASS);
+ traceEnd();
+ }
}
}
diff --git a/services/tests/notification/Android.mk b/services/tests/notification/Android.mk
index 940db792489e..0ffe6e4db6b8 100644
--- a/services/tests/notification/Android.mk
+++ b/services/tests/notification/Android.mk
@@ -29,6 +29,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
LOCAL_JAVA_LIBRARIES := android.test.runner
LOCAL_JACK_FLAGS := --multi-dex native
+LOCAL_DX_FLAGS := --multi-dex
LOCAL_PACKAGE_NAME := FrameworksNotificationTests
LOCAL_COMPATIBILITY_SUITE := device-tests
@@ -52,9 +53,4 @@ LOCAL_JNI_SHARED_LIBRARIES := \
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-# Code coverage puts us over the dex limit, so enable multi-dex for coverage-enabled builds
-ifeq (true,$(EMMA_INSTRUMENT))
-LOCAL_JACK_FLAGS := --multi-dex native
-endif # EMMA_INSTRUMENT_STATIC
-
include $(BUILD_PACKAGE)
diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
index 33e1a1652b22..689c8f7e6e01 100644
--- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
@@ -206,7 +206,8 @@ public class JobStoreTest extends AndroidTestCase {
invalidLateRuntimeElapsedMillis - TWO_HOURS; // Early is (late - period).
final JobStatus js = new JobStatus(b.build(), SOME_UID, "somePackage",
0 /* sourceUserId */, "someTag",
- invalidEarlyRuntimeElapsedMillis, invalidLateRuntimeElapsedMillis);
+ invalidEarlyRuntimeElapsedMillis, invalidLateRuntimeElapsedMillis,
+ 0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */);
mTaskStoreUnderTest.add(js);
Thread.sleep(IO_WAIT);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 56bc31506e28..8be30d208385 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -1471,6 +1471,30 @@ public class CarrierConfigManager {
public static final String IMSI_KEY_EXPIRATION_DAYS_TIME_INT =
"imsi_key_expiration_days_time_int";
+ /**
+ * List of operators considered non-roaming which won't show roaming icon.
+ * <p>
+ * Can use mcc or mcc+mnc as item. For example, 302 or 21407.
+ * If operators, 21404 and 21407, make roaming agreements, users of 21404 should not see
+ * the roaming icon as using 21407 network.
+ * @hide
+ */
+ public static final String KEY_NON_ROAMING_OPERATOR_STRING_ARRAY =
+ "non_roaming_operator_string_array";
+
+ /**
+ * List of operators considered roaming with the roaming icon.
+ * <p>
+ * Can use mcc or mcc+mnc as item. For example, 302 or 21407.
+ * If operators, 21404 and 21407, make roaming agreements, users of 21404 should see
+ * the roaming icon as using 21407 network.
+ * <p>
+ * A match on this supersedes a match on {@link #KEY_NON_ROAMING_OPERATOR_STRING_ARRAY}.
+ * @hide
+ */
+ public static final String KEY_ROAMING_OPERATOR_STRING_ARRAY =
+ "roaming_operator_string_array";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -1721,6 +1745,8 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL, false);
sDefaults.putInt(IMSI_KEY_EXPIRATION_DAYS_TIME_INT, IMSI_ENCRYPTION_DAYS_TIME_DISABLED);
sDefaults.putString(IMSI_KEY_DOWNLOAD_URL_STRING, null);
+ sDefaults.putStringArray(KEY_NON_ROAMING_OPERATOR_STRING_ARRAY, null);
+ sDefaults.putStringArray(KEY_ROAMING_OPERATOR_STRING_ARRAY, null);
}
/**
diff --git a/test-runner/src/android/test/AndroidTestRunner.java b/test-runner/src/android/test/AndroidTestRunner.java
index 7313a2880ea2..f898516a001b 100644
--- a/test-runner/src/android/test/AndroidTestRunner.java
+++ b/test-runner/src/android/test/AndroidTestRunner.java
@@ -18,7 +18,6 @@ package android.test;
import android.app.Instrumentation;
import android.content.Context;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
import java.util.ArrayList;
import junit.framework.Test;
@@ -49,7 +48,6 @@ public class AndroidTestRunner extends BaseTestRunner {
private List<TestListener> mTestListeners = new ArrayList<>();
private Instrumentation mInstrumentation;
- private PerformanceResultsWriter mPerfWriter;
@SuppressWarnings("unchecked")
public void setTestClassName(String testClassName, String testMethodName) {
@@ -194,7 +192,6 @@ public class AndroidTestRunner extends BaseTestRunner {
for (TestCase testCase : mTestCases) {
setContextIfAndroidTestCase(testCase, mContext, testContext);
setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation);
- setPerformanceWriterIfPerformanceCollectorTestCase(testCase, mPerfWriter);
testCase.run(mTestResult);
}
}
@@ -217,13 +214,6 @@ public class AndroidTestRunner extends BaseTestRunner {
}
}
- private void setPerformanceWriterIfPerformanceCollectorTestCase(
- Test test, PerformanceResultsWriter writer) {
- if (PerformanceCollectorTestCase.class.isAssignableFrom(test.getClass())) {
- ((PerformanceCollectorTestCase) test).setPerformanceResultsWriter(writer);
- }
- }
-
public void setInstrumentation(Instrumentation instrumentation) {
mInstrumentation = instrumentation;
}
@@ -237,13 +227,6 @@ public class AndroidTestRunner extends BaseTestRunner {
setInstrumentation(instrumentation);
}
- /**
- * {@hide} Pending approval for public API.
- */
- public void setPerformanceResultsWriter(PerformanceResultsWriter writer) {
- mPerfWriter = writer;
- }
-
@Override
protected Class loadSuiteClass(String suiteClassName) throws ClassNotFoundException {
return mContext.getClassLoader().loadClass(suiteClassName);
diff --git a/test-runner/src/android/test/DatabaseTestUtils.java b/test-runner/src/android/test/DatabaseTestUtils.java
deleted file mode 100644
index 1980d921664d..000000000000
--- a/test-runner/src/android/test/DatabaseTestUtils.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.database.sqlite.SQLiteDatabase;
-import android.database.Cursor;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A collection of utilities for writing unit tests for database code.
- * @hide pending API council approval
- */
-@Deprecated
-public class DatabaseTestUtils {
-
- /**
- * Compares the schema of two databases and asserts that they are equal.
- * @param expectedDb the db that is known to have the correct schema
- * @param db the db whose schema should be checked
- */
- public static void assertSchemaEquals(SQLiteDatabase expectedDb, SQLiteDatabase db) {
- Set<String> expectedSchema = getSchemaSet(expectedDb);
- Set<String> schema = getSchemaSet(db);
- MoreAsserts.assertEquals(expectedSchema, schema);
- }
-
- private static Set<String> getSchemaSet(SQLiteDatabase db) {
- Set<String> schemaSet = new HashSet<>();
-
- Cursor entityCursor = db.rawQuery("SELECT sql FROM sqlite_master", null);
- try {
- while (entityCursor.moveToNext()) {
- String sql = entityCursor.getString(0);
- schemaSet.add(sql);
- }
- } finally {
- entityCursor.close();
- }
- return schemaSet;
- }
-}
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index 9bd4c966496d..29e21a757f10 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -24,9 +24,6 @@ import android.app.Instrumentation;
import android.os.Bundle;
import android.os.Debug;
import android.os.Looper;
-import android.os.Parcelable;
-import android.os.PerformanceCollector;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
import android.test.suitebuilder.TestMethod;
import android.test.suitebuilder.TestPredicates;
import android.test.suitebuilder.TestSuiteBuilder;
@@ -178,13 +175,13 @@ import junit.textui.ResultPrinter;
public class InstrumentationTestRunner extends Instrumentation implements TestSuiteProvider {
/** @hide */
- public static final String ARGUMENT_TEST_CLASS = "class";
+ static final String ARGUMENT_TEST_CLASS = "class";
/** @hide */
- public static final String ARGUMENT_TEST_PACKAGE = "package";
+ private static final String ARGUMENT_TEST_PACKAGE = "package";
/** @hide */
- public static final String ARGUMENT_TEST_SIZE_PREDICATE = "size";
+ private static final String ARGUMENT_TEST_SIZE_PREDICATE = "size";
/** @hide */
- public static final String ARGUMENT_DELAY_MSEC = "delay_msec";
+ static final String ARGUMENT_DELAY_MSEC = "delay_msec";
private static final String SMALL_SUITE = "small";
private static final String MEDIUM_SUITE = "medium";
@@ -208,7 +205,7 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
*/
private static final float MEDIUM_SUITE_MAX_RUNTIME = 1000;
- /**
+ /*
* The following keys are used in the status bundle to provide structured reports to
* an IInstrumentationWatcher.
*/
@@ -390,7 +387,6 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
WatcherResultPrinter resultPrinter = new WatcherResultPrinter(mTestCount);
mTestRunner.addTestListener(new TestPrinter("TestRunner", false));
mTestRunner.addTestListener(resultPrinter);
- mTestRunner.setPerformanceResultsWriter(resultPrinter);
}
start();
}
@@ -476,7 +472,7 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
/**
* Returns the test predicate object, corresponding to the annotation class value provided via
- * the {@link ARGUMENT_ANNOTATION} argument.
+ * the {@link #ARGUMENT_ANNOTATION} argument.
*
* @return the predicate or <code>null</code>
*/
@@ -490,7 +486,7 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
/**
* Returns the negative test predicate object, corresponding to the annotation class value
- * provided via the {@link ARGUMENT_NOT_ANNOTATION} argument.
+ * provided via the {@link #ARGUMENT_NOT_ANNOTATION} argument.
*
* @return the predicate or <code>null</code>
*/
@@ -743,15 +739,12 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
/**
* This class sends status reports back to the IInstrumentationWatcher
*/
- private class WatcherResultPrinter implements TestListener, PerformanceResultsWriter {
+ private class WatcherResultPrinter implements TestListener {
private final Bundle mResultTemplate;
Bundle mTestResult;
int mTestNum = 0;
int mTestResultCode = 0;
String mTestClass = null;
- PerformanceCollector mPerfCollector = new PerformanceCollector();
- boolean mIsTimedTest = false;
- boolean mIncludeDetailedStats = false;
public WatcherResultPrinter(int numTests) {
mResultTemplate = new Bundle();
@@ -806,30 +799,6 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
sendStatus(REPORT_VALUE_RESULT_START, mTestResult);
mTestResultCode = 0;
-
- mIsTimedTest = false;
- mIncludeDetailedStats = false;
- try {
- // Look for TimedTest annotation on both test class and test method
- if (testMethod != null && testMethod.isAnnotationPresent(TimedTest.class)) {
- mIsTimedTest = true;
- mIncludeDetailedStats = testMethod.getAnnotation(
- TimedTest.class).includeDetailedStats();
- } else if (test.getClass().isAnnotationPresent(TimedTest.class)) {
- mIsTimedTest = true;
- mIncludeDetailedStats = test.getClass().getAnnotation(
- TimedTest.class).includeDetailedStats();
- }
- } catch (SecurityException e) {
- // ignore - the test with given name cannot be accessed. Will be handled during
- // test execution
- }
-
- if (mIsTimedTest && mIncludeDetailedStats) {
- mPerfCollector.beginSnapshot("");
- } else if (mIsTimedTest) {
- mPerfCollector.startTiming("");
- }
}
/**
@@ -860,12 +829,6 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
* @see junit.framework.TestListener#endTest(Test)
*/
public void endTest(Test test) {
- if (mIsTimedTest && mIncludeDetailedStats) {
- mTestResult.putAll(mPerfCollector.endSnapshot());
- } else if (mIsTimedTest) {
- writeStopTiming(mPerfCollector.stopTiming(""));
- }
-
if (mTestResultCode == 0) {
mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, ".");
}
@@ -878,50 +841,6 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
}
}
- public void writeBeginSnapshot(String label) {
- // Do nothing
- }
-
- public void writeEndSnapshot(Bundle results) {
- // Copy all snapshot data fields into mResults, which is outputted
- // via Instrumentation.finish
- mResults.putAll(results);
- }
-
- public void writeStartTiming(String label) {
- // Do nothing
- }
-
- public void writeStopTiming(Bundle results) {
- // Copy results into mTestResult by flattening list of iterations,
- // which is outputted via WatcherResultPrinter.endTest
- int i = 0;
- for (Parcelable p :
- results.getParcelableArrayList(PerformanceCollector.METRIC_KEY_ITERATIONS)) {
- Bundle iteration = (Bundle)p;
- String index = "iteration" + i + ".";
- mTestResult.putString(index + PerformanceCollector.METRIC_KEY_LABEL,
- iteration.getString(PerformanceCollector.METRIC_KEY_LABEL));
- mTestResult.putLong(index + PerformanceCollector.METRIC_KEY_CPU_TIME,
- iteration.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME));
- mTestResult.putLong(index + PerformanceCollector.METRIC_KEY_EXECUTION_TIME,
- iteration.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME));
- i++;
- }
- }
-
- public void writeMeasurement(String label, long value) {
- mTestResult.putLong(label, value);
- }
-
- public void writeMeasurement(String label, float value) {
- mTestResult.putFloat(label, value);
- }
-
- public void writeMeasurement(String label, String value) {
- mTestResult.putString(label, value);
- }
-
// TODO report the end of the cycle
}
}
diff --git a/test-runner/src/android/test/InstrumentationUtils.java b/test-runner/src/android/test/InstrumentationUtils.java
deleted file mode 100644
index cc508132ba21..000000000000
--- a/test-runner/src/android/test/InstrumentationUtils.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-/**
- * The InstrumentationUtils class has all the utility functions needed for
- * instrumentation tests.
- *
- * {@hide} - Not currently used.
- */
-@Deprecated
-public class InstrumentationUtils {
- /**
- * An utility function that returns the menu identifier for a particular
- * menu item.
- *
- * @param cls Class object of the class that handles the menu ite,.
- * @param identifier Menu identifier.
- * @return The integer corresponding to the menu item.
- */
- public static int getMenuIdentifier(Class cls, String identifier) {
- int id = -1;
- try {
- Integer field = (Integer)cls.getDeclaredField(identifier).get(cls);
- id = field.intValue();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return id;
- }
-
-}
diff --git a/test-runner/src/android/test/PerformanceCollectorTestCase.java b/test-runner/src/android/test/PerformanceCollectorTestCase.java
deleted file mode 100644
index 3a5dafc0db75..000000000000
--- a/test-runner/src/android/test/PerformanceCollectorTestCase.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.os.PerformanceCollector;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
-
-/**
- * A simple interface for passing in a PerformanceResultsWriter instance to be used with
- * PerformanceCollector.
- * <p/>
- * A one line implementation of {@link #setPerformanceResultsWriter(PerformanceResultsWriter)}
- * is sufficient in most cases:
- * <p/>
- * <code>mPerfCollector.setPerformanceResultsWriter(writer);</code>
- *
- * {@hide} Not needed for SDK.
- */
-@Deprecated
-public interface PerformanceCollectorTestCase {
- public PerformanceCollector mPerfCollector = new PerformanceCollector();
-
- public void setPerformanceResultsWriter(PerformanceResultsWriter writer);
-}
diff --git a/test-runner/src/android/test/TimedTest.java b/test-runner/src/android/test/TimedTest.java
deleted file mode 100644
index cb15ef907050..000000000000
--- a/test-runner/src/android/test/TimedTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * This annotation can be used on an {@link junit.framework.TestCase}'s test methods. When the
- * annotation is present, the test method is timed and the results written through instrumentation
- * output. It can also be used on the class itself, which is equivalent to tagging all test methods
- * with this annotation.
- * <p/>
- * Setting {@link #includeDetailedStats()} to true causes additional metrics such as memory usage
- * and binder transactions to be gathered and written through instrumentation output.
- *
- * {@hide} Pending approval for public API.
- */
-@Deprecated
-@Retention(RetentionPolicy.RUNTIME)
-public @interface TimedTest {
- boolean includeDetailedStats() default false;
-}
diff --git a/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java b/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java
deleted file mode 100644
index 128396e5a9c0..000000000000
--- a/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder;
-
-/**
- * A suite builder that finds instrumentation tests.
- *
- * {@hide} Not needed for 1.0 SDK.
- */
-public class InstrumentationTestSuiteBuilder extends TestSuiteBuilder {
-
- public InstrumentationTestSuiteBuilder(Class clazz) {
- this(clazz.getName(), clazz.getClassLoader());
- }
-
-
- public InstrumentationTestSuiteBuilder(String name, ClassLoader classLoader) {
- super(name, classLoader);
- addRequirements(TestPredicates.SELECT_INSTRUMENTATION);
- }
-}
diff --git a/test-runner/src/android/test/suitebuilder/TestGrouping.java b/test-runner/src/android/test/suitebuilder/TestGrouping.java
index a2b94ff45035..307afb55e47a 100644
--- a/test-runner/src/android/test/suitebuilder/TestGrouping.java
+++ b/test-runner/src/android/test/suitebuilder/TestGrouping.java
@@ -44,23 +44,23 @@ import java.util.TreeSet;
*
* {@hide} Not needed for 1.0 SDK.
*/
-public class TestGrouping {
+class TestGrouping {
private static final String LOG_TAG = "TestGrouping";
- SortedSet<Class<? extends TestCase>> testCaseClasses;
+ private final SortedSet<Class<? extends TestCase>> testCaseClasses;
- public static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
+ static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
= new SortBySimpleName();
- public static final Comparator<Class<? extends TestCase>> SORT_BY_FULLY_QUALIFIED_NAME
+ static final Comparator<Class<? extends TestCase>> SORT_BY_FULLY_QUALIFIED_NAME
= new SortByFullyQualifiedName();
- protected String firstIncludedPackage = null;
- private ClassLoader classLoader;
+ private final ClassLoader classLoader;
- public TestGrouping(Comparator<Class<? extends TestCase>> comparator) {
+ TestGrouping(Comparator<Class<? extends TestCase>> comparator, ClassLoader classLoader) {
testCaseClasses = new TreeSet<Class<? extends TestCase>>(comparator);
+ this.classLoader = classLoader;
}
/**
@@ -77,15 +77,11 @@ public class TestGrouping {
return testMethods;
}
- protected List<Method> getTestMethods(Class<? extends TestCase> testCaseClass) {
+ private List<Method> getTestMethods(Class<? extends TestCase> testCaseClass) {
List<Method> methods = Arrays.asList(testCaseClass.getMethods());
return select(methods, new TestMethodPredicate());
}
- SortedSet<Class<? extends TestCase>> getTestCaseClasses() {
- return testCaseClasses;
- }
-
public boolean equals(Object o) {
if (this == o) {
return true;
@@ -110,9 +106,8 @@ public class TestGrouping {
* or in a sub-package.
*
* @param packageNames Names of packages to add.
- * @return The {@link TestGrouping} for method chaining.
*/
- public TestGrouping addPackagesRecursive(String... packageNames) {
+ void addPackagesRecursive(String... packageNames) {
for (String packageName : packageNames) {
List<Class<? extends TestCase>> addedClasses = testCaseClassesInPackage(packageName);
if (addedClasses.isEmpty()) {
@@ -120,11 +115,7 @@ public class TestGrouping {
+ "' could not be found or has no tests");
}
testCaseClasses.addAll(addedClasses);
- if (firstIncludedPackage == null) {
- firstIncludedPackage = packageName;
- }
}
- return this;
}
/**
@@ -132,21 +123,11 @@ public class TestGrouping {
* specified.
*
* @param packageNames Names of packages to remove.
- * @return The {@link TestGrouping} for method chaining.
*/
- public TestGrouping removePackagesRecursive(String... packageNames) {
+ void removePackagesRecursive(String... packageNames) {
for (String packageName : packageNames) {
testCaseClasses.removeAll(testCaseClassesInPackage(packageName));
}
- return this;
- }
-
- /**
- * @return The first package name passed to {@link #addPackagesRecursive(String[])}, or null
- * if that method was never called.
- */
- public String getFirstIncludedPackage() {
- return firstIncludedPackage;
}
private List<Class<? extends TestCase>> testCaseClassesInPackage(String packageName) {
@@ -176,10 +157,6 @@ public class TestGrouping {
return selectedItems;
}
- public void setClassLoader(ClassLoader classLoader) {
- this.classLoader = classLoader;
- }
-
/**
* Sort classes by their simple names (i.e. without the package prefix), using
* their packages to sort classes with the same name.
diff --git a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
index cf6936bee643..6158e0cf14f4 100644
--- a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
+++ b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
@@ -44,8 +44,7 @@ import java.util.Collections;
@Deprecated
public class TestSuiteBuilder {
- private Context context;
- private final TestGrouping testGrouping = new TestGrouping(SORT_BY_FULLY_QUALIFIED_NAME);
+ private final TestGrouping testGrouping;
private final Set<Predicate<TestMethod>> predicates = new HashSet<Predicate<TestMethod>>();
private List<TestCase> testCases;
private TestSuite rootSuite;
@@ -67,7 +66,7 @@ public class TestSuiteBuilder {
public TestSuiteBuilder(String name, ClassLoader classLoader) {
this.suiteName = name;
- this.testGrouping.setClassLoader(classLoader);
+ this.testGrouping = new TestGrouping(SORT_BY_FULLY_QUALIFIED_NAME, classLoader);
this.testCases = new ArrayList<>();
addRequirements(REJECT_SUPPRESSED);
}
@@ -244,15 +243,6 @@ public class TestSuiteBuilder {
}
}
- /**
- * @return the test package that represents the packages that were included for our test suite.
- *
- * {@hide} Not needed for 1.0 SDK.
- */
- protected TestGrouping getTestGrouping() {
- return testGrouping;
- }
-
private boolean satisfiesAllPredicates(TestMethod test) {
for (Predicate<TestMethod> predicate : predicates) {
if (!predicate.apply(test)) {
diff --git a/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java b/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java
deleted file mode 100644
index 1872803bd5cd..000000000000
--- a/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder;
-
-import static android.test.suitebuilder.ListTestCaseNames.getTestCaseNames;
-import android.test.suitebuilder.examples.OuterTest;
-import android.test.suitebuilder.examples.instrumentation.InstrumentationTest;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class InstrumentationTestSuiteBuilderTest extends TestCase {
-
- private InstrumentationTestSuiteBuilder instrumentationTestSuiteBuilder;
-
- protected void setUp() throws Exception {
- super.setUp();
- instrumentationTestSuiteBuilder = new InstrumentationTestSuiteBuilder(getClass());
- }
-
- public void testShouldIncludeIntrumentationTests() throws Exception {
- instrumentationTestSuiteBuilder.includePackages(packageFor(InstrumentationTest.class));
-
- SuiteExecutionRecorder recorder = runSuite(instrumentationTestSuiteBuilder);
-
- assertEquals(1, recorder.testsSeen.size());
- assertTrue(recorder.saw("InstrumentationTest.testInstrumentation"));
- }
-
- public void testShouldOnlyIncludeIntrumentationTests() throws Exception {
- TestSuite testSuite = new OuterTest()
- .buildTestsUnderHereWith(instrumentationTestSuiteBuilder);
- List<String> testCaseNames = getTestCaseNames(testSuite);
- assertEquals(1, testCaseNames.size());
- assertEquals("testInstrumentation", testCaseNames.get(0));
- }
-
- private static String packageFor(Class clazz) {
- String className = clazz.getName();
- return className.substring(0, className.lastIndexOf('.'));
- }
-
- private SuiteExecutionRecorder runSuite(TestSuiteBuilder builder) {
- TestSuite suite = builder.build();
- SuiteExecutionRecorder recorder = new SuiteExecutionRecorder();
- TestResult result = new TestResult();
- result.addListener(recorder);
- suite.run(result);
- return recorder;
- }
-
- private class SuiteExecutionRecorder implements TestListener {
-
- private Set<String> failures = new HashSet<String>();
- private Set<String> errors = new HashSet<String>();
- private Set<String> testsSeen = new HashSet<String>();
-
- public void addError(Test test, Throwable t) {
- errors.add(testName(test));
- }
-
- public void addFailure(Test test, AssertionFailedError t) {
- failures.add(testName(test));
- }
-
- public void endTest(Test test) {
- }
-
- public void startTest(Test test) {
- testsSeen.add(testName(test));
- }
-
- public boolean saw(String testName) {
- return testsSeen.contains(testName);
- }
-
- public boolean failed(String testName) {
- return failures.contains(testName);
- }
-
- public boolean errored(String testName) {
- return errors.contains(testName);
- }
-
- public boolean passed(String testName) {
- return saw(testName) && !failed(testName) && !errored(testName);
- }
-
- private String testName(Test test) {
- TestCase testCase = (TestCase) test;
- return testCase.getClass().getSimpleName() + "." + testCase.getName();
- }
- }
-}
diff --git a/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java b/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
index f4477d1c780e..972bfb49e75f 100644
--- a/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
@@ -30,7 +30,7 @@ public class TestGroupingTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
- mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME);
+ mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME, getClass().getClassLoader());
}
/**
diff --git a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java
index 27be135cb796..b68f203d869f 100644
--- a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java
+++ b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java
@@ -16,6 +16,7 @@
package com.android.server.connectivity.tethering;
+import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
@@ -38,6 +39,8 @@ import android.telephony.TelephonyManager;
import com.android.internal.util.test.BroadcastInterceptingContext;
+import java.util.Iterator;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -134,4 +137,61 @@ public class TetheringConfigurationTest {
assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE));
assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));
}
+
+ @Test
+ public void testNoDefinedUpstreamTypesAddsEthernet() {
+ when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types))
+ .thenReturn(new int[]{});
+ mHasTelephonyManager = false;
+ when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED);
+
+ final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog);
+ final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
+ // The following is because the code always adds some kind of mobile
+ // upstream, be it DUN or, in this case where we use DUN_UNSPECIFIED,
+ // both vanilla and hipri mobile types.
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_MOBILE, upstreamIterator.next().intValue());
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
+ assertFalse(upstreamIterator.hasNext());
+ }
+
+ @Test
+ public void testDefinedUpstreamTypesSansEthernetAddsEthernet() {
+ when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types))
+ .thenReturn(new int[]{TYPE_WIFI, TYPE_MOBILE_HIPRI});
+ mHasTelephonyManager = false;
+ when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED);
+
+ final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog);
+ final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_WIFI, upstreamIterator.next().intValue());
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
+ assertFalse(upstreamIterator.hasNext());
+ }
+
+ @Test
+ public void testDefinedUpstreamTypesWithEthernetDoesNotAddEthernet() {
+ when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types))
+ .thenReturn(new int[]{TYPE_WIFI, TYPE_ETHERNET, TYPE_MOBILE_HIPRI});
+ mHasTelephonyManager = false;
+ when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED);
+
+ final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog);
+ final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_WIFI, upstreamIterator.next().intValue());
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
+ assertTrue(upstreamIterator.hasNext());
+ assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
+ assertFalse(upstreamIterator.hasNext());
+ }
}
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index 1dc47f88ab92..d39a8a8237b7 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -85,6 +85,7 @@ cc_library_host_static {
"compile/Pseudolocalizer.cpp",
"compile/XmlIdCollector.cpp",
"configuration/ConfigurationParser.cpp",
+ "filter/AbiFilter.cpp",
"filter/ConfigFilter.cpp",
"flatten/Archive.cpp",
"flatten/TableFlattener.cpp",
diff --git a/tools/aapt2/LoadedApk.cpp b/tools/aapt2/LoadedApk.cpp
index 8a8f8be205e7..7e5efa15f61b 100644
--- a/tools/aapt2/LoadedApk.cpp
+++ b/tools/aapt2/LoadedApk.cpp
@@ -57,6 +57,12 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadApkFromPath(IAaptContext* context,
bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
IArchiveWriter* writer) {
+ FilterChain empty;
+ return WriteToArchive(context, options, &empty, writer);
+}
+
+bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
+ FilterChain* filters, IArchiveWriter* writer) {
std::set<std::string> referenced_resources;
// List the files being referenced in the resource table.
for (auto& pkg : table_->packages) {
@@ -89,6 +95,13 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOption
continue;
}
+ if (!filters->Keep(path)) {
+ if (context->IsVerbose()) {
+ context->GetDiagnostics()->Note(DiagMessage() << "Filtered '" << path << "' from APK.");
+ }
+ continue;
+ }
+
// The resource table needs to be re-serialized since it might have changed.
if (path == "resources.arsc") {
BigBuffer buffer(4096);
diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h
index 59eb8161a868..8aa9674aa2ed 100644
--- a/tools/aapt2/LoadedApk.h
+++ b/tools/aapt2/LoadedApk.h
@@ -20,6 +20,7 @@
#include "androidfw/StringPiece.h"
#include "ResourceTable.h"
+#include "filter/Filter.h"
#include "flatten/Archive.h"
#include "flatten/TableFlattener.h"
#include "io/ZipArchive.h"
@@ -49,6 +50,14 @@ class LoadedApk {
bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
IArchiveWriter* writer);
+ /**
+ * Writes the APK on disk at the given path, while also removing the resource
+ * files that are not referenced in the resource table. The provided filter
+ * chain is applied to each entry in the APK file.
+ */
+ bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
+ FilterChain* filters, IArchiveWriter* writer);
+
static std::unique_ptr<LoadedApk> LoadApkFromPath(IAaptContext* context,
const android::StringPiece& path);
diff --git a/tools/aapt2/cmd/Optimize.cpp b/tools/aapt2/cmd/Optimize.cpp
index 194c0c80c2b2..9d71775889d4 100644
--- a/tools/aapt2/cmd/Optimize.cpp
+++ b/tools/aapt2/cmd/Optimize.cpp
@@ -17,6 +17,7 @@
#include <memory>
#include <vector>
+#include "android-base/stringprintf.h"
#include "androidfw/StringPiece.h"
#include "Diagnostics.h"
@@ -26,6 +27,8 @@
#include "SdkConstants.h"
#include "ValueVisitor.h"
#include "cmd/Util.h"
+#include "configuration/ConfigurationParser.h"
+#include "filter/AbiFilter.h"
#include "flatten/TableFlattener.h"
#include "flatten/XmlFlattener.h"
#include "io/BigBufferInputStream.h"
@@ -33,14 +36,21 @@
#include "optimize/ResourceDeduper.h"
#include "optimize/VersionCollapser.h"
#include "split/TableSplitter.h"
+#include "util/Files.h"
-using android::StringPiece;
+using ::aapt::configuration::Abi;
+using ::aapt::configuration::Artifact;
+using ::aapt::configuration::PostProcessingConfiguration;
+using ::android::StringPiece;
+using ::android::base::StringPrintf;
namespace aapt {
struct OptimizeOptions {
// Path to the output APK.
- std::string output_path;
+ Maybe<std::string> output_path;
+ // Path to the output APK directory for splits.
+ Maybe<std::string> output_dir;
// Details of the app extracted from the AndroidManifest.xml
AppInfo app_info;
@@ -55,6 +65,8 @@ struct OptimizeOptions {
std::vector<SplitConstraints> split_constraints;
TableFlattenerOptions table_flattener_options;
+
+ Maybe<PostProcessingConfiguration> configuration;
};
class OptimizeContext : public IAaptContext {
@@ -175,10 +187,52 @@ class OptimizeCommand {
++split_constraints_iter;
}
- std::unique_ptr<IArchiveWriter> writer =
- CreateZipFileArchiveWriter(context_->GetDiagnostics(), options_.output_path);
- if (!apk->WriteToArchive(context_, options_.table_flattener_options, writer.get())) {
- return 1;
+ if (options_.configuration && options_.output_dir) {
+ PostProcessingConfiguration& config = options_.configuration.value();
+
+ // For now, just write out the stripped APK since ABI splitting doesn't modify anything else.
+ for (const Artifact& artifact : config.artifacts) {
+ if (artifact.abi_group) {
+ const std::string& group = artifact.abi_group.value();
+
+ auto abi_group = config.abi_groups.find(group);
+ // TODO: Remove validation when configuration parser ensures referential integrity.
+ if (abi_group == config.abi_groups.end()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage() << "could not find referenced ABI group '" << group << "'");
+ return 1;
+ }
+ FilterChain filters;
+ filters.AddFilter(AbiFilter::FromAbiList(abi_group->second));
+
+ const std::string& path = apk->GetSource().path;
+ const StringPiece ext = file::GetExtension(path);
+ const std::string name = path.substr(0, path.rfind(ext.to_string()));
+
+ // Name is hard coded for now since only one split dimension is supported.
+ // TODO: Incorporate name generation into the configuration objects.
+ const std::string file_name =
+ StringPrintf("%s.%s%s", name.c_str(), group.c_str(), ext.data());
+ std::string out = options_.output_dir.value();
+ file::AppendPath(&out, file_name);
+
+ std::unique_ptr<IArchiveWriter> writer =
+ CreateZipFileArchiveWriter(context_->GetDiagnostics(), out);
+
+ if (!apk->WriteToArchive(context_, options_.table_flattener_options, &filters,
+ writer.get())) {
+ return 1;
+ }
+ }
+ }
+ }
+
+ if (options_.output_path) {
+ std::unique_ptr<IArchiveWriter> writer =
+ CreateZipFileArchiveWriter(context_->GetDiagnostics(), options_.output_path.value());
+ if (!apk->WriteToArchive(context_, options_.table_flattener_options, writer.get())) {
+ return 1;
+ }
}
return 0;
@@ -214,8 +268,8 @@ class OptimizeCommand {
if (file_ref->file == nullptr) {
ResourceNameRef name(pkg->name, type->type, entry->name);
context_->GetDiagnostics()->Warn(DiagMessage(file_ref->GetSource())
- << "file for resource " << name << " with config '"
- << config_value->config << "' not found");
+ << "file for resource " << name << " with config '"
+ << config_value->config << "' not found");
continue;
}
@@ -293,13 +347,16 @@ bool ExtractAppDataFromManifest(OptimizeContext* context, LoadedApk* apk,
int Optimize(const std::vector<StringPiece>& args) {
OptimizeContext context;
OptimizeOptions options;
+ Maybe<std::string> config_path;
Maybe<std::string> target_densities;
std::vector<std::string> configs;
std::vector<std::string> split_args;
bool verbose = false;
Flags flags =
Flags()
- .RequiredFlag("-o", "Path to the output APK.", &options.output_path)
+ .OptionalFlag("-o", "Path to the output APK.", &options.output_path)
+ .OptionalFlag("-d", "Path to the output directory (for splits).", &options.output_dir)
+ .OptionalFlag("-x", "Path to XML configuration file.", &config_path)
.OptionalFlag(
"--target-densities",
"Comma separated list of the screen densities that the APK will be optimized for.\n"
@@ -369,6 +426,22 @@ int Optimize(const std::vector<StringPiece>& args) {
}
}
+ if (config_path) {
+ if (!options.output_dir) {
+ context.GetDiagnostics()->Error(
+ DiagMessage() << "Output directory is required when using a configuration file");
+ return 1;
+ }
+ std::string& path = config_path.value();
+ Maybe<ConfigurationParser> for_path = ConfigurationParser::ForPath(path);
+ if (for_path) {
+ options.configuration = for_path.value().WithDiagnostics(context.GetDiagnostics()).Parse();
+ } else {
+ context.GetDiagnostics()->Error(DiagMessage() << "Could not parse config file " << path);
+ return 1;
+ }
+ }
+
if (!ExtractAppDataFromManifest(&context, apk.get(), &options)) {
return 1;
}
diff --git a/tools/aapt2/configuration/ConfigurationParser.cpp b/tools/aapt2/configuration/ConfigurationParser.cpp
index 303a809fbaa9..0b6743c4c3b6 100644
--- a/tools/aapt2/configuration/ConfigurationParser.cpp
+++ b/tools/aapt2/configuration/ConfigurationParser.cpp
@@ -18,6 +18,7 @@
#include <algorithm>
#include <functional>
+#include <map>
#include <memory>
#include <utility>
@@ -41,7 +42,7 @@ using ::aapt::configuration::Abi;
using ::aapt::configuration::AndroidManifest;
using ::aapt::configuration::AndroidSdk;
using ::aapt::configuration::Artifact;
-using ::aapt::configuration::Configuration;
+using ::aapt::configuration::PostProcessingConfiguration;
using ::aapt::configuration::GlTexture;
using ::aapt::configuration::Group;
using ::aapt::configuration::Locale;
@@ -56,15 +57,15 @@ using ::aapt::xml::XmlActionExecutorPolicy;
using ::aapt::xml::XmlNodeAction;
using ::android::base::ReadFileToString;
-const std::unordered_map<std::string, Abi> kAbiMap = {
- {"armeabi", Abi::kArmeV6},
- {"armeabi-v7a", Abi::kArmV7a},
- {"arm64-v8a", Abi::kArm64V8a},
- {"x86", Abi::kX86},
- {"x86_64", Abi::kX86_64},
- {"mips", Abi::kMips},
- {"mips64", Abi::kMips64},
- {"universal", Abi::kUniversal},
+const std::unordered_map<std::string, Abi> kStringToAbiMap = {
+ {"armeabi", Abi::kArmeV6}, {"armeabi-v7a", Abi::kArmV7a}, {"arm64-v8a", Abi::kArm64V8a},
+ {"x86", Abi::kX86}, {"x86_64", Abi::kX86_64}, {"mips", Abi::kMips},
+ {"mips64", Abi::kMips64}, {"universal", Abi::kUniversal},
+};
+const std::map<Abi, std::string> kAbiToStringMap = {
+ {Abi::kArmeV6, "armeabi"}, {Abi::kArmV7a, "armeabi-v7a"}, {Abi::kArm64V8a, "arm64-v8a"},
+ {Abi::kX86, "x86"}, {Abi::kX86_64, "x86_64"}, {Abi::kMips, "mips"},
+ {Abi::kMips64, "mips64"}, {Abi::kUniversal, "universal"},
};
constexpr const char* kAaptXmlNs = "http://schemas.android.com/tools/aapt";
@@ -102,7 +103,13 @@ class NamespaceVisitor : public xml::Visitor {
} // namespace
+namespace configuration {
+
+const std::string& AbiToString(Abi abi) {
+ return kAbiToStringMap.find(abi)->second;
+}
+} // namespace configuration
/** Returns a ConfigurationParser for the file located at the provided path. */
Maybe<ConfigurationParser> ConfigurationParser::ForPath(const std::string& path) {
@@ -118,7 +125,7 @@ ConfigurationParser::ConfigurationParser(std::string contents)
diag_(&noop_) {
}
-Maybe<Configuration> ConfigurationParser::Parse() {
+Maybe<PostProcessingConfiguration> ConfigurationParser::Parse() {
std::istringstream in(contents_);
auto doc = xml::Inflate(&in, diag_, Source("config.xml"));
@@ -150,10 +157,11 @@ Maybe<Configuration> ConfigurationParser::Parse() {
XmlNodeAction& artifacts_action = root_action["artifacts"];
XmlNodeAction& groups_action = root_action["groups"];
- Configuration config;
+ PostProcessingConfiguration config;
// Helper to bind a static method to an action handler in the DOM executor.
- auto bind_handler = [&config](std::function<bool(Configuration*, Element*, IDiagnostics*)> h)
+ auto bind_handler =
+ [&config](std::function<bool(PostProcessingConfiguration*, Element*, IDiagnostics*)> h)
-> XmlNodeAction::ActionFuncWithDiag {
return std::bind(h, &config, std::placeholders::_1, std::placeholders::_2);
};
@@ -175,275 +183,266 @@ Maybe<Configuration> ConfigurationParser::Parse() {
return {};
}
+ // TODO: Validate all references in the configuration are valid. It should be safe to assume from
+ // this point on that any references from one section to another will be present.
+
return {config};
}
ConfigurationParser::ActionHandler ConfigurationParser::artifact_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- Artifact artifact{};
- for (const auto& attr : root_element->attributes) {
- if (attr.name == "name") {
- artifact.name = attr.value;
- } else if (attr.name == "abi-group") {
- artifact.abi_group = {attr.value};
- } else if (attr.name == "screen-density-group") {
- artifact.screen_density_group = {attr.value};
- } else if (attr.name == "locale-group") {
- artifact.locale_group = {attr.value};
- } else if (attr.name == "android-sdk-group") {
- artifact.android_sdk_group = {attr.value};
- } else if (attr.name == "gl-texture-group") {
- artifact.gl_texture_group = {attr.value};
- } else if (attr.name == "device-feature-group") {
- artifact.device_feature_group = {attr.value};
- } else {
- diag->Note(
- DiagMessage() << "Unknown artifact attribute: " << attr.name << " = " << attr.value);
- }
- }
- config->artifacts[artifact.name] = artifact;
- return true;
- };
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ Artifact artifact{};
+ for (const auto& attr : root_element->attributes) {
+ if (attr.name == "name") {
+ artifact.name = attr.value;
+ } else if (attr.name == "abi-group") {
+ artifact.abi_group = {attr.value};
+ } else if (attr.name == "screen-density-group") {
+ artifact.screen_density_group = {attr.value};
+ } else if (attr.name == "locale-group") {
+ artifact.locale_group = {attr.value};
+ } else if (attr.name == "android-sdk-group") {
+ artifact.android_sdk_group = {attr.value};
+ } else if (attr.name == "gl-texture-group") {
+ artifact.gl_texture_group = {attr.value};
+ } else if (attr.name == "device-feature-group") {
+ artifact.device_feature_group = {attr.value};
+ } else {
+ diag->Note(DiagMessage() << "Unknown artifact attribute: " << attr.name << " = "
+ << attr.value);
+ }
+ }
+ config->artifacts.push_back(artifact);
+ return true;
+};
ConfigurationParser::ActionHandler ConfigurationParser::artifact_format_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- for (auto& node : root_element->children) {
- xml::Text* t;
- if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
- config->artifact_format = TrimWhitespace(t->text).to_string();
- break;
- }
- }
- return true;
- };
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ for (auto& node : root_element->children) {
+ xml::Text* t;
+ if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+ config->artifact_format = TrimWhitespace(t->text).to_string();
+ break;
+ }
+ }
+ return true;
+};
ConfigurationParser::ActionHandler ConfigurationParser::abi_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- auto& group = config->abi_groups[label];
- bool valid = true;
+ auto& group = config->abi_groups[label];
+ bool valid = true;
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "abi") {
- diag->Error(
- DiagMessage() << "Unexpected element in ABI group: " << child->name);
- valid = false;
- } else {
- for (auto& node : child->children) {
- xml::Text* t;
- if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
- group.push_back(kAbiMap.at(TrimWhitespace(t->text).to_string()));
- break;
- }
- }
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "abi") {
+ diag->Error(DiagMessage() << "Unexpected element in ABI group: " << child->name);
+ valid = false;
+ } else {
+ for (auto& node : child->children) {
+ xml::Text* t;
+ if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+ group.push_back(kStringToAbiMap.at(TrimWhitespace(t->text).to_string()));
+ break;
}
}
+ }
+ }
- return valid;
- };
+ return valid;
+};
ConfigurationParser::ActionHandler ConfigurationParser::screen_density_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- auto& group = config->screen_density_groups[label];
- bool valid = true;
+ auto& group = config->screen_density_groups[label];
+ bool valid = true;
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "screen-density") {
- diag->Error(
- DiagMessage() << "Unexpected root_element in screen density group: "
- << child->name);
- valid = false;
- } else {
- for (auto& node : child->children) {
- xml::Text* t;
- if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
- ConfigDescription config_descriptor;
- const android::StringPiece& text = TrimWhitespace(t->text);
- if (ConfigDescription::Parse(text, &config_descriptor)) {
- // Copy the density with the minimum SDK version stripped out.
- group.push_back(config_descriptor.CopyWithoutSdkVersion());
- } else {
- diag->Error(
- DiagMessage() << "Could not parse config descriptor for screen-density: "
- << text);
- valid = false;
- }
- break;
- }
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "screen-density") {
+ diag->Error(DiagMessage() << "Unexpected root_element in screen density group: "
+ << child->name);
+ valid = false;
+ } else {
+ for (auto& node : child->children) {
+ xml::Text* t;
+ if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+ ConfigDescription config_descriptor;
+ const android::StringPiece& text = TrimWhitespace(t->text);
+ if (ConfigDescription::Parse(text, &config_descriptor)) {
+ // Copy the density with the minimum SDK version stripped out.
+ group.push_back(config_descriptor.CopyWithoutSdkVersion());
+ } else {
+ diag->Error(DiagMessage()
+ << "Could not parse config descriptor for screen-density: " << text);
+ valid = false;
}
+ break;
}
}
+ }
+ }
- return valid;
- };
+ return valid;
+};
ConfigurationParser::ActionHandler ConfigurationParser::locale_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- auto& group = config->locale_groups[label];
- bool valid = true;
+ auto& group = config->locale_groups[label];
+ bool valid = true;
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "locale") {
- diag->Error(
- DiagMessage() << "Unexpected root_element in screen density group: "
- << child->name);
- valid = false;
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "locale") {
+ diag->Error(DiagMessage() << "Unexpected root_element in screen density group: "
+ << child->name);
+ valid = false;
+ } else {
+ Locale entry;
+ for (const auto& attr : child->attributes) {
+ if (attr.name == "lang") {
+ entry.lang = {attr.value};
+ } else if (attr.name == "region") {
+ entry.region = {attr.value};
} else {
- Locale entry;
- for (const auto& attr : child->attributes) {
- if (attr.name == "lang") {
- entry.lang = {attr.value};
- } else if (attr.name == "region") {
- entry.region = {attr.value};
- } else {
- diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name
- << " = " << attr.value);
- }
- }
- group.push_back(entry);
+ diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name << " = " << attr.value);
}
}
+ group.push_back(entry);
+ }
+ }
- return valid;
- };
+ return valid;
+};
ConfigurationParser::ActionHandler ConfigurationParser::android_sdk_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
-
- auto& group = config->android_sdk_groups[label];
- bool valid = true;
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "android-sdk") {
- diag->Error(
- DiagMessage() << "Unexpected root_element in ABI group: " << child->name);
- valid = false;
+ auto& group = config->android_sdk_groups[label];
+ bool valid = true;
+
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "android-sdk") {
+ diag->Error(DiagMessage() << "Unexpected root_element in ABI group: " << child->name);
+ valid = false;
+ } else {
+ AndroidSdk entry;
+ for (const auto& attr : child->attributes) {
+ if (attr.name == "minSdkVersion") {
+ entry.min_sdk_version = {attr.value};
+ } else if (attr.name == "targetSdkVersion") {
+ entry.target_sdk_version = {attr.value};
+ } else if (attr.name == "maxSdkVersion") {
+ entry.max_sdk_version = {attr.value};
} else {
- AndroidSdk entry;
- for (const auto& attr : child->attributes) {
- if (attr.name == "minSdkVersion") {
- entry.min_sdk_version = {attr.value};
- } else if (attr.name == "targetSdkVersion") {
- entry.target_sdk_version = {attr.value};
- } else if (attr.name == "maxSdkVersion") {
- entry.max_sdk_version = {attr.value};
- } else {
- diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name
- << " = " << attr.value);
- }
- }
+ diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name << " = " << attr.value);
+ }
+ }
- // TODO: Fill in the manifest details when they are finalised.
- for (auto node : child->GetChildElements()) {
- if (node->name == "manifest") {
- if (entry.manifest) {
- diag->Warn(DiagMessage() << "Found multiple manifest tags. Ignoring duplicates.");
- continue;
- }
- entry.manifest = {AndroidManifest()};
- }
+ // TODO: Fill in the manifest details when they are finalised.
+ for (auto node : child->GetChildElements()) {
+ if (node->name == "manifest") {
+ if (entry.manifest) {
+ diag->Warn(DiagMessage() << "Found multiple manifest tags. Ignoring duplicates.");
+ continue;
}
-
- group.push_back(entry);
+ entry.manifest = {AndroidManifest()};
}
}
- return valid;
- };
+ group.push_back(entry);
+ }
+ }
+
+ return valid;
+};
ConfigurationParser::ActionHandler ConfigurationParser::gl_texture_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- auto& group = config->gl_texture_groups[label];
- bool valid = true;
+ auto& group = config->gl_texture_groups[label];
+ bool valid = true;
- GlTexture result;
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "gl-texture") {
- diag->Error(
- DiagMessage() << "Unexpected element in GL texture group: "
- << child->name);
- valid = false;
- } else {
- for (const auto& attr : child->attributes) {
- if (attr.name == "name") {
- result.name = attr.value;
- break;
- }
- }
+ GlTexture result;
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "gl-texture") {
+ diag->Error(DiagMessage() << "Unexpected element in GL texture group: " << child->name);
+ valid = false;
+ } else {
+ for (const auto& attr : child->attributes) {
+ if (attr.name == "name") {
+ result.name = attr.value;
+ break;
+ }
+ }
- for (auto* element : child->GetChildElements()) {
- if (element->name != "texture-path") {
- diag->Error(
- DiagMessage() << "Unexpected element in gl-texture element: "
- << child->name);
- valid = false;
- continue;
- }
- for (auto& node : element->children) {
- xml::Text* t;
- if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
- result.texture_paths.push_back(TrimWhitespace(t->text).to_string());
- }
- }
+ for (auto* element : child->GetChildElements()) {
+ if (element->name != "texture-path") {
+ diag->Error(DiagMessage() << "Unexpected element in gl-texture element: " << child->name);
+ valid = false;
+ continue;
+ }
+ for (auto& node : element->children) {
+ xml::Text* t;
+ if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+ result.texture_paths.push_back(TrimWhitespace(t->text).to_string());
}
}
- group.push_back(result);
}
+ }
+ group.push_back(result);
+ }
- return valid;
- };
+ return valid;
+};
ConfigurationParser::ActionHandler ConfigurationParser::device_feature_group_handler_ =
- [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
- std::string label = GetLabel(root_element, diag);
- if (label.empty()) {
- return false;
- }
+ [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+ std::string label = GetLabel(root_element, diag);
+ if (label.empty()) {
+ return false;
+ }
- auto& group = config->device_feature_groups[label];
- bool valid = true;
+ auto& group = config->device_feature_groups[label];
+ bool valid = true;
- for (auto* child : root_element->GetChildElements()) {
- if (child->name != "supports-feature") {
- diag->Error(
- DiagMessage() << "Unexpected root_element in device feature group: "
- << child->name);
- valid = false;
- } else {
- for (auto& node : child->children) {
- xml::Text* t;
- if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
- group.push_back(TrimWhitespace(t->text).to_string());
- break;
- }
- }
+ for (auto* child : root_element->GetChildElements()) {
+ if (child->name != "supports-feature") {
+ diag->Error(DiagMessage() << "Unexpected root_element in device feature group: "
+ << child->name);
+ valid = false;
+ } else {
+ for (auto& node : child->children) {
+ xml::Text* t;
+ if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+ group.push_back(TrimWhitespace(t->text).to_string());
+ break;
}
}
+ }
+ }
- return valid;
- };
+ return valid;
+};
} // namespace aapt
diff --git a/tools/aapt2/configuration/ConfigurationParser.h b/tools/aapt2/configuration/ConfigurationParser.h
index 8b9c0853773b..3fae5dd0a990 100644
--- a/tools/aapt2/configuration/ConfigurationParser.h
+++ b/tools/aapt2/configuration/ConfigurationParser.h
@@ -62,6 +62,9 @@ enum class Abi {
kUniversal
};
+/** Helper method to convert an ABI to a string representing the path within the APK. */
+const std::string& AbiToString(Abi abi);
+
/**
* Represents an individual locale. When a locale is included, it must be
* declared from least specific to most specific, as a region does not make
@@ -114,11 +117,10 @@ struct GlTexture {
}
};
-/**
- * AAPT2 XML configuration binary representation.
- */
-struct Configuration {
- std::unordered_map<std::string, Artifact> artifacts;
+/** AAPT2 XML configuration file binary representation. */
+struct PostProcessingConfiguration {
+ // TODO: Support named artifacts?
+ std::vector<Artifact> artifacts;
Maybe<std::string> artifact_format;
Group<Abi> abi_groups;
@@ -162,7 +164,7 @@ class ConfigurationParser {
* Parses the configuration file and returns the results. If the configuration could not be parsed
* the result is empty and any errors will be displayed with the provided diagnostics context.
*/
- Maybe<configuration::Configuration> Parse();
+ Maybe<configuration::PostProcessingConfiguration> Parse();
protected:
/**
@@ -181,9 +183,8 @@ class ConfigurationParser {
* An ActionHandler for processing XML elements in the XmlActionExecutor. Returns true if the
* element was successfully processed, otherwise returns false.
*/
- using ActionHandler = std::function<bool(configuration::Configuration* config,
- xml::Element* element,
- IDiagnostics* diag)>;
+ using ActionHandler = std::function<bool(configuration::PostProcessingConfiguration* config,
+ xml::Element* element, IDiagnostics* diag)>;
/** Handler for <artifact> tags. */
static ActionHandler artifact_handler_;
diff --git a/tools/aapt2/configuration/ConfigurationParser_test.cpp b/tools/aapt2/configuration/ConfigurationParser_test.cpp
index 8421ee3fcff0..a4fa1344cb3b 100644
--- a/tools/aapt2/configuration/ConfigurationParser_test.cpp
+++ b/tools/aapt2/configuration/ConfigurationParser_test.cpp
@@ -32,7 +32,7 @@ namespace {
using android::ResTable_config;
using configuration::Abi;
using configuration::AndroidSdk;
-using configuration::Configuration;
+using configuration::PostProcessingConfiguration;
using configuration::DeviceFeature;
using configuration::GlTexture;
using configuration::Locale;
@@ -139,7 +139,7 @@ TEST_F(ConfigurationParserTest, ValidateFile) {
auto parser = ConfigurationParser::ForContents(kValidConfig).WithDiagnostics(&diag_);
auto result = parser.Parse();
ASSERT_TRUE(result);
- Configuration& value = result.value();
+ PostProcessingConfiguration& value = result.value();
EXPECT_EQ(2ul, value.artifacts.size());
ASSERT_TRUE(value.artifact_format);
EXPECT_EQ(
@@ -190,13 +190,13 @@ TEST_F(ConfigurationParserTest, ArtifactAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
EXPECT_EQ(1ul, config.artifacts.size());
- auto& artifact = config.artifacts.begin()->second;
+ auto& artifact = config.artifacts.front();
EXPECT_EQ("", artifact.name); // TODO: make this fail.
EXPECT_EQ("arm", artifact.abi_group.value());
EXPECT_EQ("large", artifact.screen_density_group.value());
@@ -204,6 +204,21 @@ TEST_F(ConfigurationParserTest, ArtifactAction) {
EXPECT_EQ("19", artifact.android_sdk_group.value());
EXPECT_EQ("dxt1", artifact.gl_texture_group.value());
EXPECT_EQ("low-latency", artifact.device_feature_group.value());
+
+ // Perform a second action to ensure we get 2 artifacts.
+ static constexpr const char* second = R"xml(
+ <artifact
+ abi-group="other"
+ screen-density-group="large"
+ locale-group="europe"
+ android-sdk-group="19"
+ gl-texture-group="dxt1"
+ device-feature-group="low-latency"/>)xml";
+ doc = test::BuildXmlDom(second);
+
+ ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
+ ASSERT_TRUE(ok);
+ EXPECT_EQ(2ul, config.artifacts.size());
}
TEST_F(ConfigurationParserTest, ArtifactFormatAction) {
@@ -214,7 +229,7 @@ TEST_F(ConfigurationParserTest, ArtifactFormatAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = artifact_format_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
ASSERT_TRUE(config.artifact_format);
@@ -237,7 +252,7 @@ TEST_F(ConfigurationParserTest, AbiGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = abi_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
@@ -260,7 +275,7 @@ TEST_F(ConfigurationParserTest, ScreenDensityGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok =
screen_density_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
@@ -290,7 +305,7 @@ TEST_F(ConfigurationParserTest, LocaleGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = locale_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
@@ -326,7 +341,7 @@ TEST_F(ConfigurationParserTest, AndroidSdkGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = android_sdk_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
@@ -358,7 +373,7 @@ TEST_F(ConfigurationParserTest, GlTextureGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok = gl_texture_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
@@ -387,7 +402,7 @@ TEST_F(ConfigurationParserTest, DeviceFeatureGroupAction) {
auto doc = test::BuildXmlDom(xml);
- Configuration config;
+ PostProcessingConfiguration config;
bool ok
= device_feature_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
ASSERT_TRUE(ok);
diff --git a/tools/aapt2/filter/AbiFilter.cpp b/tools/aapt2/filter/AbiFilter.cpp
new file mode 100644
index 000000000000..cb96235f98f9
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AbiFilter.h"
+
+#include <memory>
+
+#include "io/Util.h"
+
+namespace aapt {
+
+std::unique_ptr<AbiFilter> AbiFilter::FromAbiList(const std::vector<configuration::Abi>& abi_list) {
+ std::unordered_set<std::string> abi_set;
+ for (auto& abi : abi_list) {
+ abi_set.insert(configuration::AbiToString(abi));
+ }
+ // Make unique by hand as the constructor is private.
+ return std::unique_ptr<AbiFilter>(new AbiFilter(abi_set));
+}
+
+bool AbiFilter::Keep(const std::string& path) {
+ // We only care about libraries.
+ if (!util::StartsWith(path, kLibPrefix)) {
+ return true;
+ }
+
+ auto abi_end = path.find('/', kLibPrefixLen);
+ if (abi_end == std::string::npos) {
+ // Ignore any files in the top level lib directory.
+ return true;
+ }
+
+ // Strip the lib/ prefix.
+ const std::string& path_abi = path.substr(kLibPrefixLen, abi_end - kLibPrefixLen);
+ return (abis_.find(path_abi) != abis_.end());
+}
+
+} // namespace aapt
diff --git a/tools/aapt2/filter/AbiFilter.h b/tools/aapt2/filter/AbiFilter.h
new file mode 100644
index 000000000000..d875cb2b127b
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2017 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 AAPT2_ABISPLITTER_H
+#define AAPT2_ABISPLITTER_H
+
+#include <memory>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "configuration/ConfigurationParser.h"
+#include "filter/Filter.h"
+
+namespace aapt {
+
+/**
+ * Filters native library paths by ABI. ABIs present in the filter list are kept and all over
+ * libraries are removed. The filter is only applied to native library paths (this under lib/).
+ */
+class AbiFilter : public IPathFilter {
+ public:
+ /** Factory method to create a filter from a list of configuration::Abi. */
+ static std::unique_ptr<AbiFilter> FromAbiList(const std::vector<configuration::Abi>& abi_list);
+
+ /** Returns true if the path is for a native library in the list of desired ABIs. */
+ bool Keep(const std::string& path) override;
+
+ private:
+ explicit AbiFilter(std::unordered_set<std::string> abis) : abis_(std::move(abis)) {
+ }
+
+ /** The path prefix to where all native libs end up inside an APK file. */
+ static constexpr const char* kLibPrefix = "lib/";
+ static constexpr size_t kLibPrefixLen = 4;
+ const std::unordered_set<std::string> abis_;
+};
+
+} // namespace aapt
+
+#endif // AAPT2_ABISPLITTER_H
diff --git a/tools/aapt2/filter/AbiFilter_test.cpp b/tools/aapt2/filter/AbiFilter_test.cpp
new file mode 100644
index 000000000000..0c8ea3575a29
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter_test.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "filter/AbiFilter.h"
+
+#include <string>
+
+#include "gtest/gtest.h"
+
+namespace aapt {
+namespace {
+
+using ::aapt::configuration::Abi;
+
+struct TestData {
+ std::string path;
+ bool kept;
+};
+
+const TestData kTestData[] = {
+ /* Keep. */
+ {"lib/mips/libnative.so", true},
+ {"not/native/file.txt", true},
+ // Not sure if this is a valid use case.
+ {"lib/listing.txt", true},
+ {"lib/mips/foo/bar/baz.so", true},
+ {"lib/mips/x86/foo.so", true},
+ /* Discard. */
+ {"lib/mips_horse/foo.so", false},
+ {"lib/horse_mips/foo.so", false},
+ {"lib/mips64/armeabi-v7a/foo.so", false},
+ {"lib/mips64/x86_64/x86.so", false},
+ {"lib/x86/libnative.so", false},
+ {"lib/x86/foo/bar/baz.so", false},
+ {"lib/x86/x86/foo.so", false},
+ {"lib/x86_horse/foo.so", false},
+ {"lib/horse_x86/foo.so", false},
+ {"lib/x86/armeabi-v7a/foo.so", false},
+ {"lib/x86_64/x86_64/x86.so", false},
+};
+
+class AbiFilterTest : public ::testing::TestWithParam<TestData> {};
+
+TEST_P(AbiFilterTest, Keep) {
+ auto mips = AbiFilter::FromAbiList({Abi::kMips});
+ const TestData& data = GetParam();
+ EXPECT_EQ(mips->Keep(data.path), data.kept);
+}
+
+INSTANTIATE_TEST_CASE_P(NativePaths, AbiFilterTest, ::testing::ValuesIn(kTestData));
+
+} // namespace
+} // namespace aapt
diff --git a/tools/aapt2/filter/Filter.h b/tools/aapt2/filter/Filter.h
new file mode 100644
index 000000000000..d737dc92e87b
--- /dev/null
+++ b/tools/aapt2/filter/Filter.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 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 AAPT2_FILTER_H
+#define AAPT2_FILTER_H
+
+#include <string>
+#include <vector>
+
+#include "util/Util.h"
+
+namespace aapt {
+
+/** A filter to be applied to a path segment. */
+class IPathFilter {
+ public:
+ ~IPathFilter() = default;
+
+ /** Returns true if the path should be kept. */
+ virtual bool Keep(const std::string& path) = 0;
+};
+
+/**
+ * Path filter that keeps anything that matches the provided prefix.
+ */
+class PrefixFilter : public IPathFilter {
+ public:
+ explicit PrefixFilter(std::string prefix) : prefix_(std::move(prefix)) {
+ }
+
+ /** Returns true if the provided path matches the prefix. */
+ bool Keep(const std::string& path) override {
+ return util::StartsWith(path, prefix_);
+ }
+
+ private:
+ const std::string prefix_;
+};
+
+/** Applies a set of IPathFilters to a path and returns true iif all filters keep the path. */
+class FilterChain : public IPathFilter {
+ public:
+ /** Adds a filter to the list to be applied to each path. */
+ void AddFilter(std::unique_ptr<IPathFilter> filter) {
+ filters_.push_back(std::move(filter));
+ }
+
+ /** Returns true if all filters keep the path. */
+ bool Keep(const std::string& path) override {
+ for (auto& filter : filters_) {
+ if (!filter->Keep(path)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private:
+ std::vector<std::unique_ptr<IPathFilter>> filters_;
+};
+
+} // namespace aapt
+
+#endif // AAPT2_FILTER_H
diff --git a/tools/aapt2/filter/Filter_test.cpp b/tools/aapt2/filter/Filter_test.cpp
new file mode 100644
index 000000000000..fb75a4b4d7c1
--- /dev/null
+++ b/tools/aapt2/filter/Filter_test.cpp
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "filter/Filter.h"
+
+#include <string>
+
+#include "io/Util.h"
+
+#include "gtest/gtest.h"
+
+namespace aapt {
+namespace {
+
+TEST(FilterChainTest, EmptyChain) {
+ FilterChain chain;
+ ASSERT_TRUE(chain.Keep("some/random/path"));
+}
+
+TEST(FilterChainTest, SingleFilter) {
+ FilterChain chain;
+ chain.AddFilter(util::make_unique<PrefixFilter>("keep/"));
+
+ ASSERT_FALSE(chain.Keep("removed/path"));
+ ASSERT_TRUE(chain.Keep("keep/path/1"));
+ ASSERT_TRUE(chain.Keep("keep/path/2"));
+}
+
+TEST(FilterChainTest, MultipleFilters) {
+ FilterChain chain;
+ chain.AddFilter(util::make_unique<PrefixFilter>("keep/"));
+ chain.AddFilter(util::make_unique<PrefixFilter>("keep/really/"));
+
+ ASSERT_FALSE(chain.Keep("removed/path"));
+ ASSERT_FALSE(chain.Keep("/keep/really/wrong/prefix"));
+ ASSERT_FALSE(chain.Keep("keep/maybe/1"));
+ ASSERT_TRUE(chain.Keep("keep/really/1"));
+}
+
+} // namespace
+} // namespace aapt