diff --git a/Android.bp b/Android.bp index 571182b6a03f2939f7000f945d55bf3a32240a13..9b68afde5cc264f49c8d5ec2b34c8fbdd0fae939 100755 --- a/Android.bp +++ b/Android.bp @@ -103,6 +103,8 @@ java_defaults { "core/java/android/app/backup/IRestoreObserver.aidl", "core/java/android/app/backup/IRestoreSession.aidl", "core/java/android/app/backup/ISelectBackupTransportCallback.aidl", + "core/java/android/app/role/IRoleManager.aidl", + "core/java/android/app/role/IRoleManagerCallback.aidl", "core/java/android/app/slice/ISliceManager.aidl", "core/java/android/app/slice/ISliceListener.aidl", "core/java/android/app/timedetector/ITimeDetectorService.aidl", @@ -148,6 +150,8 @@ java_defaults { "core/java/android/content/pm/dex/ISnapshotRuntimeProfileCallback.aidl", "core/java/android/content/pm/permission/IRuntimePermissionPresenter.aidl", "core/java/android/database/IContentObserver.aidl", + "core/java/android/debug/IAdbManager.aidl", + "core/java/android/debug/IAdbTransport.aidl", ":libcamera_client_aidl", ":libcamera_client_framework_aidl", "core/java/android/hardware/IConsumerIrService.aidl", @@ -177,6 +181,7 @@ java_defaults { "core/java/android/hardware/input/IInputManager.aidl", "core/java/android/hardware/input/IInputDevicesChangedListener.aidl", "core/java/android/hardware/input/ITabletModeChangedListener.aidl", + "core/java/android/hardware/iris/IIrisService.aidl", "core/java/android/hardware/location/IActivityRecognitionHardware.aidl", "core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl", "core/java/android/hardware/location/IActivityRecognitionHardwareSink.aidl", @@ -233,8 +238,7 @@ java_defaults { "core/java/android/os/IDeviceIdentifiersPolicyService.aidl", "core/java/android/os/IDeviceIdleController.aidl", "core/java/android/os/IHardwarePropertiesManager.aidl", - "core/java/android/os/IIncidentManager.aidl", - "core/java/android/os/IIncidentReportStatusListener.aidl", + ":libincident_aidl", "core/java/android/os/IMaintenanceActivityListener.aidl", "core/java/android/os/IMessenger.aidl", "core/java/android/os/INetworkActivityListener.aidl", @@ -247,8 +251,7 @@ java_defaults { "core/java/android/os/IRecoverySystemProgressListener.aidl", "core/java/android/os/IRemoteCallback.aidl", "core/java/android/os/ISchedulingPolicyService.aidl", - "core/java/android/os/IStatsCompanionService.aidl", - "core/java/android/os/IStatsManager.aidl", + ":statsd_aidl", "core/java/android/os/ISystemUpdateManager.aidl", "core/java/android/os/IThermalEventListener.aidl", "core/java/android/os/IThermalService.aidl", @@ -259,6 +262,7 @@ java_defaults { "core/java/android/os/storage/IStorageEventListener.aidl", "core/java/android/os/storage/IStorageShutdownObserver.aidl", "core/java/android/os/storage/IObbActionListener.aidl", + "core/java/android/rolecontrollerservice/IRoleControllerService.aidl", ":keystore_aidl", "core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl", "core/java/android/service/autofill/IAutoFillService.aidl", @@ -283,6 +287,8 @@ java_defaults { "core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl", "core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl", "core/java/android/service/gatekeeper/IGateKeeperService.aidl", + "core/java/android/service/intelligence/IIntelligenceService.aidl", + "core/java/android/service/notification/INotificationListener.aidl", "core/java/android/service/notification/IStatusBarNotificationHolder.aidl", "core/java/android/service/notification/IConditionListener.aidl", @@ -339,6 +345,7 @@ java_defaults { "core/java/android/view/autofill/IAutoFillManager.aidl", "core/java/android/view/autofill/IAutoFillManagerClient.aidl", "core/java/android/view/autofill/IAutofillWindowPresenter.aidl", + "core/java/android/view/intelligence/IIntelligenceManager.aidl", "core/java/android/view/IApplicationToken.aidl", "core/java/android/view/IAppTransitionAnimationSpecsFuture.aidl", "core/java/android/view/IDockedStackListener.aidl", @@ -386,6 +393,9 @@ java_defaults { "core/java/com/android/internal/backup/IObbBackupService.aidl", "core/java/com/android/internal/inputmethod/IInputContentUriToken.aidl", "core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl", + "core/java/com/android/internal/inputmethod/IMultiClientInputMethod.aidl", + "core/java/com/android/internal/inputmethod/IMultiClientInputMethodPrivilegedOperations.aidl", + "core/java/com/android/internal/inputmethod/IMultiClientInputMethodSession.aidl", "core/java/com/android/internal/net/INetworkWatchlistManager.aidl", "core/java/com/android/internal/policy/IKeyguardDrawnCallback.aidl", "core/java/com/android/internal/policy/IKeyguardDismissCallback.aidl", @@ -527,6 +537,7 @@ java_defaults { "telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl", "telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl", "telephony/java/android/telephony/mbms/vendor/IMbmsGroupCallService.aidl", + "telephony/java/android/telephony/ICellInfoCallback.aidl", "telephony/java/android/telephony/INetworkService.aidl", "telephony/java/android/telephony/INetworkServiceCallback.aidl", "telephony/java/com/android/ims/internal/IImsCallSession.aidl", @@ -561,7 +572,6 @@ java_defaults { "telephony/java/com/android/internal/telephony/IOnSubscriptionsChangedListener.aidl", "telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl", "telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl", - "telephony/java/com/android/internal/telephony/IRcs.aidl", "telephony/java/com/android/internal/telephony/ISms.aidl", "telephony/java/com/android/internal/telephony/ISub.aidl", "telephony/java/com/android/internal/telephony/IAns.aidl", @@ -592,6 +602,9 @@ java_defaults { "telephony/java/com/android/internal/telephony/euicc/ISetDefaultSmdpAddressCallback.aidl", "telephony/java/com/android/internal/telephony/euicc/ISetNicknameCallback.aidl", "telephony/java/com/android/internal/telephony/euicc/ISwitchToProfileCallback.aidl", + "telephony/java/com/android/internal/telephony/rcs/IRcs.aidl", + "wifi/java/android/net/wifi/INetworkRequestMatchCallback.aidl", + "wifi/java/android/net/wifi/INetworkRequestUserSelectionCallback.aidl", "wifi/java/android/net/wifi/ISoftApCallback.aidl", "wifi/java/android/net/wifi/ITrafficStateCallback.aidl", "wifi/java/android/net/wifi/IWifiManager.aidl", @@ -692,6 +705,7 @@ java_defaults { ], static_libs: [ + "apex_aidl_interface-java", "framework-protos", "mediaplayer2-protos", "android.hidl.base-V1.0-java", @@ -699,6 +713,8 @@ java_defaults { "android.hardware.contexthub-V1.0-java", "android.hardware.health-V1.0-java-constants", "android.hardware.thermal-V1.0-java-constants", + "android.hardware.thermal-V1.1-java", + "android.hardware.thermal-V2.0-java", "android.hardware.tv.input-V1.0-java-constants", "android.hardware.usb-V1.0-java-constants", "android.hardware.usb-V1.1-java-constants", @@ -724,6 +740,22 @@ java_defaults { } +filegroup { + name: "libincident_aidl", + srcs: [ + "core/java/android/os/IIncidentManager.aidl", + "core/java/android/os/IIncidentReportStatusListener.aidl", + ], +} + +filegroup { + name: "statsd_aidl", + srcs: [ + "core/java/android/os/IStatsCompanionService.aidl", + "core/java/android/os/IStatsManager.aidl", + ], +} + java_library { name: "framework", defaults: ["framework-defaults"], @@ -741,6 +773,16 @@ java_library { ], } +// A host library containing the inspector annotations for inspector-annotation-processor. +java_library_host { + name: "inspector-annotation", + srcs: [ + "core/java/android/view/inspector/InspectableChildren.java", + "core/java/android/view/inspector/InspectableNodeName.java", + "core/java/android/view/inspector/InspectableProperty.java", + ], +} + // A host library including just UnsupportedAppUsage.java so that the annotation // processor can also use this annotation. java_library_host { @@ -934,12 +976,14 @@ gensrcs { "core/proto/android/os/batterytype.proto", "core/proto/android/os/cpufreq.proto", "core/proto/android/os/cpuinfo.proto", + "core/proto/android/os/data.proto", "core/proto/android/os/kernelwake.proto", "core/proto/android/os/pagetypeinfo.proto", "core/proto/android/os/procrank.proto", "core/proto/android/os/ps.proto", "core/proto/android/os/system_properties.proto", "core/proto/android/util/event_log_tags.proto", + "core/proto/android/util/log.proto", ], // Append protoc-gen-cppstream tool's PATH otherwise aprotoc can't find the plugin tool @@ -1159,6 +1203,7 @@ stubs_defaults { ":openjdk_javadoc_files", ":non_openjdk_javadoc_files", ":android_icu4j_src_files_for_docs", + ":conscrypt_public_api_files", "test-mock/src/**/*.java", "test-runner/src/**/*.java", ], @@ -1219,6 +1264,7 @@ stubs_defaults { ":openjdk_javadoc_files", ":non_openjdk_javadoc_files", ":android_icu4j_src_files_for_docs", + ":conscrypt_public_api_files", ], srcs_lib: "framework", srcs_lib_whitelist_dirs: frameworks_base_subdirs, @@ -1549,6 +1595,10 @@ droidstubs { droidstubs { name: "hiddenapi-mappings", defaults: ["metalava-api-stubs-default"], + srcs: [ + ":openjdk_java_files", + ":non_openjdk_java_files", + ], arg_files: [ "core/res/AndroidManifest.xml", ], diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg index 5c212213f2d1db8874dc2bc0bc4c7e5a2e998960..ec3366c2eb2f7532fb327ecf8d935d2aa9cfe601 100644 --- a/PREUPLOAD.cfg +++ b/PREUPLOAD.cfg @@ -1,20 +1,5 @@ [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} - -fw core/ - graphics/java/android - packages/PrintRecommendationService/ - packages/PrintSpooler/ - packages/PackageInstaller/ - packages/SystemUI/ - services/print/ - services/usb/ - telephony/ - tests/ActivityViewTest/ - tests/LotsOfApps/ - tests/NativeProcessesMemoryTest/ - tests/OdmApps/ - tests/SystemMemoryTest/ - wifi/ api_lint_hook = ${REPO_ROOT}/frameworks/base/tools/apilint/apilint_sha.sh ${PREUPLOAD_COMMIT} diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java index eed1db032d9f233ea7ffc9951028d5cebcc7cd40..c742df3b882bba8876c03ae043721e92b330b497 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java @@ -17,14 +17,14 @@ package android.graphics.perftests; import android.graphics.Bitmap; -import android.graphics.Color; import android.graphics.Bitmap.Config; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -43,7 +43,7 @@ public class CanvasPerfTest { RenderNode child = RenderNode.create("child", null); child.setLeftTopRightBottom(50, 50, 100, 100); - DisplayListCanvas canvas = node.start(100, 100); + RecordingCanvas canvas = node.start(100, 100); node.end(canvas); canvas = child.start(50, 50); canvas.drawColor(Color.WHITE); @@ -70,7 +70,7 @@ public class CanvasPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode node = RenderNode.create("benchmark", null); - DisplayListCanvas canvas = node.start(100, 100); + RecordingCanvas canvas = node.start(100, 100); node.end(canvas); Bitmap bitmap = Bitmap.createBitmap(80, 80, Config.ARGB_8888); Paint paint = new Paint(); diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java index 3a4fc7206712ed383d82687367456d30fa6d94f4..f9c3758045997fbf7008905545d44ce00a72c7ea 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java @@ -20,7 +20,6 @@ import android.graphics.Outline; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java index a283e0664bc68d26a916e72254965fe8a38e4aee..62dd124beb861976bbb54355e1b65c9417f46417 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java @@ -17,17 +17,14 @@ package android.graphics.perftests; import android.graphics.Outline; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; -import java.util.ArrayList; - @LargeTest public class RenderNodePerfTest { @Rule @@ -64,7 +61,7 @@ public class RenderNodePerfTest { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode node = RenderNode.create("LinearLayout", null); while (state.keepRunning()) { - node.isValid(); + node.hasDisplayList(); } } @@ -73,8 +70,8 @@ public class RenderNodePerfTest { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode node = RenderNode.create("LinearLayout", null); while (state.keepRunning()) { - DisplayListCanvas canvas = node.start(100, 100); - node.end(canvas); + node.startRecording(100, 100); + node.endRecording(); } } @@ -82,17 +79,16 @@ public class RenderNodePerfTest { public void testStartEndDeepHierarchy() { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode[] nodes = new RenderNode[30]; - DisplayListCanvas[] canvases = new DisplayListCanvas[nodes.length]; for (int i = 0; i < nodes.length; i++) { nodes[i] = RenderNode.create("LinearLayout", null); } while (state.keepRunning()) { for (int i = 0; i < nodes.length; i++) { - canvases[i] = nodes[i].start(100, 100); + nodes[i].startRecording(100, 100); } for (int i = nodes.length - 1; i >= 0; i--) { - nodes[i].end(canvases[i]); + nodes[i].endRecording(); } } } diff --git a/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java b/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java index d8d4a6efb6e80a967c922843a8ea6fa4064db86e..5be0cb02510554a12e57c1452e973c705465cf39 100644 --- a/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java +++ b/apct-tests/perftests/core/src/android/os/BinderCallsStatsPerfTest.java @@ -38,6 +38,23 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) @LargeTest public class BinderCallsStatsPerfTest { + private static final int DEFAULT_BUCKET_SIZE = 1000; + static class FakeCpuTimeBinderCallsStats extends BinderCallsStats { + private int mTimeMs; + + FakeCpuTimeBinderCallsStats() { + super(new BinderCallsStats.Injector()); + setDeviceState(new CachedDeviceState(false, false).getReadonlyClient()); + } + + protected long getThreadTimeMicro() { + return mTimeMs++; + } + + protected long getElapsedRealtimeMicro() { + return mTimeMs++; + } + } @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); @@ -57,28 +74,50 @@ public class BinderCallsStatsPerfTest { @Test public void timeCallSession() { mBinderCallsStats.setDetailedTracking(true); - runScenario(); + runScenario(DEFAULT_BUCKET_SIZE); } @Test public void timeCallSessionOnePercentSampling() { mBinderCallsStats.setDetailedTracking(false); mBinderCallsStats.setSamplingInterval(100); - runScenario(); + runScenario(DEFAULT_BUCKET_SIZE); } @Test public void timeCallSessionTrackingDisabled() { mBinderCallsStats.setDetailedTracking(false); - runScenario(); + runScenario(DEFAULT_BUCKET_SIZE); + } + + @Test + public void timeCallSession_1000_buckets_cpuNotRecorded() { + mBinderCallsStats = new FakeCpuTimeBinderCallsStats(); + mBinderCallsStats.setSamplingInterval(1); + runScenario(/* max bucket size */ 1000); + } + + @Test + public void timeCallSession_500_buckets_cpuNotRecorded() { + mBinderCallsStats = new FakeCpuTimeBinderCallsStats(); + mBinderCallsStats.setSamplingInterval(1); + runScenario(/* max bucket size */ 500); + } + + @Test + public void timeCallSession_100_buckets_cpuNotRecorded() { + mBinderCallsStats = new FakeCpuTimeBinderCallsStats(); + mBinderCallsStats.setSamplingInterval(1); + runScenario(/* max bucket size */ 100); } - private void runScenario() { + // There will be a warmup time of maxBucketSize to initialize the map of CallStat. + private void runScenario(int maxBucketSize) { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); Binder b = new Binder(); while (state.keepRunning()) { - for (int i = 0; i < 1000; i++) { - CallSession s = mBinderCallsStats.callStarted(b, i % 100); + for (int i = 0; i < 10000; i++) { + CallSession s = mBinderCallsStats.callStarted(b, i % maxBucketSize); mBinderCallsStats.callEnded(s, 0, 0); } } diff --git a/apct-tests/perftests/core/src/android/os/KernelCpuThreadReaderPerfTest.java b/apct-tests/perftests/core/src/android/os/KernelCpuThreadReaderPerfTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9034034539e946ae495faf8653692ef204e021ba --- /dev/null +++ b/apct-tests/perftests/core/src/android/os/KernelCpuThreadReaderPerfTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.os; + +import static org.junit.Assert.assertNotNull; + +import android.perftests.utils.BenchmarkState; +import android.perftests.utils.PerfStatusReporter; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; + +import com.android.internal.os.KernelCpuThreadReader; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + + +/** + * Performance tests collecting per-thread CPU data. + */ +@RunWith(AndroidJUnit4.class) +@LargeTest +public class KernelCpuThreadReaderPerfTest { + @Rule + public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); + + private final KernelCpuThreadReader mKernelCpuThreadReader = KernelCpuThreadReader.create(); + + @Test + public void timeReadCurrentProcessCpuUsage() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + assertNotNull(mKernelCpuThreadReader); + while (state.keepRunning()) { + this.mKernelCpuThreadReader.getCurrentProcessCpuUsage(); + } + } +} diff --git a/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java index 64f2800ee1127fc701e2400780dc71ffae7dcb1d..9245c1ba59e422b82f656d2f0104192ece30033b 100644 --- a/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java @@ -18,12 +18,12 @@ package android.text; import static android.text.Layout.Alignment.ALIGN_NORMAL; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -120,7 +120,7 @@ public class BoringLayoutCreateDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); final int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/CanvasDrawTextTest.java b/apct-tests/perftests/core/src/android/text/CanvasDrawTextTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ad9fb5f5e99fe70845daa2958a7f4a0d3e31b49d --- /dev/null +++ b/apct-tests/perftests/core/src/android/text/CanvasDrawTextTest.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.text; + +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; +import android.perftests.utils.BenchmarkState; +import android.perftests.utils.PerfStatusReporter; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Random; + +@LargeTest +@RunWith(AndroidJUnit4.class) +public class CanvasDrawTextTest { + private static final int WORD_LENGTH = 9; // Random word has 9 characters. + + private static final TextPaint PAINT = new TextPaint(); + + @Rule + public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); + + private TextPerfUtils mTextUtil = new TextPerfUtils(); + + @Before + public void setUp() { + mTextUtil.resetRandom(0 /* seed */); + } + + @Test + public void drawText_LongText_SmallWindow() { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + final String text = mTextUtil.nextRandomParagraph( + WORD_LENGTH, 4 * 1024 * 1024 /* 4mb text */).toString(); + final RenderNode node = RenderNode.create("benchmark", null); + final RenderNode child = RenderNode.create("child", null); + child.setLeftTopRightBottom(50, 50, 100, 100); + + RecordingCanvas canvas = node.start(100, 100); + node.end(canvas); + canvas = child.start(50, 50); + child.end(canvas); + + final Random r = new Random(0); + + while (state.keepRunning()) { + int start = r.nextInt(text.length() - 100); + canvas.drawText(text, start, start + 100, 0, 0, PAINT); + } + } +} diff --git a/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java index ad5a34e449977d3fe17a2591f65e0f77ea01abe9..a7972f59f382fbc68e4fe0802e2d05844a36a013 100644 --- a/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java @@ -17,11 +17,11 @@ package android.text; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -107,7 +107,7 @@ public class PaintMeasureDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); final int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java b/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java index d98df059e2d3fcaa60773d17e65c589fc6ca19ad..00a626750c796e18c185911d016111f80861238d 100644 --- a/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java +++ b/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java @@ -16,32 +16,16 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - -import android.perftests.utils.BenchmarkState; -import android.perftests.utils.PerfStatusReporter; - -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4; - import android.app.Activity; import android.os.Bundle; import android.support.test.InstrumentationRegistry; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; import java.util.Locale; @LargeTest diff --git a/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java b/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java index 1cd0ae13069bb42f3aefbd2b210ae41546edb25c..33b1a47413c8b642a0349833f03c1a2b54fed159 100644 --- a/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java @@ -16,30 +16,16 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; - import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; - @LargeTest @RunWith(AndroidJUnit4.class) public class PrecomputedTextPerfTest { diff --git a/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java index deb2b0a74aaa7fa9f32d87931cc247578ad041be..b40dd6b9dbb782576ca0fd3e798ac1a712b3a477 100644 --- a/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java @@ -18,12 +18,12 @@ package android.text; import static android.text.Layout.Alignment.ALIGN_NORMAL; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -119,7 +119,7 @@ public class StaticLayoutCreateDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java index e1a38a0956d70177a1ccf6374133f55b0c94b4e7..35d380232bec686d2e7055eaba2fc01b68478cda 100644 --- a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java @@ -16,30 +16,19 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - +import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; - import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; - @LargeTest @RunWith(AndroidJUnit4.class) public class StaticLayoutPerfTest { @@ -256,10 +245,11 @@ public class StaticLayoutPerfTest { state.pauseTiming(); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -272,10 +262,11 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -288,10 +279,11 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -304,11 +296,12 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -321,11 +314,12 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -339,10 +333,11 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -356,10 +351,11 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -373,11 +369,12 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } @@ -391,11 +388,12 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.startRecording(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); layout.draw(c); + node.endRecording(); } } diff --git a/apct-tests/perftests/core/src/android/text/TextPerfUtils.java b/apct-tests/perftests/core/src/android/text/TextPerfUtils.java index aa505b533f267f118b2592c16c785c1351b31be0..2a98ebf2c58d731554c9eb347bba7a523488e876 100644 --- a/apct-tests/perftests/core/src/android/text/TextPerfUtils.java +++ b/apct-tests/perftests/core/src/android/text/TextPerfUtils.java @@ -16,32 +16,15 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - -import android.perftests.utils.BenchmarkState; -import android.perftests.utils.PerfStatusReporter; - -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4; - import android.content.res.ColorStateList; -import android.graphics.Canvas; import android.graphics.Typeface; import android.icu.text.UnicodeSet; import android.icu.text.UnicodeSetIterator; -import android.text.Layout; import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; import java.nio.CharBuffer; -import java.util.Random; import java.util.ArrayList; +import java.util.Random; public class TextPerfUtils { @@ -82,18 +65,23 @@ public class TextPerfUtils { } public CharSequence nextRandomParagraph(int wordLen, boolean applyRandomStyle, String setStr) { - return nextRandomParagraph(wordLen, applyRandomStyle, UnicodeSetToArray(setStr)); + return nextRandomParagraph(wordLen, PARA_LENGTH, applyRandomStyle, + UnicodeSetToArray(setStr)); } public CharSequence nextRandomParagraph(int wordLen, boolean applyRandomStyle) { - return nextRandomParagraph(wordLen, applyRandomStyle, ALPHABET); + return nextRandomParagraph(wordLen, PARA_LENGTH, applyRandomStyle, ALPHABET); + } + + public CharSequence nextRandomParagraph(int wordLen, int paraLength) { + return nextRandomParagraph(wordLen, paraLength, false /* no style */, ALPHABET); } - public CharSequence nextRandomParagraph(int wordLen, boolean applyRandomStyle, + public CharSequence nextRandomParagraph(int wordLen, int paraLength, boolean applyRandomStyle, String[] charSet) { ArrayList chars = new ArrayList<>(); ArrayList wordOffsets = new ArrayList<>(); - for (int i = 0; i < PARA_LENGTH; i++) { + for (int i = 0; i < paraLength; i++) { if (i % (wordLen + 1) == wordLen) { chars.add(' '); wordOffsets.add(chars.size()); diff --git a/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java b/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java index 4bbe4049ba35b5b2aea689b415ff4082c7c40769..25cc7078762a70608fe2205c6ebb50fcc3768722 100644 --- a/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java +++ b/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java @@ -19,13 +19,13 @@ import static android.view.View.MeasureSpec.AT_MOST; import static android.view.View.MeasureSpec.UNSPECIFIED; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import android.widget.TextView; import org.junit.Rule; @@ -128,7 +128,7 @@ public class TextViewSetTextMeasurePerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); int save = canvas.save(); textView.setTextLocale(Locale.UK); textView.setTextLocale(Locale.US); diff --git a/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java b/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0c1f2899690dd51517cbfc7b1b40e0ce14731533 --- /dev/null +++ b/apct-tests/perftests/core/src/android/util/ArraySetPerfTest.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import android.perftests.utils.BenchmarkState; +import android.perftests.utils.PerfStatusReporter; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.function.Predicate; + +@RunWith(AndroidJUnit4.class) +@LargeTest +public class ArraySetPerfTest { + private static final int NUM_ITERATIONS = 100; + private static final int SET_SIZE_SMALL = 10; + private static final int SET_SIZE_LARGE = 50; + + @Rule + public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); + + @Test + public void testValueAt_InBounds() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + ArraySet set = new ArraySet<>(); + set.add(0); + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + set.valueAt(0); + } + } + } + + @Test + public void testValueAt_OutOfBounds_Negative() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + ArraySet set = new ArraySet<>(); + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + try { + set.valueAt(-1); + } catch (ArrayIndexOutOfBoundsException expected) { + // expected + } + } + } + } + + /** + * Tests the case where ArraySet could index into its array even though the index is out of + * bounds. + */ + @Test + public void testValueAt_OutOfBounds_EdgeCase() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + ArraySet set = new ArraySet<>(); + set.add(0); + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + try { + set.valueAt(1); + } catch (ArrayIndexOutOfBoundsException expected) { + // expected + } + } + } + } + + /** + * This is the same code as testRemoveIf_Small_* without the removeIf in order to measure + * the performance of the rest of the code in the loop. + */ + @Test + public void testRemoveIf_Small_Base() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> i % 2 == 0; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_SMALL; ++j) { + set.add(j); + } + } + } + } + + @Test + public void testRemoveIf_Small_RemoveNothing() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> false; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_SMALL; ++j) { + set.add(j); + } + set.removeIf(predicate); + } + } + } + + @Test + public void testRemoveIf_Small_RemoveAll() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> true; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_SMALL; j++) { + set.add(j); + } + set.removeIf(predicate); + } + } + } + + @Test + public void testRemoveIf_Small_RemoveHalf() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> i % 2 == 0; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_SMALL; ++j) { + set.add(j); + } + set.removeIf(predicate); + } + } + } + + /** + * This is the same code as testRemoveIf_Large_* without the removeIf in order to measure + * the performance of the rest of the code in the loop. + */ + @Test + public void testRemoveIf_Large_Base() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> i % 2 == 0; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_LARGE; ++j) { + set.add(j); + } + } + } + } + + @Test + public void testRemoveIf_Large_RemoveNothing() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> false; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_LARGE; ++j) { + set.add(j); + } + set.removeIf(predicate); + } + } + } + + @Test + public void testRemoveIf_Large_RemoveAll() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> true; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_LARGE; ++j) { + set.add(j); + } + set.removeIf(predicate); + } + } + } + + @Test + public void testRemoveIf_Large_RemoveHalf() { + BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + Predicate predicate = (i) -> i % 2 == 0; + while (state.keepRunning()) { + for (int i = 0; i < NUM_ITERATIONS; ++i) { + ArraySet set = new ArraySet<>(); + for (int j = 0; j < SET_SIZE_LARGE; ++j) { + set.add(j); + } + set.removeIf(predicate); + } + } + } +} diff --git a/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java b/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java index 6159da4fc3f5d31cd1921810c3e5e8efb95227a3..dc4d4bd782fb077c4d3575e6195c2c942c73ed09 100644 --- a/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java +++ b/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java @@ -155,7 +155,7 @@ public class ViewShowHidePerfTest { } private void updateAndValidateDisplayList(View view) { - boolean hasDisplayList = view.updateDisplayListIfDirty().isValid(); + boolean hasDisplayList = view.updateDisplayListIfDirty().hasDisplayList(); assertTrue(hasDisplayList); } diff --git a/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java b/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java index dc34b7fe057cb41b4bad36f8025514177d2f58a6..bd9111228eaca67b84dcf4ec6cb87bac5122195d 100644 --- a/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java +++ b/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java @@ -16,46 +16,29 @@ package android.widget; -import static android.view.View.MeasureSpec.AT_MOST; -import static android.view.View.MeasureSpec.EXACTLY; -import static android.view.View.MeasureSpec.UNSPECIFIED; +import static android.widget.TextView.UNKNOWN_BORING; import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Typeface; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.text.PrecomputedText; -import android.text.Layout; import android.text.BoringLayout; -import android.text.SpannableStringBuilder; -import android.text.Spanned; +import android.text.Layout; +import android.text.PrecomputedText; import android.text.TextPaint; -import android.text.style.TextAppearanceSpan; -import android.view.LayoutInflater; import android.text.TextPerfUtils; import android.view.View.MeasureSpec; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - -import com.android.perftests.core.R; - -import java.util.Random; -import java.util.Locale; import org.junit.Before; -import org.junit.Test; import org.junit.Rule; +import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.assertTrue; - -import static android.widget.TextView.UNKNOWN_BORING; - @LargeTest @RunWith(AndroidJUnit4.class) public class TextViewPrecomputedTextPerfTest { @@ -360,13 +343,14 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.startRecording( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); state.resumeTiming(); textView.onDraw(c); + node.endRecording(); } } @@ -386,13 +370,14 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.startRecording( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); state.resumeTiming(); textView.onDraw(c); + node.endRecording(); } } @@ -414,13 +399,14 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.startRecording( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); state.resumeTiming(); textView.onDraw(c); + node.endRecording(); } } @@ -443,13 +429,14 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.startRecording( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); state.resumeTiming(); textView.onDraw(c); + node.endRecording(); } } } diff --git a/api/current.txt b/api/current.txt index 1983fb483ecd533300af047823bf1ba28e845b56..5e926336147ba0ee381b1a36fdaab6a73edfe3b6 100755 --- a/api/current.txt +++ b/api/current.txt @@ -283,7 +283,6 @@ package android { field public static final int allowBackup = 16843392; // 0x1010280 field public static final int allowClearUserData = 16842757; // 0x1010005 field public static final int allowEmbedded = 16843765; // 0x10103f5 - field public static final int allowForceDark = 16844172; // 0x101058c field public static final int allowParallelSyncs = 16843570; // 0x1010332 field public static final int allowSingleTap = 16843353; // 0x1010259 field public static final int allowTaskReparenting = 16843268; // 0x1010204 @@ -638,6 +637,7 @@ package android { field public static final int fontVariationSettings = 16844144; // 0x1010570 field public static final int fontWeight = 16844083; // 0x1010533 field public static final int footerDividersEnabled = 16843311; // 0x101022f + field public static final int forceDarkAllowed = 16844172; // 0x101058c field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521 field public static final int foreground = 16843017; // 0x1010109 field public static final int foregroundGravity = 16843264; // 0x1010200 @@ -740,6 +740,7 @@ package android { field public static final int immersive = 16843456; // 0x10102c0 field public static final int importantForAccessibility = 16843690; // 0x10103aa field public static final int importantForAutofill = 16844120; // 0x1010558 + field public static final int importantForContentCapture = 16844182; // 0x1010596 field public static final int inAnimation = 16843127; // 0x1010177 field public static final int includeFontPadding = 16843103; // 0x101015f field public static final int includeInGlobalSearch = 16843374; // 0x101026e @@ -769,6 +770,7 @@ package android { field public static final int insetRight = 16843192; // 0x10101b8 field public static final int insetTop = 16843193; // 0x10101b9 field public static final int installLocation = 16843447; // 0x10102b7 + field public static final int interactiveUiTimeout = 16844181; // 0x1010595 field public static final int interpolator = 16843073; // 0x1010141 field public static final int isAlwaysSyncable = 16843571; // 0x1010333 field public static final int isAsciiCapable = 16843753; // 0x10103e9 @@ -941,7 +943,6 @@ package android { field public static final int minSdkVersion = 16843276; // 0x101020c field public static final int minWidth = 16843071; // 0x101013f field public static final int minimumHorizontalAngle = 16843901; // 0x101047d - field public static final int minimumUiTimeout = 16844175; // 0x101058f field public static final int minimumVerticalAngle = 16843902; // 0x101047e field public static final int mipMap = 16843725; // 0x10103cd field public static final int mirrorForRtl = 16843726; // 0x10103ce @@ -965,6 +966,7 @@ package android { field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 field public static final int noHistory = 16843309; // 0x101022d + field public static final int nonInteractiveUiTimeout = 16844175; // 0x101058f field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 @@ -1199,6 +1201,7 @@ package android { field public static final deprecated int selectedWeekBackgroundColor = 16843586; // 0x1010342 field public static final int sessionService = 16843837; // 0x101043d field public static final int settingsActivity = 16843301; // 0x1010225 + field public static final int settingsSliceUri = 16844179; // 0x1010593 field public static final int setupActivity = 16843766; // 0x10103f6 field public static final int shadowColor = 16843105; // 0x1010161 field public static final int shadowDx = 16843106; // 0x1010162 @@ -1208,6 +1211,7 @@ package android { field public static final int shareInterpolator = 16843195; // 0x10101bb field public static final int sharedUserId = 16842763; // 0x101000b field public static final int sharedUserLabel = 16843361; // 0x1010261 + field public static final int shell = 16844180; // 0x1010594 field public static final int shortcutDisabledMessage = 16844075; // 0x101052b field public static final int shortcutId = 16844072; // 0x1010528 field public static final int shortcutLongLabel = 16844074; // 0x101052a @@ -1842,6 +1846,10 @@ package android { field public static final int accessibilityActionContextClick = 16908348; // 0x102003c field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045 field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042 + field public static final int accessibilityActionPageDown = 16908359; // 0x1020047 + field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048 + field public static final int accessibilityActionPageRight = 16908361; // 0x1020049 + field public static final int accessibilityActionPageUp = 16908358; // 0x1020046 field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039 field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b @@ -2884,12 +2892,14 @@ package android.accessibilityservice { method public int getCapabilities(); method public deprecated java.lang.String getDescription(); method public java.lang.String getId(); - method public int getMinimumUiTimeoutMillis(); + method public int getInteractiveUiTimeoutMillis(); + method public int getNonInteractiveUiTimeoutMillis(); method public android.content.pm.ResolveInfo getResolveInfo(); method public java.lang.String getSettingsActivityName(); method public java.lang.String loadDescription(android.content.pm.PackageManager); method public java.lang.CharSequence loadSummary(android.content.pm.PackageManager); - method public void setMinimumUiTimeoutMillis(int); + method public void setInteractiveUiTimeoutMillis(int); + method public void setNonInteractiveUiTimeoutMillis(int); method public void writeToParcel(android.os.Parcel, int); field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10 field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20 @@ -5216,6 +5226,7 @@ package android.app { ctor public Notification(android.os.Parcel); method public android.app.Notification clone(); method public int describeContents(); + method public android.app.PendingIntent getAppOverlayIntent(); method public int getBadgeIconType(); method public java.lang.String getChannelId(); method public java.lang.String getGroup(); @@ -5359,6 +5370,7 @@ package android.app { field public static final android.os.Parcelable.Creator CREATOR; field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5 field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa + field public static final int SEMANTIC_ACTION_CONTEXTUAL_SUGGESTION = 11; // 0xb field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4 field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2 field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3 @@ -5445,6 +5457,7 @@ package android.app { method public android.app.Notification.Style getStyle(); method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification); method public android.app.Notification.Builder setActions(android.app.Notification.Action...); + method public android.app.Notification.Builder setAppOverlayIntent(android.app.PendingIntent); method public android.app.Notification.Builder setAutoCancel(boolean); method public android.app.Notification.Builder setBadgeIconType(int); method public android.app.Notification.Builder setCategory(java.lang.String); @@ -5662,6 +5675,7 @@ package android.app { public final class NotificationChannel implements android.os.Parcelable { ctor public NotificationChannel(java.lang.String, java.lang.CharSequence, int); method public boolean canBypassDnd(); + method public boolean canOverlayApps(); method public boolean canShowBadge(); method public int describeContents(); method public void enableLights(boolean); @@ -5676,6 +5690,8 @@ package android.app { method public java.lang.CharSequence getName(); method public android.net.Uri getSound(); method public long[] getVibrationPattern(); + method public boolean hasUserSetImportance(); + method public void setAllowAppOverlay(boolean); method public void setBypassDnd(boolean); method public void setDescription(java.lang.String); method public void setGroup(java.lang.String); @@ -5695,6 +5711,7 @@ package android.app { public final class NotificationChannelGroup implements android.os.Parcelable { ctor public NotificationChannelGroup(java.lang.String, java.lang.CharSequence); + method public boolean canOverlayApps(); method public android.app.NotificationChannelGroup clone(); method public int describeContents(); method public java.util.List getChannels(); @@ -5702,6 +5719,7 @@ package android.app { method public java.lang.String getId(); method public java.lang.CharSequence getName(); method public boolean isBlocked(); + method public void setAllowAppOverlay(boolean); method public void setDescription(java.lang.String); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -6172,6 +6190,7 @@ package android.app { public final class UiAutomation { method public void adoptShellPermissionIdentity(); + method public void adoptShellPermissionIdentity(java.lang.String...); method public void clearWindowAnimationFrameStats(); method public boolean clearWindowContentFrameStats(int); method public void dropShellPermissionIdentity(); @@ -6320,6 +6339,7 @@ package android.app { method public android.content.pm.ServiceInfo getServiceInfo(); method public java.lang.String getServiceName(); method public java.lang.String getSettingsActivity(); + method public android.net.Uri getSettingsSliceUri(); method public boolean getShowMetadataInPreview(); method public java.lang.CharSequence loadAuthor(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException; method public java.lang.CharSequence loadContextDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException; @@ -7278,6 +7298,18 @@ package android.app.job { } +package android.app.role { + + public final class RoleManager { + method public android.content.Intent createRequestRoleIntent(java.lang.String); + method public boolean isRoleAvailable(java.lang.String); + method public boolean isRoleHeld(java.lang.String); + field public static final java.lang.String ROLE_DIALER = "android.app.role.DIALER"; + field public static final java.lang.String ROLE_SMS = "android.app.role.SMS"; + } + +} + package android.app.slice { public final class Slice implements android.os.Parcelable { @@ -7550,6 +7582,8 @@ package android.app.usage { method public java.lang.String getShortcutId(); method public long getTimeStamp(); field public static final int CONFIGURATION_CHANGE = 5; // 0x5 + field public static final int FOREGROUND_SERVICE_START = 19; // 0x13 + field public static final int FOREGROUND_SERVICE_STOP = 20; // 0x14 field public static final int KEYGUARD_HIDDEN = 18; // 0x12 field public static final int KEYGUARD_SHOWN = 17; // 0x11 field public static final int MOVE_TO_BACKGROUND = 2; // 0x2 @@ -7567,9 +7601,11 @@ package android.app.usage { method public void add(android.app.usage.UsageStats); method public int describeContents(); method public long getFirstTimeStamp(); + method public long getLastTimeForegroundServiceUsed(); method public long getLastTimeStamp(); method public long getLastTimeUsed(); method public java.lang.String getPackageName(); + method public long getTotalTimeForegroundServiceUsed(); method public long getTotalTimeInForeground(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -9440,6 +9476,7 @@ package android.content { public abstract class Context { ctor public Context(); + method public abstract boolean bindIsolatedService(android.content.Intent, android.content.ServiceConnection, int, java.lang.String); method public abstract boolean bindService(android.content.Intent, android.content.ServiceConnection, int); method public abstract int checkCallingOrSelfPermission(java.lang.String); method public abstract int checkCallingOrSelfUriPermission(android.net.Uri, int); @@ -9622,6 +9659,7 @@ package android.content { field public static final java.lang.String PRINT_SERVICE = "print"; field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1 field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions"; + field public static final java.lang.String ROLE_SERVICE = "role"; field public static final java.lang.String SEARCH_SERVICE = "search"; field public static final java.lang.String SENSOR_SERVICE = "sensor"; field public static final java.lang.String SHORTCUT_SERVICE = "shortcut"; @@ -9650,6 +9688,7 @@ package android.content { public class ContextWrapper extends android.content.Context { ctor public ContextWrapper(android.content.Context); method protected void attachBaseContext(android.content.Context); + method public boolean bindIsolatedService(android.content.Intent, android.content.ServiceConnection, int, java.lang.String); method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int); method public int checkCallingOrSelfPermission(java.lang.String); method public int checkCallingOrSelfUriPermission(android.net.Uri, int); @@ -10811,6 +10850,7 @@ package android.content.pm { method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int); + method public boolean isProfileableByShell(); method public boolean isVirtualPreload(); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); field public static final int CATEGORY_AUDIO = 1; // 0x1 @@ -11152,12 +11192,17 @@ package android.content.pm { public static class PackageInstaller.Session implements java.io.Closeable { method public void abandon(); + method public void addChildSessionId(int); method public void close(); method public void commit(android.content.IntentSender); method public void fsync(java.io.OutputStream) throws java.io.IOException; + method public int[] getChildSessionIds(); method public java.lang.String[] getNames() throws java.io.IOException; + method public int getParentSessionId(); + method public boolean isMultiPackage(); method public java.io.InputStream openRead(java.lang.String) throws java.io.IOException; method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; + method public void removeChildSessionId(int); method public void removeSplit(java.lang.String) throws java.io.IOException; method public void setStagingProgress(float); method public void transfer(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; @@ -11178,20 +11223,24 @@ package android.content.pm { method public android.graphics.Bitmap getAppIcon(); method public java.lang.CharSequence getAppLabel(); method public java.lang.String getAppPackageName(); + method public int[] getChildSessionIds(); method public int getInstallLocation(); method public int getInstallReason(); method public java.lang.String getInstallerPackageName(); method public int getMode(); method public int getOriginatingUid(); method public android.net.Uri getOriginatingUri(); + method public int getParentSessionId(); method public float getProgress(); method public android.net.Uri getReferrerUri(); method public int getSessionId(); method public long getSize(); method public boolean isActive(); + method public boolean isMultiPackage(); method public boolean isSealed(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int INVALID_ID = -1; // 0xffffffff } public static class PackageInstaller.SessionParams implements android.os.Parcelable { @@ -11202,6 +11251,7 @@ package android.content.pm { method public void setAppPackageName(java.lang.String); method public void setInstallLocation(int); method public void setInstallReason(int); + method public void setMultiPackage(); method public void setOriginatingUid(int); method public void setOriginatingUri(android.net.Uri); method public void setReferrerUri(android.net.Uri); @@ -13410,6 +13460,7 @@ package android.graphics { method public boolean clipRect(float, float, float, float); method public boolean clipRect(int, int, int, int); method public void concat(android.graphics.Matrix); + method public void disableZ(); method public void drawARGB(int, int, int, int); method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint); method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint); @@ -13444,6 +13495,7 @@ package android.graphics { method public void drawRect(android.graphics.RectF, android.graphics.Paint); method public void drawRect(android.graphics.Rect, android.graphics.Paint); method public void drawRect(float, float, float, float, android.graphics.Paint); + method public void drawRenderNode(android.graphics.RenderNode); method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint); method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint); method public void drawText(char[], int, int, float, float, android.graphics.Paint); @@ -13455,6 +13507,7 @@ package android.graphics { method public void drawTextRun(char[], int, int, int, int, float, float, boolean, android.graphics.Paint); method public void drawTextRun(java.lang.CharSequence, int, int, int, int, float, float, boolean, android.graphics.Paint); method public void drawVertices(android.graphics.Canvas.VertexMode, int, float[], int, float[], int, int[], int, short[], int, int, android.graphics.Paint); + method public void enableZ(); method public boolean getClipBounds(android.graphics.Rect); method public final android.graphics.Rect getClipBounds(); method public int getDensity(); @@ -13851,6 +13904,7 @@ package android.graphics { field public static final int RAW_SENSOR = 32; // 0x20 field public static final int RGB_565 = 4; // 0x4 field public static final int UNKNOWN = 0; // 0x0 + field public static final int Y8 = 538982489; // 0x20203859 field public static final int YUV_420_888 = 35; // 0x23 field public static final int YUV_422_888 = 39; // 0x27 field public static final int YUV_444_888 = 40; // 0x28 @@ -14444,6 +14498,9 @@ package android.graphics { ctor public RadialGradient(float, float, float, int, int, android.graphics.Shader.TileMode); } + public final class RecordingCanvas extends android.graphics.Canvas { + } + public final class Rect implements android.os.Parcelable { ctor public Rect(); ctor public Rect(int, int, int, int); @@ -14580,6 +14637,77 @@ package android.graphics { method public final boolean next(android.graphics.Rect); } + public final class RenderNode { + ctor public RenderNode(java.lang.String); + method public int computeApproximateMemoryUsage(); + method public void discardDisplayList(); + method public void endRecording(); + method public float getAlpha(); + method public int getAmbientShadowColor(); + method public int getBottom(); + method public float getCameraDistance(); + method public boolean getClipToOutline(); + method public float getElevation(); + method public int getHeight(); + method public void getInverseMatrix(android.graphics.Matrix); + method public int getLeft(); + method public void getMatrix(android.graphics.Matrix); + method public float getPivotX(); + method public float getPivotY(); + method public int getRight(); + method public float getRotation(); + method public float getRotationX(); + method public float getRotationY(); + method public float getScaleX(); + method public float getScaleY(); + method public int getSpotShadowColor(); + method public int getTop(); + method public float getTranslationX(); + method public float getTranslationY(); + method public float getTranslationZ(); + method public int getWidth(); + method public boolean hasDisplayList(); + method public boolean hasIdentityMatrix(); + method public boolean hasOverlappingRendering(); + method public boolean hasShadow(); + method public boolean isForceDarkAllowed(); + method public boolean isPivotExplicitlySet(); + method public boolean offsetLeftAndRight(int); + method public boolean offsetTopAndBottom(int); + method public boolean resetPivot(); + method public boolean setAlpha(float); + method public boolean setAmbientShadowColor(int); + method public boolean setBottom(int); + method public boolean setCameraDistance(float); + method public boolean setClipBounds(android.graphics.Rect); + method public boolean setClipToBounds(boolean); + method public boolean setClipToOutline(boolean); + method public boolean setElevation(float); + method public boolean setForceDarkAllowed(boolean); + method public boolean setHasOverlappingRendering(boolean); + method public boolean setLeft(int); + method public boolean setLeftTopRightBottom(int, int, int, int); + method public boolean setOutline(android.graphics.Outline); + method public boolean setPivotX(float); + method public boolean setPivotY(float); + method public boolean setProjectBackwards(boolean); + method public boolean setProjectionReceiver(boolean); + method public boolean setRight(int); + method public boolean setRotation(float); + method public boolean setRotationX(float); + method public boolean setRotationY(float); + method public boolean setScaleX(float); + method public boolean setScaleY(float); + method public boolean setSpotShadowColor(int); + method public boolean setTop(int); + method public boolean setTranslationX(float); + method public boolean setTranslationY(float); + method public boolean setTranslationZ(float); + method public boolean setUseCompositingLayer(boolean, android.graphics.Paint); + method public android.graphics.RecordingCanvas startRecording(int, int); + method public android.graphics.RecordingCanvas startRecording(); + } + public class Shader { ctor public deprecated Shader(); method public boolean getLocalMatrix(android.graphics.Matrix); @@ -14668,10 +14796,10 @@ package android.graphics { public static class Typeface.CustomFallbackBuilder { ctor public Typeface.CustomFallbackBuilder(android.graphics.fonts.FontFamily); + method public android.graphics.Typeface.CustomFallbackBuilder addCustomFallback(android.graphics.fonts.FontFamily); method public android.graphics.Typeface build(); - method public android.graphics.Typeface.CustomFallbackBuilder setFallback(java.lang.String); - method public android.graphics.Typeface.CustomFallbackBuilder setItalic(boolean); - method public android.graphics.Typeface.CustomFallbackBuilder setWeight(int); + method public android.graphics.Typeface.CustomFallbackBuilder setStyle(android.graphics.fonts.FontStyle); + method public android.graphics.Typeface.CustomFallbackBuilder setSystemFallback(java.lang.String); } public class Xfermode { @@ -14878,7 +15006,7 @@ package android.graphics.drawable { method public final int getLevel(); method public int getMinimumHeight(); method public int getMinimumWidth(); - method public abstract int getOpacity(); + method public abstract deprecated int getOpacity(); method public android.graphics.Insets getOpticalInsets(); method public void getOutline(android.graphics.Outline); method public boolean getPadding(android.graphics.Rect); @@ -15316,20 +15444,8 @@ package android.graphics.fonts { method public java.nio.ByteBuffer getBuffer(); method public java.io.File getFile(); method public android.os.LocaleList getLocaleList(); + method public android.graphics.fonts.FontStyle getStyle(); method public int getTtcIndex(); - method public int getWeight(); - method public boolean isItalic(); - field public static final int FONT_WEIGHT_BLACK = 900; // 0x384 - field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc - field public static final int FONT_WEIGHT_EXTRA_BOLD = 800; // 0x320 - field public static final int FONT_WEIGHT_EXTRA_LIGHT = 200; // 0xc8 - field public static final int FONT_WEIGHT_LIGHT = 300; // 0x12c - field public static final int FONT_WEIGHT_MAX = 1000; // 0x3e8 - field public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4 - field public static final int FONT_WEIGHT_MIN = 1; // 0x1 - field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190 - field public static final int FONT_WEIGHT_SEMI_BOLD = 600; // 0x258 - field public static final int FONT_WEIGHT_THIN = 100; // 0x64 } public static class Font.Builder { @@ -15342,7 +15458,7 @@ package android.graphics.fonts { method public android.graphics.fonts.Font build() throws java.io.IOException; method public android.graphics.fonts.Font.Builder setFontVariationSettings(java.lang.String); method public android.graphics.fonts.Font.Builder setFontVariationSettings(android.graphics.fonts.FontVariationAxis[]); - method public android.graphics.fonts.Font.Builder setItalic(boolean); + method public android.graphics.fonts.Font.Builder setSlant(int); method public android.graphics.fonts.Font.Builder setTtcIndex(int); method public android.graphics.fonts.Font.Builder setWeight(int); } @@ -15358,6 +15474,26 @@ package android.graphics.fonts { method public android.graphics.fonts.FontFamily build(); } + public final class FontStyle { + ctor public FontStyle(); + ctor public FontStyle(int, int); + method public int getSlant(); + method public int getWeight(); + field public static final int FONT_SLANT_ITALIC = 1; // 0x1 + field public static final int FONT_SLANT_UPRIGHT = 0; // 0x0 + field public static final int FONT_WEIGHT_BLACK = 900; // 0x384 + field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc + field public static final int FONT_WEIGHT_EXTRA_BOLD = 800; // 0x320 + field public static final int FONT_WEIGHT_EXTRA_LIGHT = 200; // 0xc8 + field public static final int FONT_WEIGHT_LIGHT = 300; // 0x12c + field public static final int FONT_WEIGHT_MAX = 1000; // 0x3e8 + field public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4 + field public static final int FONT_WEIGHT_MIN = 1; // 0x1 + field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190 + field public static final int FONT_WEIGHT_SEMI_BOLD = 600; // 0x258 + field public static final int FONT_WEIGHT_THIN = 100; // 0x64 + } + public final class FontVariationAxis { ctor public FontVariationAxis(java.lang.String, float); method public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(java.lang.String); @@ -16056,10 +16192,10 @@ package android.hardware.biometrics { public class BiometricManager { method public int canAuthenticate(); - field public static final int ERROR_NONE = 0; // 0x0 - field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb - field public static final int ERROR_NO_HARDWARE = 12; // 0xc - field public static final int ERROR_UNAVAILABLE = 1; // 0x1 + field public static final int BIOMETRIC_ERROR_NO_BIOMETRICS = 11; // 0xb + field public static final int BIOMETRIC_ERROR_NO_HARDWARE = 12; // 0xc + field public static final int BIOMETRIC_ERROR_UNAVAILABLE = 1; // 0x1 + field public static final int BIOMETRIC_SUCCESS = 0; // 0x0 } public class BiometricPrompt { @@ -16183,6 +16319,7 @@ package android.hardware.camera2 { method public java.util.List> getKeys(); method public java.util.List> getKeysNeedingPermission(); method public java.util.Set getPhysicalCameraIds(); + method public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int); field public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; @@ -16499,6 +16636,8 @@ package android.hardware.camera2 { field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3 field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2; // 0x2 field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1; // 0x1 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO = 5; // 0x5 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR = 6; // 0x6 field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4; // 0x4 field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0 field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME = 1; // 0x1 @@ -16845,6 +16984,33 @@ package android.hardware.camera2.params { field public static final int SURFACE_GROUP_ID_NONE = -1; // 0xffffffff } + public final class RecommendedStreamConfigurationMap { + method public java.util.Set getHighResolutionOutputSizes(int); + method public java.util.Set> getHighSpeedVideoFpsRanges(); + method public java.util.Set> getHighSpeedVideoFpsRangesFor(android.util.Size); + method public java.util.Set getHighSpeedVideoSizes(); + method public java.util.Set getHighSpeedVideoSizesFor(android.util.Range); + method public java.util.Set getInputFormats(); + method public java.util.Set getInputSizes(int); + method public java.util.Set getOutputFormats(); + method public long getOutputMinFrameDuration(int, android.util.Size); + method public long getOutputMinFrameDuration(java.lang.Class, android.util.Size); + method public java.util.Set getOutputSizes(int); + method public java.util.Set getOutputSizes(java.lang.Class); + method public long getOutputStallDuration(int, android.util.Size); + method public long getOutputStallDuration(java.lang.Class, android.util.Size); + method public int getRecommendedUseCase(); + method public java.util.Set getValidOutputFormatsForInput(int); + method public boolean isOutputSupportedFor(int); + method public boolean isOutputSupportedFor(android.view.Surface); + field public static final int USECASE_PREVIEW = 0; // 0x0 + field public static final int USECASE_RAW = 5; // 0x5 + field public static final int USECASE_RECORD = 1; // 0x1 + field public static final int USECASE_SNAPSHOT = 3; // 0x3 + field public static final int USECASE_VIDEO_SNAPSHOT = 2; // 0x2 + field public static final int USECASE_ZSL = 4; // 0x4 + } + public final class RggbChannelVector { ctor public RggbChannelVector(float, float, float, float); method public void copyTo(float[], int); @@ -17370,6 +17536,63 @@ package android.icu.lang { field public static final int VOWEL_JAMO = 2; // 0x2 } + public static abstract interface UCharacter.IndicPositionalCategory { + field public static final int BOTTOM = 1; // 0x1 + field public static final int BOTTOM_AND_LEFT = 2; // 0x2 + field public static final int BOTTOM_AND_RIGHT = 3; // 0x3 + field public static final int LEFT = 4; // 0x4 + field public static final int LEFT_AND_RIGHT = 5; // 0x5 + field public static final int NA = 0; // 0x0 + field public static final int OVERSTRUCK = 6; // 0x6 + field public static final int RIGHT = 7; // 0x7 + field public static final int TOP = 8; // 0x8 + field public static final int TOP_AND_BOTTOM = 9; // 0x9 + field public static final int TOP_AND_BOTTOM_AND_RIGHT = 10; // 0xa + field public static final int TOP_AND_LEFT = 11; // 0xb + field public static final int TOP_AND_LEFT_AND_RIGHT = 12; // 0xc + field public static final int TOP_AND_RIGHT = 13; // 0xd + field public static final int VISUAL_ORDER_LEFT = 14; // 0xe + } + + public static abstract interface UCharacter.IndicSyllabicCategory { + field public static final int AVAGRAHA = 1; // 0x1 + field public static final int BINDU = 2; // 0x2 + field public static final int BRAHMI_JOINING_NUMBER = 3; // 0x3 + field public static final int CANTILLATION_MARK = 4; // 0x4 + field public static final int CONSONANT = 5; // 0x5 + field public static final int CONSONANT_DEAD = 6; // 0x6 + field public static final int CONSONANT_FINAL = 7; // 0x7 + field public static final int CONSONANT_HEAD_LETTER = 8; // 0x8 + field public static final int CONSONANT_INITIAL_POSTFIXED = 9; // 0x9 + field public static final int CONSONANT_KILLER = 10; // 0xa + field public static final int CONSONANT_MEDIAL = 11; // 0xb + field public static final int CONSONANT_PLACEHOLDER = 12; // 0xc + field public static final int CONSONANT_PRECEDING_REPHA = 13; // 0xd + field public static final int CONSONANT_PREFIXED = 14; // 0xe + field public static final int CONSONANT_SUBJOINED = 15; // 0xf + field public static final int CONSONANT_SUCCEEDING_REPHA = 16; // 0x10 + field public static final int CONSONANT_WITH_STACKER = 17; // 0x11 + field public static final int GEMINATION_MARK = 18; // 0x12 + field public static final int INVISIBLE_STACKER = 19; // 0x13 + field public static final int JOINER = 20; // 0x14 + field public static final int MODIFYING_LETTER = 21; // 0x15 + field public static final int NON_JOINER = 22; // 0x16 + field public static final int NUKTA = 23; // 0x17 + field public static final int NUMBER = 24; // 0x18 + field public static final int NUMBER_JOINER = 25; // 0x19 + field public static final int OTHER = 0; // 0x0 + field public static final int PURE_KILLER = 26; // 0x1a + field public static final int REGISTER_SHIFTER = 27; // 0x1b + field public static final int SYLLABLE_MODIFIER = 28; // 0x1c + field public static final int TONE_LETTER = 29; // 0x1d + field public static final int TONE_MARK = 30; // 0x1e + field public static final int VIRAMA = 31; // 0x1f + field public static final int VISARGA = 32; // 0x20 + field public static final int VOWEL = 33; // 0x21 + field public static final int VOWEL_DEPENDENT = 34; // 0x22 + field public static final int VOWEL_INDEPENDENT = 35; // 0x23 + } + public static abstract interface UCharacter.JoiningGroup { field public static final int AFRICAN_FEH = 86; // 0x56 field public static final int AFRICAN_NOON = 87; // 0x57 @@ -18153,6 +18376,13 @@ package android.icu.lang { field public static final int ZANABAZAR_SQUARE_ID = 280; // 0x118 } + public static abstract interface UCharacter.VerticalOrientation { + field public static final int ROTATED = 0; // 0x0 + field public static final int TRANSFORMED_ROTATED = 1; // 0x1 + field public static final int TRANSFORMED_UPRIGHT = 2; // 0x2 + field public static final int UPRIGHT = 3; // 0x3 + } + public static abstract interface UCharacter.WordBreak { field public static final int ALETTER = 1; // 0x1 field public static final int CR = 8; // 0x8 @@ -18324,6 +18554,8 @@ package android.icu.lang { field public static final int IDS_TRINARY_OPERATOR = 19; // 0x13 field public static final int ID_CONTINUE = 15; // 0xf field public static final int ID_START = 16; // 0x10 + field public static final int INDIC_POSITIONAL_CATEGORY = 4118; // 0x1016 + field public static final int INDIC_SYLLABIC_CATEGORY = 4119; // 0x1017 field public static final int INT_START = 4096; // 0x1000 field public static final int JOINING_GROUP = 4102; // 0x1006 field public static final int JOINING_TYPE = 4103; // 0x1007 @@ -18377,6 +18609,7 @@ package android.icu.lang { field public static final int UPPERCASE = 30; // 0x1e field public static final int UPPERCASE_MAPPING = 16396; // 0x400c field public static final int VARIATION_SELECTOR = 36; // 0x24 + field public static final int VERTICAL_ORIENTATION = 4120; // 0x1018 field public static final int WHITE_SPACE = 31; // 0x1f field public static final int WORD_BREAK = 4116; // 0x1014 field public static final int XID_CONTINUE = 32; // 0x20 @@ -18907,6 +19140,7 @@ package android.icu.text { method public int preceding(int); method public abstract int previous(); method public void setText(java.lang.String); + method public void setText(java.lang.CharSequence); method public abstract void setText(java.text.CharacterIterator); field public static final int DONE = -1; // 0xffffffff field public static final int KIND_CHARACTER = 0; // 0x0 @@ -18935,24 +19169,31 @@ package android.icu.text { } public static final class CaseMap.Fold extends android.icu.text.CaseMap { + method public java.lang.String apply(java.lang.CharSequence); method public A apply(java.lang.CharSequence, A, android.icu.text.Edits); method public android.icu.text.CaseMap.Fold omitUnchangedText(); method public android.icu.text.CaseMap.Fold turkic(); } public static final class CaseMap.Lower extends android.icu.text.CaseMap { + method public java.lang.String apply(java.util.Locale, java.lang.CharSequence); method public A apply(java.util.Locale, java.lang.CharSequence, A, android.icu.text.Edits); method public android.icu.text.CaseMap.Lower omitUnchangedText(); } public static final class CaseMap.Title extends android.icu.text.CaseMap { + method public android.icu.text.CaseMap.Title adjustToCased(); + method public java.lang.String apply(java.util.Locale, android.icu.text.BreakIterator, java.lang.CharSequence); method public A apply(java.util.Locale, android.icu.text.BreakIterator, java.lang.CharSequence, A, android.icu.text.Edits); method public android.icu.text.CaseMap.Title noBreakAdjustment(); method public android.icu.text.CaseMap.Title noLowercase(); method public android.icu.text.CaseMap.Title omitUnchangedText(); + method public android.icu.text.CaseMap.Title sentences(); + method public android.icu.text.CaseMap.Title wholeString(); } public static final class CaseMap.Upper extends android.icu.text.CaseMap { + method public java.lang.String apply(java.util.Locale, java.lang.CharSequence); method public A apply(java.util.Locale, java.lang.CharSequence, A, android.icu.text.Edits); method public android.icu.text.CaseMap.Upper omitUnchangedText(); } @@ -18960,7 +19201,6 @@ package android.icu.text { public final class CollationElementIterator { method public int getMaxExpansion(int); method public int getOffset(); - method public deprecated int hashCode(); method public int next(); method public int previous(); method public static int primaryOrder(int); @@ -19073,7 +19313,6 @@ package android.icu.text { method public static android.icu.text.CurrencyPluralInfo getInstance(android.icu.util.ULocale); method public android.icu.util.ULocale getLocale(); method public android.icu.text.PluralRules getPluralRules(); - method public deprecated int hashCode(); method public void setCurrencyPluralPattern(java.lang.String, java.lang.String); method public void setLocale(android.icu.util.ULocale); method public void setPluralRules(java.lang.String); @@ -19363,7 +19602,6 @@ package android.icu.text { method public boolean firstDateInPtnIsLaterDate(); method public java.lang.String getFirstPart(); method public java.lang.String getSecondPart(); - method public deprecated java.lang.String toString(); } public class DateTimePatternGenerator implements java.lang.Cloneable android.icu.util.Freezable { @@ -19523,6 +19761,8 @@ package android.icu.text { ctor public DecimalFormatSymbols(java.util.Locale); ctor public DecimalFormatSymbols(android.icu.util.ULocale); method public java.lang.Object clone(); + method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(java.util.Locale, android.icu.text.NumberingSystem); + method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(android.icu.util.ULocale, android.icu.text.NumberingSystem); method public static java.util.Locale[] getAvailableLocales(); method public android.icu.util.Currency getCurrency(); method public java.lang.String getCurrencySymbol(); @@ -19632,11 +19872,15 @@ package android.icu.text { method public android.icu.text.Edits.Iterator getFineIterator(); method public boolean hasChanges(); method public int lengthDelta(); + method public android.icu.text.Edits mergeAndAppend(android.icu.text.Edits, android.icu.text.Edits); + method public int numberOfChanges(); method public void reset(); } public static final class Edits.Iterator { method public int destinationIndex(); + method public int destinationIndexFromSourceIndex(int); + method public boolean findDestinationIndex(int); method public boolean findSourceIndex(int); method public boolean hasChange(); method public int newLength(); @@ -19644,6 +19888,7 @@ package android.icu.text { method public int oldLength(); method public int replacementIndex(); method public int sourceIndex(); + method public int sourceIndexFromDestinationIndex(int); } public abstract class IDNA { @@ -20046,6 +20291,7 @@ package android.icu.text { method public int getRadix(); method public boolean isAlgorithmic(); method public static boolean isValidDigitString(java.lang.String); + field public static final android.icu.text.NumberingSystem LATIN; } public class PluralFormat extends android.icu.text.UFormat { @@ -20083,7 +20329,6 @@ package android.icu.text { method public java.util.Set getKeywords(); method public java.util.Collection getSamples(java.lang.String); method public double getUniqueKeywordValue(java.lang.String); - method public deprecated int hashCode(); method public static android.icu.text.PluralRules parseDescription(java.lang.String) throws java.text.ParseException; method public java.lang.String select(double); field public static final android.icu.text.PluralRules DEFAULT; @@ -20326,7 +20571,6 @@ package android.icu.text { ctor public StringPrepParseException(java.lang.String, int, java.lang.String, int); ctor public StringPrepParseException(java.lang.String, int, java.lang.String, int, int); method public int getError(); - method public deprecated int hashCode(); field public static final int ACE_PREFIX_ERROR = 6; // 0x6 field public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9 field public static final int CHECK_BIDI_ERROR = 4; // 0x4 @@ -20478,6 +20722,51 @@ package android.icu.text { enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_STANDARD; } + public abstract class Transliterator { + method public static final android.icu.text.Transliterator createFromRules(java.lang.String, java.lang.String, int); + method public void filteredTransliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, boolean); + method public final void finishTransliteration(android.icu.text.Replaceable, android.icu.text.Transliterator.Position); + method public static final java.util.Enumeration getAvailableIDs(); + method public static final java.util.Enumeration getAvailableSources(); + method public static final java.util.Enumeration getAvailableTargets(java.lang.String); + method public static final java.util.Enumeration getAvailableVariants(java.lang.String, java.lang.String); + method public static final java.lang.String getDisplayName(java.lang.String); + method public static java.lang.String getDisplayName(java.lang.String, java.util.Locale); + method public static java.lang.String getDisplayName(java.lang.String, android.icu.util.ULocale); + method public android.icu.text.Transliterator[] getElements(); + method public final android.icu.text.UnicodeFilter getFilter(); + method public final java.lang.String getID(); + method public static final android.icu.text.Transliterator getInstance(java.lang.String); + method public static android.icu.text.Transliterator getInstance(java.lang.String, int); + method public final android.icu.text.Transliterator getInverse(); + method public final int getMaximumContextLength(); + method public final android.icu.text.UnicodeSet getSourceSet(); + method public android.icu.text.UnicodeSet getTargetSet(); + method public void setFilter(android.icu.text.UnicodeFilter); + method public java.lang.String toRules(boolean); + method public final int transliterate(android.icu.text.Replaceable, int, int); + method public final void transliterate(android.icu.text.Replaceable); + method public final java.lang.String transliterate(java.lang.String); + method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, java.lang.String); + method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, int); + method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position); + field public static final int FORWARD = 0; // 0x0 + field public static final int REVERSE = 1; // 0x1 + } + + public static class Transliterator.Position { + ctor public Transliterator.Position(); + ctor public Transliterator.Position(int, int, int); + ctor public Transliterator.Position(int, int, int, int); + ctor public Transliterator.Position(android.icu.text.Transliterator.Position); + method public void set(android.icu.text.Transliterator.Position); + method public final void validate(int); + field public int contextLimit; + field public int contextStart; + field public int limit; + field public int start; + } + public abstract class UCharacterIterator implements java.lang.Cloneable { ctor protected UCharacterIterator(); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -20957,6 +21246,7 @@ package android.icu.util { public class Currency extends android.icu.util.MeasureUnit { ctor protected Currency(java.lang.String); + method public static android.icu.util.Currency fromJavaCurrency(java.util.Currency); method public static java.util.Set getAvailableCurrencies(); method public static java.lang.String[] getAvailableCurrencyCodes(android.icu.util.ULocale, java.util.Date); method public static java.lang.String[] getAvailableCurrencyCodes(java.util.Locale, java.util.Date); @@ -20982,6 +21272,7 @@ package android.icu.util { method public java.lang.String getSymbol(java.util.Locale); method public java.lang.String getSymbol(android.icu.util.ULocale); method public static boolean isAvailable(java.lang.String, java.util.Date, java.util.Date); + method public java.util.Currency toJavaCurrency(); field public static final int LONG_NAME = 1; // 0x1 field public static final int PLURAL_LONG_NAME = 2; // 0x2 field public static final int SYMBOL_NAME = 0; // 0x0 @@ -20997,6 +21288,8 @@ package android.icu.util { public class CurrencyAmount extends android.icu.util.Measure { ctor public CurrencyAmount(java.lang.Number, android.icu.util.Currency); ctor public CurrencyAmount(double, android.icu.util.Currency); + ctor public CurrencyAmount(java.lang.Number, java.util.Currency); + ctor public CurrencyAmount(double, java.util.Currency); method public android.icu.util.Currency getCurrency(); } @@ -22599,6 +22892,7 @@ package android.media { field public static final int ENCODING_AC3 = 5; // 0x5 field public static final int ENCODING_AC4 = 17; // 0x11 field public static final int ENCODING_DEFAULT = 1; // 0x1 + field public static final int ENCODING_DOLBY_MAT = 19; // 0x13 field public static final int ENCODING_DOLBY_TRUEHD = 14; // 0xe field public static final int ENCODING_DTS = 7; // 0x7 field public static final int ENCODING_DTS_HD = 8; // 0x8 @@ -22650,6 +22944,7 @@ package android.media { method public boolean isBluetoothScoOn(); method public boolean isMicrophoneMute(); method public boolean isMusicActive(); + method public static boolean isOffloadedPlaybackSupported(android.media.AudioFormat); method public boolean isSpeakerphoneOn(); method public boolean isStreamMute(int); method public boolean isVolumeFixed(); @@ -22811,6 +23106,8 @@ package android.media { method public java.util.Map getLabels(); method public java.util.Locale getLocale(); method public int getMasteringIndication(); + method public int getPresentationId(); + method public int getProgramId(); method public boolean hasAudioDescription(); method public boolean hasDialogueEnhancement(); method public boolean hasSpokenSubtitles(); @@ -22821,6 +23118,18 @@ package android.media { field public static final int MASTERING_NOT_INDICATED = 0; // 0x0 } + public static class AudioPresentation.Builder { + ctor public AudioPresentation.Builder(int); + method public android.media.AudioPresentation build(); + method public android.media.AudioPresentation.Builder setHasAudioDescription(boolean); + method public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean); + method public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean); + method public android.media.AudioPresentation.Builder setLabels(java.util.Map); + method public android.media.AudioPresentation.Builder setLocale(android.icu.util.ULocale); + method public android.media.AudioPresentation.Builder setMasteringIndication(int); + method public android.media.AudioPresentation.Builder setProgramId(int); + } + public class AudioRecord implements android.media.AudioRouting { ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException; method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler); @@ -22942,6 +23251,7 @@ package android.media { method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration); method protected void finalize(); method public void flush(); + method public android.media.AudioAttributes getAudioAttributes(); method public int getAudioFormat(); method public int getAudioSessionId(); method public int getBufferCapacityInFrames(); @@ -22971,6 +23281,7 @@ package android.media { method public int getUnderrunCount(); method public void pause() throws java.lang.IllegalStateException; method public void play() throws java.lang.IllegalStateException; + method public void registerStreamEventCallback(java.util.concurrent.Executor, android.media.AudioTrack.StreamEventCallback); method public void release(); method public int reloadStaticData(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); @@ -22991,6 +23302,7 @@ package android.media { method public deprecated int setStereoVolume(float, float); method public int setVolume(float); method public void stop() throws java.lang.IllegalStateException; + method public void unregisterStreamEventCallback(android.media.AudioTrack.StreamEventCallback); method public int write(byte[], int, int); method public int write(byte[], int, int, int); method public int write(short[], int, int); @@ -23024,6 +23336,7 @@ package android.media { method public android.media.AudioTrack.Builder setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException; method public android.media.AudioTrack.Builder setAudioFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException; method public android.media.AudioTrack.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException; + method public android.media.AudioTrack.Builder setOffloadedPlayback(boolean); method public android.media.AudioTrack.Builder setPerformanceMode(int); method public android.media.AudioTrack.Builder setSessionId(int) throws java.lang.IllegalArgumentException; method public android.media.AudioTrack.Builder setTransferMode(int) throws java.lang.IllegalArgumentException; @@ -23047,6 +23360,13 @@ package android.media { method public default void onRoutingChanged(android.media.AudioRouting); } + public static abstract class AudioTrack.StreamEventCallback { + ctor public AudioTrack.StreamEventCallback(); + method public void onDataRequest(android.media.AudioTrack, int); + method public void onPresentationEnded(android.media.AudioTrack); + method public void onTearDown(android.media.AudioTrack); + } + public class CamcorderProfile { method public static android.media.CamcorderProfile get(int); method public static android.media.CamcorderProfile get(int, int); @@ -23944,6 +24264,8 @@ package android.media { method public static int getMaxSecurityLevel(); method public int getMaxSessionCount(); method public android.os.PersistableBundle getMetrics(); + method public java.util.List getOfflineLicenseKeySetIds(); + method public int getOfflineLicenseState(byte[]); method public int getOpenSessionCount(); method public byte[] getPropertyByteArray(java.lang.String); method public java.lang.String getPropertyString(java.lang.String); @@ -23964,6 +24286,7 @@ package android.media { method public void releaseSecureStops(byte[]); method public void removeAllSecureStops(); method public void removeKeys(byte[]); + method public void removeOfflineLicense(byte[]); method public void removeSecureStop(byte[]); method public void restoreKeys(byte[], byte[]); method public void setOnEventListener(android.media.MediaDrm.OnEventListener); @@ -23986,6 +24309,9 @@ package android.media { field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 field public static final int KEY_TYPE_RELEASE = 3; // 0x3 field public static final int KEY_TYPE_STREAMING = 1; // 0x1 + field public static final int OFFLINE_LICENSE_INACTIVE = 2; // 0x2 + field public static final int OFFLINE_LICENSE_STATE_UNKNOWN = 0; // 0x0 + field public static final int OFFLINE_LICENSE_USABLE = 1; // 0x1 field public static final java.lang.String PROPERTY_ALGORITHMS = "algorithms"; field public static final java.lang.String PROPERTY_DESCRIPTION = "description"; field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; @@ -24140,6 +24466,7 @@ package android.media { } public static final class MediaExtractor.CasInfo { + method public byte[] getPrivateData(); method public android.media.MediaCas.Session getSession(); method public int getSystemId(); } @@ -28428,6 +28755,20 @@ package android.net.sip { } +package android.net.ssl { + + public class SSLEngines { + method public static boolean isSupportedEngine(javax.net.ssl.SSLEngine); + method public static void setUseSessionTickets(javax.net.ssl.SSLEngine, boolean); + } + + public class SSLSockets { + method public static boolean isSupportedSocket(javax.net.ssl.SSLSocket); + method public static void setUseSessionTickets(javax.net.ssl.SSLSocket, boolean); + } + +} + package android.net.wifi { public class ScanResult implements android.os.Parcelable { @@ -28474,7 +28815,7 @@ package android.net.wifi { enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED; } - public class WifiConfiguration implements android.os.Parcelable { + public deprecated class WifiConfiguration implements android.os.Parcelable { ctor public WifiConfiguration(); method public int describeContents(); method public android.net.ProxyInfo getHttpProxy(); @@ -28486,9 +28827,11 @@ package android.net.wifi { field public java.lang.String SSID; field public java.util.BitSet allowedAuthAlgorithms; field public java.util.BitSet allowedGroupCiphers; + field public java.util.BitSet allowedGroupMgmtCiphers; field public java.util.BitSet allowedKeyManagement; field public java.util.BitSet allowedPairwiseCiphers; field public java.util.BitSet allowedProtocols; + field public java.util.BitSet allowedSuiteBCiphers; field public android.net.wifi.WifiEnterpriseConfig enterpriseConfig; field public boolean hiddenSSID; field public boolean isHomeProviderNetwork; @@ -28512,6 +28855,7 @@ package android.net.wifi { public static class WifiConfiguration.GroupCipher { field public static final int CCMP = 3; // 0x3 + field public static final int GCMP_256 = 5; // 0x5 field public static final int TKIP = 2; // 0x2 field public static final deprecated int WEP104 = 1; // 0x1 field public static final deprecated int WEP40 = 0; // 0x0 @@ -28519,9 +28863,18 @@ package android.net.wifi { field public static final java.lang.String varName = "group"; } + public static class WifiConfiguration.GroupMgmtCipher { + field public static final int BIP_CMAC_256 = 0; // 0x0 + field public static final int BIP_GMAC_128 = 1; // 0x1 + field public static final int BIP_GMAC_256 = 2; // 0x2 + } + public static class WifiConfiguration.KeyMgmt { field public static final int IEEE8021X = 3; // 0x3 field public static final int NONE = 0; // 0x0 + field public static final int OWE = 9; // 0x9 + field public static final int SAE = 8; // 0x8 + field public static final int SUITE_B_192 = 10; // 0xa field public static final int WPA_EAP = 2; // 0x2 field public static final int WPA_PSK = 1; // 0x1 field public static final java.lang.String[] strings; @@ -28530,6 +28883,7 @@ package android.net.wifi { public static class WifiConfiguration.PairwiseCipher { field public static final int CCMP = 2; // 0x2 + field public static final int GCMP_256 = 3; // 0x3 field public static final int NONE = 0; // 0x0 field public static final deprecated int TKIP = 1; // 0x1 field public static final java.lang.String[] strings; @@ -28628,7 +28982,8 @@ package android.net.wifi { } public class WifiManager { - method public int addNetwork(android.net.wifi.WifiConfiguration); + method public deprecated int addNetwork(android.net.wifi.WifiConfiguration); + method public boolean addNetworkSuggestions(java.util.List); method public void addOrUpdatePasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration); method public static int calculateSignalLevel(int, int); method public deprecated void cancelWps(android.net.wifi.WifiManager.WpsCallback); @@ -28636,10 +28991,10 @@ package android.net.wifi { method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(java.lang.String); method public android.net.wifi.WifiManager.WifiLock createWifiLock(int, java.lang.String); method public android.net.wifi.WifiManager.WifiLock createWifiLock(java.lang.String); - method public boolean disableNetwork(int); - method public boolean disconnect(); - method public boolean enableNetwork(int, boolean); - method public java.util.List getConfiguredNetworks(); + method public deprecated boolean disableNetwork(int); + method public deprecated boolean disconnect(); + method public deprecated boolean enableNetwork(int, boolean); + method public deprecated java.util.List getConfiguredNetworks(); method public android.net.wifi.WifiInfo getConnectionInfo(); method public android.net.DhcpInfo getDhcpInfo(); method public java.util.List getPasspointConfigurations(); @@ -28648,29 +29003,35 @@ package android.net.wifi { method public boolean is5GHzBandSupported(); method public boolean isDeviceToApRttSupported(); method public boolean isEnhancedPowerReportingSupported(); + method public boolean isOweSupported(); method public boolean isP2pSupported(); method public boolean isPreferredNetworkOffloadSupported(); - method public boolean isScanAlwaysAvailable(); + method public deprecated boolean isScanAlwaysAvailable(); method public boolean isTdlsSupported(); method public boolean isWifiEnabled(); + method public boolean isWpa3SaeSupported(); + method public boolean isWpa3SuiteBSupported(); method public deprecated boolean pingSupplicant(); - method public boolean reassociate(); - method public boolean reconnect(); - method public boolean removeNetwork(int); + method public deprecated boolean reassociate(); + method public deprecated boolean reconnect(); + method public deprecated boolean removeNetwork(int); + method public boolean removeNetworkSuggestions(java.util.List); method public void removePasspointConfiguration(java.lang.String); method public deprecated boolean saveConfiguration(); method public void setTdlsEnabled(java.net.InetAddress, boolean); method public void setTdlsEnabledWithMacAddress(java.lang.String, boolean); - method public boolean setWifiEnabled(boolean); + method public deprecated boolean setWifiEnabled(boolean); method public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, android.os.Handler); method public deprecated boolean startScan(); method public deprecated void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback); - method public int updateNetwork(android.net.wifi.WifiConfiguration); + method public deprecated int updateNetwork(android.net.wifi.WifiConfiguration); field public static final java.lang.String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK"; field public static final java.lang.String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE"; + field public static final java.lang.String ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION = "android.net.wifi.action.WIFI_NETWORK_SUGGESTION_POST_CONNECTION"; field public static final deprecated int ERROR_AUTHENTICATING = 1; // 0x1 field public static final deprecated java.lang.String EXTRA_BSSID = "bssid"; field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_NETWORK_SUGGESTION = "android.net.wifi.extra.NETWORK_SUGGESTION"; field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final deprecated java.lang.String EXTRA_NEW_STATE = "newState"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; @@ -28739,6 +29100,29 @@ package android.net.wifi { method public abstract deprecated void onSucceeded(); } + public class WifiNetworkConfigBuilder { + ctor public WifiNetworkConfigBuilder(); + method public android.net.NetworkSpecifier buildNetworkSpecifier(); + method public android.net.wifi.WifiNetworkSuggestion buildNetworkSuggestion(); + method public android.net.wifi.WifiNetworkConfigBuilder setBssid(android.net.MacAddress); + method public android.net.wifi.WifiNetworkConfigBuilder setBssidPattern(android.net.MacAddress, android.net.MacAddress); + method public android.net.wifi.WifiNetworkConfigBuilder setEnterpriseConfig(android.net.wifi.WifiEnterpriseConfig); + method public android.net.wifi.WifiNetworkConfigBuilder setIsAppInteractionRequired(); + method public android.net.wifi.WifiNetworkConfigBuilder setIsHiddenSsid(); + method public android.net.wifi.WifiNetworkConfigBuilder setIsMetered(); + method public android.net.wifi.WifiNetworkConfigBuilder setIsUserInteractionRequired(); + method public android.net.wifi.WifiNetworkConfigBuilder setPriority(int); + method public android.net.wifi.WifiNetworkConfigBuilder setPskPassphrase(java.lang.String); + method public android.net.wifi.WifiNetworkConfigBuilder setSsid(java.lang.String); + method public android.net.wifi.WifiNetworkConfigBuilder setSsidPattern(android.os.PatternMatcher); + } + + public final class WifiNetworkSuggestion implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public deprecated class WpsInfo implements android.os.Parcelable { ctor public deprecated WpsInfo(); ctor public deprecated WpsInfo(android.net.wifi.WpsInfo); @@ -29730,12 +30114,13 @@ package android.opengl { field public static final int EGL_WINDOW_BIT = 4; // 0x4 } - public class EGL15 { - ctor public EGL15(); + public final class EGL15 { method public static int eglClientWaitSync(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long); + method public static android.opengl.EGLImage eglCreateImage(android.opengl.EGLDisplay, android.opengl.EGLContext, int, long, long[], int); method public static android.opengl.EGLSurface eglCreatePlatformPixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int); method public static android.opengl.EGLSurface eglCreatePlatformWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int); method public static android.opengl.EGLSync eglCreateSync(android.opengl.EGLDisplay, int, long[], int); + method public static boolean eglDestroyImage(android.opengl.EGLDisplay, android.opengl.EGLImage); method public static boolean eglDestroySync(android.opengl.EGLDisplay, android.opengl.EGLSync); method public static android.opengl.EGLDisplay eglGetPlatformDisplay(int, long, long[], int); method public static boolean eglGetSyncAttrib(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long[], int); @@ -33048,6 +33433,7 @@ package android.os { field public static java.lang.String DIRECTORY_PICTURES; field public static java.lang.String DIRECTORY_PODCASTS; field public static java.lang.String DIRECTORY_RINGTONES; + field public static java.lang.String DIRECTORY_SCREENSHOTS; field public static final java.lang.String MEDIA_BAD_REMOVAL = "bad_removal"; field public static final java.lang.String MEDIA_CHECKING = "checking"; field public static final java.lang.String MEDIA_EJECTING = "ejecting"; @@ -33899,6 +34285,7 @@ package android.os { field public static final java.lang.String DISALLOW_INSTALL_APPS = "no_install_apps"; field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources"; field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY = "no_install_unknown_sources_globally"; + field public static final java.lang.String DISALLOW_INTELLIGENCE_CAPTURE = "no_intelligence_capture"; field public static final java.lang.String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts"; field public static final java.lang.String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media"; field public static final java.lang.String DISALLOW_NETWORK_RESET = "no_network_reset"; @@ -34155,7 +34542,7 @@ package android.os.storage { } public final class StorageVolume implements android.os.Parcelable { - method public android.content.Intent createAccessIntent(java.lang.String); + method public deprecated android.content.Intent createAccessIntent(java.lang.String); method public int describeContents(); method public java.lang.String getDescription(android.content.Context); method public java.lang.String getState(); @@ -35394,6 +35781,15 @@ package android.provider { method public static java.lang.String getLastOutgoingCall(android.content.Context); field public static final int ANSWERED_EXTERNALLY_TYPE = 7; // 0x7 field public static final int BLOCKED_TYPE = 6; // 0x6 + field public static final java.lang.String BLOCK_REASON = "block_reason"; + field public static final int BLOCK_REASON_BLOCKED_NUMBER = 3; // 0x3 + field public static final int BLOCK_REASON_CALL_SCREENING_SERVICE = 1; // 0x1 + field public static final int BLOCK_REASON_DIRECT_TO_VOICEMAIL = 2; // 0x2 + field public static final int BLOCK_REASON_NOT_BLOCKED = 0; // 0x0 + field public static final int BLOCK_REASON_NOT_IN_CONTACTS = 7; // 0x7 + field public static final int BLOCK_REASON_PAY_PHONE = 6; // 0x6 + field public static final int BLOCK_REASON_RESTRICTED_NUMBER = 5; // 0x5 + field public static final int BLOCK_REASON_UNKNOWN_NUMBER = 4; // 0x4 field public static final java.lang.String CACHED_FORMATTED_NUMBER = "formatted_number"; field public static final java.lang.String CACHED_LOOKUP_URI = "lookup_uri"; field public static final java.lang.String CACHED_MATCHED_NUMBER = "matched_number"; @@ -35403,6 +35799,8 @@ package android.provider { field public static final java.lang.String CACHED_NUMBER_TYPE = "numbertype"; field public static final java.lang.String CACHED_PHOTO_ID = "photo_id"; field public static final java.lang.String CACHED_PHOTO_URI = "photo_uri"; + field public static final java.lang.String CALL_SCREENING_APP_NAME = "call_screening_app_name"; + field public static final java.lang.String CALL_SCREENING_COMPONENT_NAME = "call_screening_component_name"; field public static final android.net.Uri CONTENT_FILTER_URI; field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls"; field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/calls"; @@ -36691,6 +37089,7 @@ package android.provider { method public android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], android.os.Bundle) throws java.io.FileNotFoundException; method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; + method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[], android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException; method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException; method public android.database.Cursor querySearchDocuments(java.lang.String, java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; method public void removeDocument(java.lang.String, java.lang.String) throws java.io.FileNotFoundException; @@ -36775,13 +37174,23 @@ package android.provider { public final class MediaStore { ctor public MediaStore(); + method public static android.net.Uri createPending(android.content.Context, android.provider.MediaStore.PendingParams); + method public static java.util.Set getAllVolumeNames(android.content.Context); method public static android.net.Uri getDocumentUri(android.content.Context, android.net.Uri); method public static android.net.Uri getMediaScannerUri(); + method public static android.net.Uri getMediaUri(android.content.Context, android.net.Uri); method public static java.lang.String getVersion(android.content.Context); + method public static java.lang.String getVolumeName(android.net.Uri); + method public static android.provider.MediaStore.PendingSession openPending(android.content.Context, android.net.Uri); + method public static android.net.Uri setIncludePending(android.net.Uri); field public static final java.lang.String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE"; field public static final java.lang.String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE"; + field public static final java.lang.String ACTION_REVIEW = "android.provider.action.REVIEW"; + field public static final java.lang.String ACTION_REVIEW_SECURE = "android.provider.action.REVIEW_SECURE"; field public static final java.lang.String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE"; field public static final java.lang.String AUTHORITY = "media"; + field public static final android.net.Uri AUTHORITY_URI; + field public static final java.lang.String EXTRA_BRIGHTNESS = "android.provider.extra.BRIGHTNESS"; field public static final java.lang.String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit"; field public static final java.lang.String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion"; field public static final java.lang.String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen"; @@ -36907,7 +37316,7 @@ package android.provider { public static final class MediaStore.Audio.Media implements android.provider.MediaStore.Audio.AudioColumns { ctor public MediaStore.Audio.Media(); method public static android.net.Uri getContentUri(java.lang.String); - method public static android.net.Uri getContentUriForPath(java.lang.String); + method public static deprecated android.net.Uri getContentUriForPath(java.lang.String); field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/audio"; field public static final java.lang.String DEFAULT_SORT_ORDER = "title_key"; field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio"; @@ -37029,13 +37438,31 @@ package android.provider { field public static final java.lang.String DATE_ADDED = "date_added"; field public static final java.lang.String DATE_MODIFIED = "date_modified"; field public static final java.lang.String DISPLAY_NAME = "_display_name"; + field public static final java.lang.String HASH = "_hash"; field public static final java.lang.String HEIGHT = "height"; + field public static final java.lang.String IS_PENDING = "is_pending"; field public static final java.lang.String MIME_TYPE = "mime_type"; + field public static final java.lang.String OWNER_PACKAGE_NAME = "owner_package_name"; field public static final java.lang.String SIZE = "_size"; field public static final java.lang.String TITLE = "title"; field public static final java.lang.String WIDTH = "width"; } + public static class MediaStore.PendingParams { + ctor public MediaStore.PendingParams(android.net.Uri, java.lang.String, java.lang.String); + method public void setPrimaryDirectory(java.lang.String); + method public void setSecondaryDirectory(java.lang.String); + } + + public static class MediaStore.PendingSession implements java.lang.AutoCloseable { + method public void abandon(); + method public void close(); + method public void notifyProgress(int); + method public android.os.ParcelFileDescriptor open() throws java.io.FileNotFoundException; + method public java.io.OutputStream openOutputStream() throws java.io.FileNotFoundException; + method public android.net.Uri publish(); + } + public static final class MediaStore.Video { ctor public MediaStore.Video(); method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[]); @@ -37120,6 +37547,7 @@ package android.provider { field public static final java.lang.String ACTION_APPLICATION_SETTINGS = "android.settings.APPLICATION_SETTINGS"; field public static final java.lang.String ACTION_APP_NOTIFICATION_SETTINGS = "android.settings.APP_NOTIFICATION_SETTINGS"; field public static final java.lang.String ACTION_APP_SEARCH_SETTINGS = "android.settings.APP_SEARCH_SETTINGS"; + field public static final java.lang.String ACTION_APP_USAGE_SETTINGS = "android.settings.action.APP_USAGE_SETTINGS"; field public static final java.lang.String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS"; field public static final java.lang.String ACTION_BLUETOOTH_SETTINGS = "android.settings.BLUETOOTH_SETTINGS"; field public static final java.lang.String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS"; @@ -37165,7 +37593,7 @@ package android.provider { field public static final java.lang.String ACTION_SETTINGS = "android.settings.SETTINGS"; field public static final java.lang.String ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO"; field public static final java.lang.String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS"; - field public static final java.lang.String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS = "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS"; + field public static final deprecated java.lang.String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS = "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS"; field public static final java.lang.String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS"; field public static final java.lang.String ACTION_USAGE_ACCESS_SETTINGS = "android.settings.USAGE_ACCESS_SETTINGS"; field public static final java.lang.String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS"; @@ -37572,6 +38000,7 @@ package android.provider { field public static final java.lang.String AUTH_TYPE = "authtype"; field public static final deprecated java.lang.String BEARER = "bearer"; field public static final java.lang.String CARRIER_ENABLED = "carrier_enabled"; + field public static final java.lang.String CARRIER_ID = "carrier_id"; field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String CURRENT = "current"; field public static final java.lang.String DEFAULT_SORT_ORDER = "name ASC"; @@ -40024,6 +40453,7 @@ package android.service.notification { public static class NotificationListenerService.Ranking { ctor public NotificationListenerService.Ranking(); + method public boolean audiblyAlerted(); method public boolean canShowBadge(); method public android.app.NotificationChannel getChannel(); method public int getImportance(); @@ -41517,6 +41947,7 @@ package android.telecom { field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 2048; // 0x800 field public static final int PROPERTY_RTT = 1024; // 0x400 field public static final int PROPERTY_SELF_MANAGED = 256; // 0x100 + field public static final int PROPERTY_VOIP_AUDIO_MODE = 4096; // 0x1000 field public static final int PROPERTY_WIFI = 8; // 0x8 } @@ -41720,7 +42151,7 @@ package android.telecom { field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000 field public static final int CAPABILITY_CAN_PULL_CALL = 16777216; // 0x1000000 field public static final int CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION = 4194304; // 0x400000 - field public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000 + field public static final deprecated int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000 field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000 field public static final int CAPABILITY_HOLD = 1; // 0x1 field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80 @@ -42140,9 +42571,11 @@ package android.telecom { method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle); method public java.util.List getSelfManagedPhoneAccounts(); method public android.telecom.PhoneAccountHandle getSimCallManager(); + method public java.lang.String getSystemDialerPackage(); method public java.lang.String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method public boolean handleMmi(java.lang.String); method public boolean handleMmi(java.lang.String, android.telecom.PhoneAccountHandle); + method public boolean isDefaultCallScreeningApp(android.content.ComponentName); method public boolean isInCall(); method public boolean isInManagedCall(); method public boolean isIncomingCallPermitted(android.telecom.PhoneAccountHandle); @@ -42151,12 +42584,14 @@ package android.telecom { method public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, java.lang.String); method public void placeCall(android.net.Uri, android.os.Bundle); method public void registerPhoneAccount(android.telecom.PhoneAccount); + method public void requestChangeDefaultCallScreeningApp(android.content.ComponentName); method public void showInCallScreen(boolean); method public void silenceRinger(); method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle); field public static final java.lang.String ACTION_CHANGE_DEFAULT_DIALER = "android.telecom.action.CHANGE_DEFAULT_DIALER"; field public static final java.lang.String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS"; field public static final java.lang.String ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONFIGURE_PHONE_ACCOUNT"; + field public static final java.lang.String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED = "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED"; field public static final java.lang.String ACTION_DEFAULT_DIALER_CHANGED = "android.telecom.action.DEFAULT_DIALER_CHANGED"; field public static final deprecated java.lang.String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL"; field public static final java.lang.String ACTION_PHONE_ACCOUNT_REGISTERED = "android.telecom.action.PHONE_ACCOUNT_REGISTERED"; @@ -42173,9 +42608,11 @@ package android.telecom { field public static final java.lang.String EXTRA_CALL_NETWORK_TYPE = "android.telecom.extra.CALL_NETWORK_TYPE"; field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT"; field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME"; + field public static final java.lang.String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME = "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME"; field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS"; field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS"; field public static final java.lang.String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE"; + field public static final java.lang.String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP"; field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT"; field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER"; field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS"; @@ -42362,6 +42799,7 @@ package android.telephony { field public static final java.lang.String KEY_CALL_BARRING_VISIBILITY_BOOL = "call_barring_visibility_bool"; field public static final java.lang.String KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY = "call_forwarding_blocks_while_roaming_string_array"; field public static final java.lang.String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool"; + field public static final java.lang.String KEY_CARRIER_CALL_SCREENING_APP_STRING = "call_screening_app"; field public static final java.lang.String KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS = "carrier_data_call_permanent_failure_strings"; field public static final java.lang.String KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT = "carrier_default_wfc_ims_mode_int"; field public static final java.lang.String KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT = "carrier_default_wfc_ims_roaming_mode_int"; @@ -42477,6 +42915,7 @@ package android.telephony { field public static final java.lang.String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool"; field public static final java.lang.String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool"; field public static final java.lang.String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool"; + field public static final java.lang.String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL = "support_clir_network_default_bool"; field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool"; field public static final java.lang.String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool"; field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool"; @@ -42548,12 +42987,23 @@ package android.telephony { field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellIdentityNr extends android.telephony.CellIdentity { + method public int getChannelNumber(); + method public java.lang.String getMccString(); + method public java.lang.String getMncString(); + method public int getPci(); + method public int getTac(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public final class CellIdentityTdscdma extends android.telephony.CellIdentity { method public int getCid(); method public int getCpid(); method public int getLac(); method public java.lang.String getMccString(); method public java.lang.String getMncString(); + method public java.lang.String getMobileNetworkOperator(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } @@ -42582,6 +43032,7 @@ package android.telephony { field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2 field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff field public static final android.os.Parcelable.Creator CREATOR; + field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff } public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable { @@ -42605,6 +43056,13 @@ package android.telephony { field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellInfoNr extends android.telephony.CellInfo { + method public android.telephony.CellIdentity getCellIdentity(); + method public android.telephony.CellSignalStrength getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityWcdma getCellIdentity(); method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength(); @@ -42665,12 +43123,28 @@ package android.telephony { method public int getLevel(); method public int getRsrp(); method public int getRsrq(); + method public int getRssi(); method public int getRssnr(); method public int getTimingAdvance(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellSignalStrengthNr extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public int getAsuLevel(); + method public int getCsiRsrp(); + method public int getCsiRsrq(); + method public int getCsiSinr(); + method public int getDbm(); + method public int getLevel(); + method public int getSsRsrp(); + method public int getSsRsrq(); + method public int getSsSinr(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { method public int describeContents(); method public int getAsuLevel(); @@ -42860,6 +43334,7 @@ package android.telephony { public class PhoneStateListener { ctor public PhoneStateListener(); + ctor public PhoneStateListener(java.util.concurrent.Executor); method public void onCallForwardingIndicatorChanged(boolean); method public void onCallStateChanged(int, java.lang.String); method public void onCellInfoChanged(java.util.List); @@ -42878,6 +43353,7 @@ package android.telephony { field public static final int LISTEN_CELL_LOCATION = 16; // 0x10 field public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80 field public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40 + field public static final int LISTEN_EMERGENCY_NUMBER_LIST = 16777216; // 0x1000000 field public static final int LISTEN_MESSAGE_WAITING_INDICATOR = 4; // 0x4 field public static final int LISTEN_NONE = 0; // 0x0 field public static final int LISTEN_SERVICE_STATE = 1; // 0x1 @@ -42943,6 +43419,7 @@ package android.telephony { method public int getLevel(); method public boolean isGsm(); method public void writeToParcel(android.os.Parcel, int); + field public static final int INVALID = 2147483647; // 0x7fffffff } public final class SmsManager { @@ -43083,6 +43560,7 @@ package android.telephony { method public java.lang.String getCountryIso(); method public int getDataRoaming(); method public java.lang.CharSequence getDisplayName(); + method public java.lang.String getGroupUuid(); method public java.lang.String getIccId(); method public int getIconTint(); method public deprecated int getMcc(); @@ -43090,7 +43568,6 @@ package android.telephony { method public deprecated int getMnc(); method public java.lang.String getMncString(); method public java.lang.String getNumber(); - method public int getParentSubId(); method public int getSimSlotIndex(); method public int getSubscriptionId(); method public boolean isEmbedded(); @@ -43114,7 +43591,7 @@ package android.telephony { method public static int getDefaultSmsSubscriptionId(); method public static int getDefaultSubscriptionId(); method public static int getDefaultVoiceSubscriptionId(); - method public java.util.List getOpportunisticSubscriptions(int); + method public java.util.List getOpportunisticSubscriptions(); method public static int getSlotIndex(int); method public static int[] getSubscriptionIds(int); method public java.util.List getSubscriptionPlans(int); @@ -43124,6 +43601,7 @@ package android.telephony { method public static boolean isValidSubscriptionId(int); method public void removeOnOpportunisticSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener); method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + method public java.lang.String setSubscriptionGroup(int[]); method public void setSubscriptionOverrideCongested(int, boolean, long); method public void setSubscriptionOverrideUnmetered(int, boolean, long); method public void setSubscriptionPlans(int, java.util.List); @@ -43188,6 +43666,8 @@ package android.telephony { method public int getCallState(); method public android.os.PersistableBundle getCarrierConfig(); method public deprecated android.telephony.CellLocation getCellLocation(); + method public java.util.Map> getCurrentEmergencyNumberList(); + method public java.util.Map> getCurrentEmergencyNumberList(int); method public int getDataActivity(); method public int getDataNetworkType(); method public int getDataState(); @@ -43214,6 +43694,7 @@ package android.telephony { method public int getNetworkType(); method public int getPhoneCount(); method public int getPhoneType(); + method public int getPreferredOpportunisticDataSubscription(); method public android.telephony.ServiceState getServiceState(); method public android.telephony.SignalStrength getSignalStrength(); method public int getSimCarrierId(); @@ -43241,6 +43722,7 @@ package android.telephony { method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String); method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); method public boolean isConcurrentVoiceAndDataSupported(); + method public boolean isCurrentEmergencyNumber(java.lang.String); method public boolean isDataEnabled(); method public boolean isDataRoamingEnabled(); method public boolean isHearingAidCompatibilitySupported(); @@ -43251,6 +43733,7 @@ package android.telephony { method public boolean isVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle); method public boolean isWorldPhone(); method public void listen(android.telephony.PhoneStateListener, int); + method public void requestCellInfoUpdate(java.util.concurrent.Executor, android.telephony.TelephonyManager.CellInfoCallback); method public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, java.util.concurrent.Executor, android.telephony.TelephonyScanManager.NetworkScanCallback); method public void sendDialerSpecialCode(java.lang.String); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); @@ -43262,6 +43745,7 @@ package android.telephony { method public boolean setNetworkSelectionModeManual(java.lang.String, boolean); method public boolean setOperatorBrandOverride(java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setPreferredOpportunisticDataSubscription(int); method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public deprecated void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); @@ -43352,6 +43836,11 @@ package android.telephony { field public static final java.lang.String VVM_TYPE_OMTP = "vvm_type_omtp"; } + public static abstract class TelephonyManager.CellInfoCallback { + ctor public TelephonyManager.CellInfoCallback(); + method public abstract void onCellInfo(java.util.List); + } + public static abstract class TelephonyManager.UssdResponseCallback { ctor public TelephonyManager.UssdResponseCallback(); method public void onReceiveUssdResponse(android.telephony.TelephonyManager, java.lang.String, java.lang.CharSequence); @@ -45708,6 +46197,7 @@ package android.transition { ctor public deprecated Scene(android.view.ViewGroup, android.view.ViewGroup); method public void enter(); method public void exit(); + method public static android.transition.Scene getCurrentScene(android.view.View); method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context); method public android.view.ViewGroup getSceneRoot(); method public void setEnterAction(java.lang.Runnable); @@ -45859,7 +46349,8 @@ package android.transition { } public class TransitionValues { - ctor public TransitionValues(); + ctor public deprecated TransitionValues(); + ctor public TransitionValues(android.view.View); field public final java.util.Map values; field public android.view.View view; } @@ -47451,6 +47942,7 @@ package android.view { field public static final int KEYCODE_PLUS = 81; // 0x51 field public static final int KEYCODE_POUND = 18; // 0x12 field public static final int KEYCODE_POWER = 26; // 0x1a + field public static final int KEYCODE_PROFILE_SWITCH = 288; // 0x120 field public static final int KEYCODE_PROG_BLUE = 186; // 0xba field public static final int KEYCODE_PROG_GREEN = 184; // 0xb8 field public static final int KEYCODE_PROG_RED = 183; // 0xb7 @@ -47489,6 +47981,8 @@ package android.view { field public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; // 0x118 field public static final int KEYCODE_T = 48; // 0x30 field public static final int KEYCODE_TAB = 61; // 0x3d + field public static final int KEYCODE_THUMBS_DOWN = 287; // 0x11f + field public static final int KEYCODE_THUMBS_UP = 286; // 0x11e field public static final int KEYCODE_TV = 170; // 0xaa field public static final int KEYCODE_TV_ANTENNA_CABLE = 242; // 0xf2 field public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; // 0xfc @@ -48192,6 +48686,7 @@ package android.view { ctor public TouchDelegate(android.graphics.Rect, android.view.View); method public android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo getTouchDelegateInfo(); method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTouchExplorationHoverEvent(android.view.MotionEvent); field public static final int ABOVE = 1; // 0x1 field public static final int BELOW = 2; // 0x2 field public static final int TO_LEFT = 4; // 0x4 @@ -48369,6 +48864,7 @@ package android.view { method public int getId(); method public int getImportantForAccessibility(); method public int getImportantForAutofill(); + method public int getImportantForContentCapture(); method public boolean getKeepScreenOn(); method public android.view.KeyEvent.DispatcherState getKeyDispatcherState(); method public int getLabelFor(); @@ -48494,6 +48990,7 @@ package android.view { method public final boolean isFocusableInTouchMode(); method public boolean isFocused(); method public final boolean isFocusedByDefault(); + method public boolean isForceDarkAllowed(); method public boolean isHapticFeedbackEnabled(); method public boolean isHardwareAccelerated(); method public boolean isHorizontalFadingEdgeEnabled(); @@ -48501,6 +48998,7 @@ package android.view { method public boolean isHovered(); method public boolean isImportantForAccessibility(); method public final boolean isImportantForAutofill(); + method public final boolean isImportantForContentCapture(); method public boolean isInEditMode(); method public boolean isInLayout(); method public boolean isInTouchMode(); @@ -48575,6 +49073,7 @@ package android.view { method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); method public void onProvideAutofillStructure(android.view.ViewStructure, int); method public void onProvideAutofillVirtualStructure(android.view.ViewStructure, int); + method public boolean onProvideContentCaptureStructure(android.view.ViewStructure, int); method public void onProvideStructure(android.view.ViewStructure); method public void onProvideVirtualStructure(android.view.ViewStructure); method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int); @@ -48680,6 +49179,7 @@ package android.view { method public void setFocusable(int); method public void setFocusableInTouchMode(boolean); method public void setFocusedByDefault(boolean); + method public void setForceDarkAllowed(boolean); method public void setForeground(android.graphics.drawable.Drawable); method public void setForegroundGravity(int); method public void setForegroundTintList(android.content.res.ColorStateList); @@ -48692,6 +49192,7 @@ package android.view { method public void setId(int); method public void setImportantForAccessibility(int); method public void setImportantForAutofill(int); + method public void setImportantForContentCapture(int); method public void setKeepScreenOn(boolean); method public void setKeyboardNavigationCluster(boolean); method public void setLabelFor(int); @@ -48862,6 +49363,11 @@ package android.view { field public static final int IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS = 8; // 0x8 field public static final int IMPORTANT_FOR_AUTOFILL_YES = 1; // 0x1 field public static final int IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS = 4; // 0x4 + field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_AUTO = 0; // 0x0 + field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO = 2; // 0x2 + field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS = 8; // 0x8 + field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES = 1; // 0x1 + field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS = 4; // 0x4 field public static final int INVISIBLE = 4; // 0x4 field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000 field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2 @@ -49848,17 +50354,29 @@ package android.view { method public int getStableInsetLeft(); method public int getStableInsetRight(); method public int getStableInsetTop(); + method public android.graphics.Insets getStableInsets(); method public int getSystemWindowInsetBottom(); method public int getSystemWindowInsetLeft(); method public int getSystemWindowInsetRight(); method public int getSystemWindowInsetTop(); + method public android.graphics.Insets getSystemWindowInsets(); method public boolean hasInsets(); method public boolean hasStableInsets(); method public boolean hasSystemWindowInsets(); + method public android.view.WindowInsets inset(int, int, int, int); method public boolean isConsumed(); method public boolean isRound(); - method public android.view.WindowInsets replaceSystemWindowInsets(int, int, int, int); - method public android.view.WindowInsets replaceSystemWindowInsets(android.graphics.Rect); + method public deprecated android.view.WindowInsets replaceSystemWindowInsets(int, int, int, int); + method public deprecated android.view.WindowInsets replaceSystemWindowInsets(android.graphics.Rect); + } + + public static class WindowInsets.Builder { + ctor public WindowInsets.Builder(); + ctor public WindowInsets.Builder(android.view.WindowInsets); + method public android.view.WindowInsets build(); + method public android.view.WindowInsets.Builder setDisplayCutout(android.view.DisplayCutout); + method public android.view.WindowInsets.Builder setStableInsets(android.graphics.Insets); + method public android.view.WindowInsets.Builder setSystemWindowInsets(android.graphics.Insets); } public abstract interface WindowManager implements android.view.ViewManager { @@ -50114,7 +50632,7 @@ package android.view.accessibility { method public deprecated java.util.List getAccessibilityServiceList(); method public java.util.List getEnabledAccessibilityServiceList(int); method public java.util.List getInstalledAccessibilityServiceList(); - method public int getMinimumUiTimeoutMillis(); + method public int getRecommendedTimeoutMillis(int, int); method public void interrupt(); method public static boolean isAccessibilityButtonSupported(); method public boolean isEnabled(); @@ -50123,6 +50641,9 @@ package android.view.accessibility { method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener); method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener); method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + field public static final int FLAG_CONTENT_CONTROLS = 4; // 0x4 + field public static final int FLAG_CONTENT_ICONS = 1; // 0x1 + field public static final int FLAG_CONTENT_TEXT = 2; // 0x2 } public static abstract interface AccessibilityManager.AccessibilityStateChangeListener { @@ -50339,6 +50860,10 @@ package android.view.accessibility { field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_HTML_ELEMENT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_DOWN; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_LEFT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_RIGHT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_UP; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PASTE; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT; @@ -51291,8 +51816,116 @@ package android.view.inputmethod { } +package android.view.intelligence { + + public final class IntelligenceManager { + method public void disableContentCapture(); + method public android.content.ComponentName getIntelligenceServiceComponentName(); + method public boolean isContentCaptureEnabled(); + method public android.view.ViewStructure newVirtualViewStructure(android.view.autofill.AutofillId, int); + method public void notifyViewAppeared(android.view.ViewStructure); + method public void notifyViewDisappeared(android.view.autofill.AutofillId); + method public void notifyViewTextChanged(android.view.autofill.AutofillId, java.lang.CharSequence, int); + field public static final int FLAG_USER_INPUT = 1; // 0x1 + } + +} + package android.view.textclassifier { + public final class ConversationActions implements android.os.Parcelable { + ctor public ConversationActions(java.util.List); + method public int describeContents(); + method public java.util.List getConversationActions(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String HINT_FOR_IN_APP = "in_app"; + field public static final java.lang.String HINT_FOR_NOTIFICATION = "notification"; + field public static final java.lang.String TYPE_CALL_PHONE = "call_phone"; + field public static final java.lang.String TYPE_CREATE_REMINDER = "create_reminder"; + field public static final java.lang.String TYPE_OPEN_URL = "open_url"; + field public static final java.lang.String TYPE_SEND_EMAIL = "send_email"; + field public static final java.lang.String TYPE_SEND_SMS = "send_sms"; + field public static final java.lang.String TYPE_SHARE_LOCATION = "share_location"; + field public static final java.lang.String TYPE_TEXT_REPLY = "text_reply"; + field public static final java.lang.String TYPE_TRACK_FLIGHT = "track_flight"; + field public static final java.lang.String TYPE_VIEW_CALENDAR = "view_calendar"; + field public static final java.lang.String TYPE_VIEW_MAP = "view_map"; + } + + public static final class ConversationActions.ConversationAction implements android.os.Parcelable { + method public int describeContents(); + method public android.app.RemoteAction getAction(); + method public float getConfidenceScore(); + method public android.os.Bundle getExtras(); + method public java.lang.CharSequence getTextReply(); + method public java.lang.String getType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class ConversationActions.ConversationAction.Builder { + ctor public ConversationActions.ConversationAction.Builder(java.lang.String); + method public android.view.textclassifier.ConversationActions.ConversationAction build(); + method public android.view.textclassifier.ConversationActions.ConversationAction.Builder setAction(android.app.RemoteAction); + method public android.view.textclassifier.ConversationActions.ConversationAction.Builder setConfidenceScore(float); + method public android.view.textclassifier.ConversationActions.ConversationAction.Builder setExtras(android.os.Bundle); + method public android.view.textclassifier.ConversationActions.ConversationAction.Builder setTextReply(java.lang.CharSequence); + } + + public static final class ConversationActions.Message implements android.os.Parcelable { + method public int describeContents(); + method public android.app.Person getAuthor(); + method public android.os.Bundle getExtras(); + method public java.lang.CharSequence getText(); + method public java.time.ZonedDateTime getTime(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class ConversationActions.Message.Builder { + ctor public ConversationActions.Message.Builder(); + method public android.view.textclassifier.ConversationActions.Message build(); + method public android.view.textclassifier.ConversationActions.Message.Builder setAuthor(android.app.Person); + method public android.view.textclassifier.ConversationActions.Message.Builder setComposeTime(java.time.ZonedDateTime); + method public android.view.textclassifier.ConversationActions.Message.Builder setExtras(android.os.Bundle); + method public android.view.textclassifier.ConversationActions.Message.Builder setText(java.lang.CharSequence); + } + + public static final class ConversationActions.Request implements android.os.Parcelable { + method public int describeContents(); + method public java.util.List getConversation(); + method public java.util.List getHints(); + method public int getMaxSuggestions(); + method public android.view.textclassifier.ConversationActions.TypeConfig getTypeConfig(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class ConversationActions.Request.Builder { + ctor public ConversationActions.Request.Builder(java.util.List); + method public android.view.textclassifier.ConversationActions.Request build(); + method public android.view.textclassifier.ConversationActions.Request.Builder setHints(java.util.List); + method public android.view.textclassifier.ConversationActions.Request.Builder setMaxSuggestions(int); + method public android.view.textclassifier.ConversationActions.Request.Builder setTypeConfig(android.view.textclassifier.ConversationActions.TypeConfig); + } + + public static final class ConversationActions.TypeConfig implements android.os.Parcelable { + method public int describeContents(); + method public java.util.Collection resolveTypes(java.util.Collection); + method public boolean shouldIncludeTypesFromTextClassifier(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class ConversationActions.TypeConfig.Builder { + ctor public ConversationActions.TypeConfig.Builder(); + method public android.view.textclassifier.ConversationActions.TypeConfig build(); + method public android.view.textclassifier.ConversationActions.TypeConfig.Builder includeTypesFromTextClassifier(boolean); + method public android.view.textclassifier.ConversationActions.TypeConfig.Builder setExcludedTypes(java.util.Collection); + method public android.view.textclassifier.ConversationActions.TypeConfig.Builder setIncludedTypes(java.util.Collection); + } + public final class SelectionEvent implements android.os.Parcelable { method public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int); method public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int, android.view.textclassifier.TextClassification); @@ -51347,6 +51980,7 @@ package android.view.textclassifier { method public float getConfidenceScore(java.lang.String); method public java.lang.String getEntity(int); method public int getEntityCount(); + method public android.os.Bundle getExtras(); method public deprecated android.graphics.drawable.Drawable getIcon(); method public java.lang.String getId(); method public deprecated android.content.Intent getIntent(); @@ -51362,6 +51996,7 @@ package android.view.textclassifier { method public android.view.textclassifier.TextClassification.Builder addAction(android.app.RemoteAction); method public android.view.textclassifier.TextClassification build(); method public android.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float); + method public android.view.textclassifier.TextClassification.Builder setExtras(android.os.Bundle); method public deprecated android.view.textclassifier.TextClassification.Builder setIcon(android.graphics.drawable.Drawable); method public android.view.textclassifier.TextClassification.Builder setId(java.lang.String); method public deprecated android.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent); @@ -51374,6 +52009,7 @@ package android.view.textclassifier { method public int describeContents(); method public android.os.LocaleList getDefaultLocales(); method public int getEndIndex(); + method public android.os.Bundle getExtras(); method public java.time.ZonedDateTime getReferenceTime(); method public int getStartIndex(); method public java.lang.CharSequence getText(); @@ -51385,6 +52021,7 @@ package android.view.textclassifier { ctor public TextClassification.Request.Builder(java.lang.CharSequence, int, int); method public android.view.textclassifier.TextClassification.Request build(); method public android.view.textclassifier.TextClassification.Request.Builder setDefaultLocales(android.os.LocaleList); + method public android.view.textclassifier.TextClassification.Request.Builder setExtras(android.os.Bundle); method public android.view.textclassifier.TextClassification.Request.Builder setReferenceTime(java.time.ZonedDateTime); } @@ -51429,6 +52066,7 @@ package android.view.textclassifier { method public default int getMaxGenerateLinksTextLength(); method public default boolean isDestroyed(); method public default void onSelectionEvent(android.view.textclassifier.SelectionEvent); + method public default android.view.textclassifier.ConversationActions suggestConversationActions(android.view.textclassifier.ConversationActions.Request); method public default android.view.textclassifier.TextSelection suggestSelection(android.view.textclassifier.TextSelection.Request); method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList); field public static final java.lang.String HINT_TEXT_IS_EDITABLE = "android.text_is_editable"; @@ -51501,6 +52139,7 @@ package android.view.textclassifier { public final class TextLinks implements android.os.Parcelable { method public int apply(android.text.Spannable, int, java.util.function.Function); method public int describeContents(); + method public android.os.Bundle getExtras(); method public java.util.Collection getLinks(); method public void writeToParcel(android.os.Parcel, int); field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0 @@ -51517,12 +52156,14 @@ package android.view.textclassifier { method public android.view.textclassifier.TextLinks.Builder addLink(int, int, java.util.Map); method public android.view.textclassifier.TextLinks build(); method public android.view.textclassifier.TextLinks.Builder clearTextLinks(); + method public android.view.textclassifier.TextLinks.Builder setExtras(android.os.Bundle); } public static final class TextLinks.Request implements android.os.Parcelable { method public int describeContents(); method public android.os.LocaleList getDefaultLocales(); method public android.view.textclassifier.TextClassifier.EntityConfig getEntityConfig(); + method public android.os.Bundle getExtras(); method public java.lang.CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -51533,6 +52174,7 @@ package android.view.textclassifier { method public android.view.textclassifier.TextLinks.Request build(); method public android.view.textclassifier.TextLinks.Request.Builder setDefaultLocales(android.os.LocaleList); method public android.view.textclassifier.TextLinks.Request.Builder setEntityConfig(android.view.textclassifier.TextClassifier.EntityConfig); + method public android.view.textclassifier.TextLinks.Request.Builder setExtras(android.os.Bundle); } public static final class TextLinks.TextLink implements android.os.Parcelable { @@ -51557,6 +52199,7 @@ package android.view.textclassifier { method public float getConfidenceScore(java.lang.String); method public java.lang.String getEntity(int); method public int getEntityCount(); + method public android.os.Bundle getExtras(); method public java.lang.String getId(); method public int getSelectionEndIndex(); method public int getSelectionStartIndex(); @@ -51568,6 +52211,7 @@ package android.view.textclassifier { ctor public TextSelection.Builder(int, int); method public android.view.textclassifier.TextSelection build(); method public android.view.textclassifier.TextSelection.Builder setEntityType(java.lang.String, float); + method public android.view.textclassifier.TextSelection.Builder setExtras(android.os.Bundle); method public android.view.textclassifier.TextSelection.Builder setId(java.lang.String); } @@ -51575,6 +52219,7 @@ package android.view.textclassifier { method public int describeContents(); method public android.os.LocaleList getDefaultLocales(); method public int getEndIndex(); + method public android.os.Bundle getExtras(); method public int getStartIndex(); method public java.lang.CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); @@ -51585,6 +52230,7 @@ package android.view.textclassifier { ctor public TextSelection.Request.Builder(java.lang.CharSequence, int, int); method public android.view.textclassifier.TextSelection.Request build(); method public android.view.textclassifier.TextSelection.Request.Builder setDefaultLocales(android.os.LocaleList); + method public android.view.textclassifier.TextSelection.Request.Builder setExtras(android.os.Bundle); } } @@ -53719,10 +54365,14 @@ package android.widget { method public int getSourceWidth(); method public int getWidth(); method public float getZoom(); + method public boolean isForcePositionWithinWindowSystemInsetsBounds(); method public void setZoom(float); method public void show(float, float); method public void show(float, float, float, float); method public void update(); + field public static final int SOURCE_BOUND_MAX_IN_SURFACE = 0; // 0x0 + field public static final int SOURCE_BOUND_MAX_IN_VIEW = 1; // 0x1 + field public static final int SOURCE_BOUND_MAX_VISIBLE = 2; // 0x2 } public static class Magnifier.Builder { @@ -53731,7 +54381,9 @@ package android.widget { method public android.widget.Magnifier.Builder setCornerRadius(float); method public android.widget.Magnifier.Builder setDefaultSourceToMagnifierOffset(int, int); method public android.widget.Magnifier.Builder setElevation(float); + method public android.widget.Magnifier.Builder setForcePositionWithinWindowSystemInsetsBounds(boolean); method public android.widget.Magnifier.Builder setSize(int, int); + method public android.widget.Magnifier.Builder setSourceBounds(int, int, int, int); method public android.widget.Magnifier.Builder setZoom(float); } @@ -54157,6 +54809,7 @@ package android.widget { method public void setLong(int, java.lang.String, long); method public void setOnClickFillInIntent(int, android.content.Intent); method public void setOnClickPendingIntent(int, android.app.PendingIntent); + method public void setOnClickResponse(int, android.widget.RemoteViews.RemoteResponse); method public void setPendingIntentTemplate(int, android.app.PendingIntent); method public void setProgressBar(int, int, int, boolean); method public void setRelativeScrollPosition(int, int); @@ -54177,6 +54830,7 @@ package android.widget { method public void showPrevious(int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS"; } public static class RemoteViews.ActionException extends java.lang.RuntimeException { @@ -54184,6 +54838,13 @@ package android.widget { ctor public RemoteViews.ActionException(java.lang.String); } + public static class RemoteViews.RemoteResponse { + ctor public RemoteViews.RemoteResponse(); + method public android.widget.RemoteViews.RemoteResponse addSharedElement(int, java.lang.String); + method public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(android.content.Intent); + method public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(android.app.PendingIntent); + } + public static abstract class RemoteViews.RemoteView implements java.lang.annotation.Annotation { } @@ -54780,6 +55441,9 @@ package android.widget { method public android.os.LocaleList getTextLocales(); method public android.text.PrecomputedText.Params getTextMetricsParams(); method public float getTextScaleX(); + method public android.graphics.drawable.Drawable getTextSelectHandle(); + method public android.graphics.drawable.Drawable getTextSelectHandleLeft(); + method public android.graphics.drawable.Drawable getTextSelectHandleRight(); method public float getTextSize(); method public int getTotalPaddingBottom(); method public int getTotalPaddingEnd(); @@ -54908,6 +55572,12 @@ package android.widget { method public void setTextLocales(android.os.LocaleList); method public void setTextMetricsParams(android.text.PrecomputedText.Params); method public void setTextScaleX(float); + method public void setTextSelectHandle(android.graphics.drawable.Drawable); + method public void setTextSelectHandle(int); + method public void setTextSelectHandleLeft(android.graphics.drawable.Drawable); + method public void setTextSelectHandleLeft(int); + method public void setTextSelectHandleRight(android.graphics.drawable.Drawable); + method public void setTextSelectHandleRight(int); method public void setTextSize(float); method public void setTextSize(int, float); method public final void setTransformationMethod(android.text.method.TransformationMethod); @@ -73269,10 +73939,13 @@ package javax.net.ssl { method public abstract void beginHandshake() throws javax.net.ssl.SSLException; method public abstract void closeInbound() throws javax.net.ssl.SSLException; method public abstract void closeOutbound(); + method public java.lang.String getApplicationProtocol(); method public abstract java.lang.Runnable getDelegatedTask(); method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public java.lang.String getHandshakeApplicationProtocol(); + method public java.util.function.BiFunction, java.lang.String> getHandshakeApplicationProtocolSelector(); method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus(); method public abstract boolean getNeedClientAuth(); @@ -73289,6 +73962,7 @@ package javax.net.ssl { method public abstract void setEnableSessionCreation(boolean); method public abstract void setEnabledCipherSuites(java.lang.String[]); method public abstract void setEnabledProtocols(java.lang.String[]); + method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction, java.lang.String>); method public abstract void setNeedClientAuth(boolean); method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); @@ -73347,6 +74021,7 @@ package javax.net.ssl { ctor public SSLParameters(java.lang.String[]); ctor public SSLParameters(java.lang.String[], java.lang.String[]); method public java.security.AlgorithmConstraints getAlgorithmConstraints(); + method public java.lang.String[] getApplicationProtocols(); method public java.lang.String[] getCipherSuites(); method public java.lang.String getEndpointIdentificationAlgorithm(); method public boolean getNeedClientAuth(); @@ -73356,6 +74031,7 @@ package javax.net.ssl { method public final boolean getUseCipherSuitesOrder(); method public boolean getWantClientAuth(); method public void setAlgorithmConstraints(java.security.AlgorithmConstraints); + method public void setApplicationProtocols(java.lang.String[]); method public void setCipherSuites(java.lang.String[]); method public void setEndpointIdentificationAlgorithm(java.lang.String); method public void setNeedClientAuth(boolean); @@ -73460,9 +74136,12 @@ package javax.net.ssl { ctor protected SSLSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException; ctor protected SSLSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; method public abstract void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener); + method public java.lang.String getApplicationProtocol(); method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public java.lang.String getHandshakeApplicationProtocol(); + method public java.util.function.BiFunction, java.lang.String> getHandshakeApplicationProtocolSelector(); method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract boolean getNeedClientAuth(); method public javax.net.ssl.SSLParameters getSSLParameters(); @@ -73475,6 +74154,7 @@ package javax.net.ssl { method public abstract void setEnableSessionCreation(boolean); method public abstract void setEnabledCipherSuites(java.lang.String[]); method public abstract void setEnabledProtocols(java.lang.String[]); + method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction, java.lang.String>); method public abstract void setNeedClientAuth(boolean); method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); diff --git a/api/system-current.txt b/api/system-current.txt index 8d0b71d5d3a67c4f601b3386addaa9c8bf987762..249124831a56f7166614b433c3b565c161c2ccc1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -24,6 +24,7 @@ package android { field public static final java.lang.String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH"; field public static final java.lang.String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE"; field public static final java.lang.String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE"; + field public static final java.lang.String BIND_INTELLIGENCE_SERVICE = "android.permission.BIND_INTELLIGENCE_SERVICE"; field public static final java.lang.String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET"; field public static final java.lang.String BIND_NETWORK_RECOMMENDATION_SERVICE = "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE"; field public static final java.lang.String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE"; @@ -93,14 +94,17 @@ package android { field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; field public static final java.lang.String LOCK_DEVICE = "android.permission.LOCK_DEVICE"; field public static final java.lang.String LOOP_RADIO = "android.permission.LOOP_RADIO"; + field public static final java.lang.String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY"; field public static final java.lang.String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS"; field public static final java.lang.String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS"; field public static final java.lang.String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS"; field public static final java.lang.String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL"; field public static final java.lang.String MANAGE_CARRIER_OEM_UNLOCK_STATE = "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE"; field public static final java.lang.String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES"; + field public static final java.lang.String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING"; field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS"; field public static final java.lang.String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS"; + field public static final java.lang.String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS"; field public static final java.lang.String MANAGE_SOUND_TRIGGER = "android.permission.MANAGE_SOUND_TRIGGER"; field public static final java.lang.String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS"; field public static final java.lang.String MANAGE_USB = "android.permission.MANAGE_USB"; @@ -133,6 +137,7 @@ package android { field public static final java.lang.String PROVIDE_RESOLVER_RANKER_SERVICE = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE"; field public static final java.lang.String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT"; field public static final java.lang.String QUERY_TIME_ZONE_RULES = "android.permission.QUERY_TIME_ZONE_RULES"; + field public static final java.lang.String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS"; field public static final java.lang.String READ_CONTENT_RATING_SYSTEMS = "android.permission.READ_CONTENT_RATING_SYSTEMS"; field public static final java.lang.String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE"; field public static final java.lang.String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS"; @@ -291,8 +296,13 @@ package android.app { } public class AppOpsManager { + method public java.util.List getAllHistoricPackagesOps(java.lang.String[], long, long); + method public android.app.AppOpsManager.HistoricalPackageOps getHistoricalPackagesOps(int, java.lang.String, java.lang.String[], long, long); method public static java.lang.String[] getOpStrs(); method public java.util.List getOpsForPackage(int, java.lang.String, int[]); + method public java.util.List getPackagesForOpStrs(java.lang.String[]); + method public static int opToDefaultMode(java.lang.String); + method public static java.lang.String opToPermission(java.lang.String); method public void setMode(java.lang.String, int, java.lang.String, int); method public void setUidMode(java.lang.String, int, int); field public static final java.lang.String OPSTR_ACCEPT_HANDOVER = "android:accept_handover"; @@ -338,6 +348,39 @@ package android.app { field public static final java.lang.String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms"; field public static final java.lang.String OPSTR_WRITE_SMS = "android:write_sms"; field public static final java.lang.String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper"; + field public static final int UID_STATE_BACKGROUND = 4; // 0x4 + field public static final int UID_STATE_CACHED = 5; // 0x5 + field public static final int UID_STATE_FOREGROUND = 3; // 0x3 + field public static final int UID_STATE_FOREGROUND_SERVICE = 2; // 0x2 + field public static final int UID_STATE_PERSISTENT = 0; // 0x0 + field public static final int UID_STATE_TOP = 1; // 0x1 + } + + public static final class AppOpsManager.HistoricalOpEntry implements android.os.Parcelable { + method public int describeContents(); + method public long getAccessCount(int); + method public long getAccessDuration(int); + method public long getBackgroundAccessCount(); + method public long getBackgroundAccessDuration(); + method public long getBackgroundRejectCount(); + method public long getForegroundAccessCount(); + method public long getForegroundAccessDuration(); + method public long getForegroundRejectCount(); + method public java.lang.String getOp(); + method public long getRejectCount(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class AppOpsManager.HistoricalPackageOps implements android.os.Parcelable { + method public int describeContents(); + method public android.app.AppOpsManager.HistoricalOpEntry getEntry(java.lang.String); + method public android.app.AppOpsManager.HistoricalOpEntry getEntryAt(int); + method public int getEntryCount(); + method public java.lang.String getPackageName(); + method public int getUid(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.OpEntry implements android.os.Parcelable { @@ -573,6 +616,14 @@ package android.app.admin { } +package android.app.assist { + + public static class AssistStructure.ViewNode { + ctor public AssistStructure.ViewNode(); + } + +} + package android.app.backup { public class BackupDataInput { @@ -802,6 +853,26 @@ package android.app.job { } +package android.app.role { + + public final class RoleManager { + method public void addRoleHolderAsUser(java.lang.String, java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback); + method public boolean addRoleHolderFromController(java.lang.String, java.lang.String); + method public void clearRoleHoldersAsUser(java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback); + method public java.util.List getRoleHolders(java.lang.String); + method public java.util.List getRoleHoldersAsUser(java.lang.String, android.os.UserHandle); + method public void removeRoleHolderAsUser(java.lang.String, java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback); + method public boolean removeRoleHolderFromController(java.lang.String, java.lang.String); + field public static final java.lang.String EXTRA_REQUEST_ROLE_NAME = "android.app.role.extra.REQUEST_ROLE_NAME"; + } + + public abstract interface RoleManagerCallback { + method public abstract void onFailure(); + method public abstract void onSuccess(); + } + +} + package android.app.usage { public final class CacheQuotaHint implements android.os.Parcelable { @@ -850,9 +921,11 @@ package android.app.usage { method public int getAppStandbyBucket(java.lang.String); method public java.util.Map getAppStandbyBuckets(); method public void registerAppUsageObserver(int, java.lang.String[], long, java.util.concurrent.TimeUnit, android.app.PendingIntent); + method public void registerUsageSessionObserver(int, java.lang.String[], long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit, android.app.PendingIntent, android.app.PendingIntent); method public void setAppStandbyBucket(java.lang.String, int); method public void setAppStandbyBuckets(java.util.Map); method public void unregisterAppUsageObserver(int); + method public void unregisterUsageSessionObserver(int); method public void whitelistAppTemporarily(java.lang.String, long, android.os.UserHandle); field public static final java.lang.String EXTRA_OBSERVER_ID = "android.app.usage.extra.OBSERVER_ID"; field public static final java.lang.String EXTRA_TIME_LIMIT = "android.app.usage.extra.TIME_LIMIT"; @@ -980,6 +1053,7 @@ package android.content { field public static final java.lang.String ACTION_INSTALL_INSTANT_APP_PACKAGE = "android.intent.action.INSTALL_INSTANT_APP_PACKAGE"; field public static final java.lang.String ACTION_INSTANT_APP_RESOLVER_SETTINGS = "android.intent.action.INSTANT_APP_RESOLVER_SETTINGS"; field public static final java.lang.String ACTION_INTENT_FILTER_NEEDS_VERIFICATION = "android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION"; + field public static final java.lang.String ACTION_MANAGE_APP_PERMISSION = "android.intent.action.MANAGE_APP_PERMISSION"; field public static final java.lang.String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS"; field public static final java.lang.String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS"; field public static final java.lang.String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS"; @@ -987,7 +1061,9 @@ package android.content { field public static final java.lang.String ACTION_PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED"; field public static final java.lang.String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART"; field public static final java.lang.String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE"; + field public static final java.lang.String ACTION_REVIEW_APP_PERMISSION_USAGE = "android.intent.action.REVIEW_APP_PERMISSION_USAGE"; field public static final java.lang.String ACTION_REVIEW_PERMISSIONS = "android.intent.action.REVIEW_PERMISSIONS"; + field public static final java.lang.String ACTION_REVIEW_PERMISSION_USAGE = "android.intent.action.REVIEW_PERMISSION_USAGE"; field public static final java.lang.String ACTION_SHOW_SUSPENDED_APP_DETAILS = "android.intent.action.SHOW_SUSPENDED_APP_DETAILS"; field public static final deprecated java.lang.String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED"; field public static final java.lang.String ACTION_SPLIT_CONFIGURATION_CHANGED = "android.intent.action.SPLIT_CONFIGURATION_CHANGED"; @@ -1013,6 +1089,7 @@ package android.content { field public static final java.lang.String EXTRA_RESULT_NEEDED = "android.intent.extra.RESULT_NEEDED"; field public static final java.lang.String EXTRA_UNKNOWN_INSTANT_APP = "android.intent.extra.UNKNOWN_INSTANT_APP"; field public static final java.lang.String EXTRA_VERIFICATION_BUNDLE = "android.intent.extra.VERIFICATION_BUNDLE"; + field public static final java.lang.String METADATA_SETUP_VERSION = "android.SETUP_VERSION"; } public class IntentFilter implements android.os.Parcelable { @@ -1129,6 +1206,7 @@ package android.content.pm { public abstract class PackageManager { method public abstract void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public abstract boolean arePermissionsIndividuallyControlled(); + method public boolean canSuspendPackage(java.lang.String); method public abstract java.util.List getAllIntentFilters(java.lang.String); method public android.content.pm.dex.ArtManager getArtManager(); method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int); @@ -1147,6 +1225,7 @@ package android.content.pm { method public java.util.List queryBroadcastReceiversAsUser(android.content.Intent, int, android.os.UserHandle); method public abstract void registerDexModule(java.lang.String, android.content.pm.PackageManager.DexModuleRegisterCallback); method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); + method public void replacePreferredActivity(android.content.IntentFilter, int, java.util.List, android.content.ComponentName); method public abstract void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int); method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence); @@ -2644,6 +2723,7 @@ package android.location { public class LocationManager { method public deprecated boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener); method public deprecated boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener); + method public android.app.PendingIntent createManageLocationPermissionIntent(java.lang.String, java.lang.String); method public void flushGnssBatch(); method public int getGnssBatchSize(); method public java.lang.String getNetworkProviderPackage(); @@ -3540,7 +3620,7 @@ package android.net.wifi { field public byte id; } - public class WifiConfiguration implements android.os.Parcelable { + public deprecated class WifiConfiguration implements android.os.Parcelable { method public boolean hasNoInternetAccess(); method public boolean isEphemeral(); method public boolean isNoInternetAccessExpected(); @@ -3561,6 +3641,8 @@ package android.net.wifi { public class WifiManager { method public void connect(android.net.wifi.WifiConfiguration, android.net.wifi.WifiManager.ActionListener); + method public java.util.List getAllMatchingWifiConfigs(java.util.List); + method public java.util.List getMatchingOsuProviders(java.util.List); method public java.util.List getPrivilegedConfiguredNetworks(); method public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method public int getWifiApState(); @@ -3569,8 +3651,10 @@ package android.net.wifi { method public boolean isPortableHotspotSupported(); method public boolean isWifiApEnabled(); method public boolean isWifiScannerSupported(); + method public void registerNetworkRequestMatchCallback(android.net.wifi.WifiManager.NetworkRequestMatchCallback, android.os.Handler); method public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration); method public boolean startScan(android.os.WorkSource); + method public void unregisterNetworkRequestMatchCallback(android.net.wifi.WifiManager.NetworkRequestMatchCallback); field public static final int CHANGE_REASON_ADDED = 0; // 0x0 field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2 field public static final int CHANGE_REASON_REMOVED = 1; // 0x1 @@ -3598,6 +3682,18 @@ package android.net.wifi { method public abstract void onSuccess(); } + public static abstract interface WifiManager.NetworkRequestMatchCallback { + method public abstract void onMatch(java.util.List); + method public abstract void onUserSelectionCallbackRegistration(android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback); + method public abstract void onUserSelectionConnectFailure(android.net.wifi.WifiConfiguration); + method public abstract void onUserSelectionConnectSuccess(android.net.wifi.WifiConfiguration); + } + + public static abstract interface WifiManager.NetworkRequestUserSelectionCallback { + method public abstract void reject(); + method public abstract void select(android.net.wifi.WifiConfiguration); + } + public class WifiNetworkConnectionStatistics implements android.os.Parcelable { ctor public WifiNetworkConnectionStatistics(int, int); ctor public WifiNetworkConnectionStatistics(); @@ -3740,6 +3836,14 @@ package android.net.wifi.aware { } +package android.net.wifi.p2p { + + public class WifiP2pManager { + method public void factoryReset(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + } + +} + package android.net.wifi.rtt { public static final class RangingRequest.Builder { @@ -4006,8 +4110,13 @@ package android.os { } public final class PowerManager { + method public void dream(long); + method public int getPowerSaveMode(); + method public boolean setDynamicPowerSavings(boolean, int); method public boolean setPowerSaveMode(boolean); method public void userActivity(long, int, int); + field public static final int POWER_SAVER_MODE_DYNAMIC = 1; // 0x1 + field public static final int POWER_SAVER_MODE_PERCENTAGE = 0; // 0x0 field public static final int USER_ACTIVITY_EVENT_ACCESSIBILITY = 3; // 0x3 field public static final int USER_ACTIVITY_EVENT_BUTTON = 1; // 0x1 field public static final int USER_ACTIVITY_EVENT_OTHER = 0; // 0x0 @@ -4153,8 +4262,11 @@ package android.os { method public deprecated int getUserRestrictionSource(java.lang.String, android.os.UserHandle); method public java.util.List getUserRestrictionSources(java.lang.String, android.os.UserHandle); method public boolean hasRestrictedProfiles(); + method public boolean isAdminUser(); + method public boolean isGuestUser(); method public boolean isManagedProfile(); method public boolean isManagedProfile(int); + method public boolean isPrimaryUser(); method public boolean isRestrictedProfile(); field public static final java.lang.String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED"; field public static final deprecated java.lang.String DISALLOW_OEM_UNLOCK = "no_oem_unlock"; @@ -4445,10 +4557,13 @@ package android.provider { field public static final java.lang.String CARRIER_APP_NAMES = "carrier_app_names"; field public static final java.lang.String CARRIER_APP_WHITELIST = "carrier_app_whitelist"; field public static final java.lang.String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus"; + field public static final java.lang.String DEVICE_DEMO_MODE = "device_demo_mode"; + field public static final java.lang.String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED = "device_provisioning_mobile_data"; field public static final java.lang.String EUICC_PROVISIONED = "euicc_provisioned"; field public static final java.lang.String INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT = "install_carrier_app_notification_persistent"; field public static final java.lang.String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis"; field public static final java.lang.String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update"; + field public static final java.lang.String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; field public static final java.lang.String SMS_ACCESS_RESTRICTION_ENABLED = "sms_access_restriction_enabled"; field public static final java.lang.String THEATER_MODE_ON = "theater_mode_on"; field public static final java.lang.String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; @@ -4459,15 +4574,27 @@ package android.provider { public static final class Settings.Secure extends android.provider.Settings.NameValueTable { method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String, java.lang.String, boolean); method public static void resetToDefaults(android.content.ContentResolver, java.lang.String); + field public static final java.lang.String ASSIST_GESTURE_SETUP_COMPLETE = "assist_gesture_setup_complete"; field public static final java.lang.String AUTOFILL_FEATURE_FIELD_CLASSIFICATION = "autofill_field_classification"; field public static final java.lang.String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT = "autofill_user_data_max_category_count"; field public static final java.lang.String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE = "autofill_user_data_max_field_classification_size"; field public static final java.lang.String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE = "autofill_user_data_max_user_data_size"; field public static final java.lang.String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH = "autofill_user_data_max_value_length"; field public static final java.lang.String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH = "autofill_user_data_min_value_length"; + field public static final java.lang.String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category."; + field public static final java.lang.String DOZE_ALWAYS_ON = "doze_always_on"; field public static final java.lang.String HUSH_GESTURE_USED = "hush_gesture_used"; field public static final java.lang.String INSTANT_APPS_ENABLED = "instant_apps_enabled"; + field public static final java.lang.String LAST_SETUP_SHOWN = "last_setup_shown"; + field public static final java.lang.String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications"; + field public static final java.lang.String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications"; field public static final java.lang.String MANUAL_RINGER_TOGGLE_COUNT = "manual_ringer_toggle_count"; + field public static final java.lang.String USER_SETUP_COMPLETE = "user_setup_complete"; + field public static final int USER_SETUP_PERSONALIZATION_COMPLETE = 10; // 0xa + field public static final int USER_SETUP_PERSONALIZATION_NOT_STARTED = 0; // 0x0 + field public static final int USER_SETUP_PERSONALIZATION_PAUSED = 2; // 0x2 + field public static final int USER_SETUP_PERSONALIZATION_STARTED = 1; // 0x1 + field public static final java.lang.String USER_SETUP_PERSONALIZATION_STATE = "user_setup_personalization_state"; field public static final java.lang.String VOLUME_HUSH_GESTURE = "volume_hush_gesture"; } @@ -4506,6 +4633,19 @@ package android.provider { } +package android.rolecontrollerservice { + + public abstract class RoleControllerService extends android.app.Service { + ctor public RoleControllerService(); + method public abstract void onAddRoleHolder(java.lang.String, java.lang.String, android.app.role.RoleManagerCallback); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract void onClearRoleHolders(java.lang.String, android.app.role.RoleManagerCallback); + method public abstract void onRemoveRoleHolder(java.lang.String, java.lang.String, android.app.role.RoleManagerCallback); + field public static final java.lang.String SERVICE_INTERFACE = "android.rolecontrollerservice.RoleControllerService"; + } + +} + package android.security.keystore { public abstract class AttestationUtils { @@ -4645,6 +4785,16 @@ package android.service.autofill { } +package android.service.carrier { + + public abstract class ApnService extends android.app.Service { + ctor public ApnService(); + method public abstract java.util.List onRestoreApns(int); + method public android.os.IBinder onBind(android.content.Intent); + } + +} + package android.service.euicc { public final class EuiccProfileInfo implements android.os.Parcelable { @@ -4764,6 +4914,36 @@ package android.service.euicc { } +package android.service.intelligence { + + public abstract class IntelligenceService extends android.app.Service { + ctor public IntelligenceService(); + method public abstract void onContentCaptureEvent(android.service.intelligence.InteractionSessionId, java.util.List); + method public void onCreateInteractionSession(android.service.intelligence.InteractionContext, android.service.intelligence.InteractionSessionId); + method public void onDestroyInteractionSession(android.service.intelligence.InteractionSessionId); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.intelligence.IntelligenceService"; + } + + public final class InteractionContext implements android.os.Parcelable { + method public int describeContents(); + method public android.content.ComponentName getActivityComponent(); + method public int getDisplayId(); + method public int getFlags(); + method public int getTaskId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1 + field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2 + } + + public final class InteractionSessionId implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + package android.service.notification { public final class Adjustment implements android.os.Parcelable { @@ -5263,15 +5443,21 @@ package android.telecom { method public int getAllPhoneAccountsCount(); method public int getCallState(); method public android.telecom.PhoneAccountHandle getConnectionManager(); + method public int getCurrentTtyMode(); method public deprecated android.content.ComponentName getDefaultPhoneApp(); method public java.util.List getPhoneAccountsForPackage(); method public java.util.List getPhoneAccountsSupportingScheme(java.lang.String); method public boolean isInEmergencyCall(); method public boolean isRinging(); method public boolean isTtySupported(); + method public boolean setDefaultDialer(java.lang.String); field public static final java.lang.String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT"; field public static final java.lang.String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT"; field public static final java.lang.String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE"; + field public static final int TTY_MODE_FULL = 1; // 0x1 + field public static final int TTY_MODE_HCO = 2; // 0x2 + field public static final int TTY_MODE_OFF = 0; // 0x0 + field public static final int TTY_MODE_VCO = 3; // 0x3 } } @@ -5285,7 +5471,9 @@ package android.telephony { public class CarrierConfigManager { method public static android.os.PersistableBundle getDefaultConfig(); + method public void overrideConfig(int, android.os.PersistableBundle); method public void updateConfigForPhoneId(int, java.lang.String); + field public static final java.lang.String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string"; field public static final java.lang.String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string"; } @@ -5311,6 +5499,7 @@ package android.telephony { method public int getDomain(); method public int getRegState(); method public int getRejectCause(); + method public int getRoamingType(); method public int getTransportType(); method public boolean isEmergencyEnabled(); method public boolean isRoaming(); @@ -5358,7 +5547,11 @@ package android.telephony { public class PhoneStateListener { method public void onRadioPowerStateChanged(int); + method public void onSrvccStateChanged(int); + method public void onVoiceActivationStateChanged(int); field public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000 + field public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000 + field public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000 } public class ServiceState implements android.os.Parcelable { @@ -5368,6 +5561,10 @@ package android.telephony { method public deprecated android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); method public java.util.List getNetworkRegistrationStatesForDomain(int); method public java.util.List getNetworkRegistrationStatesForTransportType(int); + field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2 + field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3 + field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0 + field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1 } public final class SmsManager { @@ -5406,8 +5603,12 @@ package android.telephony { method public void setSubscriptionPlans(int, java.util.List); field public static final java.lang.String ACTION_MANAGE_SUBSCRIPTION_PLANS = "android.telephony.action.MANAGE_SUBSCRIPTION_PLANS"; field public static final java.lang.String ACTION_REFRESH_SUBSCRIPTION_PLANS = "android.telephony.action.REFRESH_SUBSCRIPTION_PLANS"; - field public static final android.net.Uri ENHANCED_4G_ENABLED_CONTENT_URI; + field public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI; + field public static final android.net.Uri VT_ENABLED_CONTENT_URI; field public static final android.net.Uri WFC_ENABLED_CONTENT_URI; + field public static final android.net.Uri WFC_MODE_CONTENT_URI; + field public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI; + field public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI; } public final class SubscriptionPlan implements android.os.Parcelable { @@ -5491,6 +5692,7 @@ package android.telephony { method public int getRadioPowerState(); method public int getSimApplicationState(); method public int getSimCardState(); + method public int getSupportedRadioAccessFamily(); method public java.util.List getTelephonyHistograms(); method public android.telephony.UiccSlotInfo[] getUiccSlotsInfo(); method public android.os.Bundle getVisualVoicemailSettings(); @@ -5498,10 +5700,16 @@ package android.telephony { method public boolean handlePinMmi(java.lang.String); method public boolean handlePinMmiForSubscriber(int, java.lang.String); method public boolean isDataConnectivityPossible(); + method public deprecated boolean isIdle(); + method public deprecated boolean isOffhook(); method public deprecated boolean isRadioOn(); + method public deprecated boolean isRinging(); method public boolean isVideoCallingEnabled(); method public deprecated boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle); method public boolean needsOtaServiceProvisioning(); + method public boolean rebootRadio(); + method public void requestCellInfoUpdate(android.os.WorkSource, java.util.concurrent.Executor, android.telephony.TelephonyManager.CellInfoCallback); + method public boolean resetRadioConfig(); method public int setAllowedCarriers(int, java.util.List); method public void setCarrierDataEnabled(boolean); method public void setDataActivationState(int); @@ -5553,6 +5761,24 @@ package android.telephony { field public static final int NETWORK_MODE_TDSCDMA_WCDMA = 14; // 0xe field public static final int NETWORK_MODE_WCDMA_ONLY = 2; // 0x2 field public static final int NETWORK_MODE_WCDMA_PREF = 0; // 0x0 + field public static final int NETWORK_TYPE_BITMASK_1xRTT = 128; // 0x80 + field public static final int NETWORK_TYPE_BITMASK_CDMA = 16; // 0x10 + field public static final int NETWORK_TYPE_BITMASK_EDGE = 4; // 0x4 + field public static final int NETWORK_TYPE_BITMASK_EHRPD = 16384; // 0x4000 + field public static final int NETWORK_TYPE_BITMASK_EVDO_0 = 32; // 0x20 + field public static final int NETWORK_TYPE_BITMASK_EVDO_A = 64; // 0x40 + field public static final int NETWORK_TYPE_BITMASK_EVDO_B = 4096; // 0x1000 + field public static final int NETWORK_TYPE_BITMASK_GPRS = 2; // 0x2 + field public static final int NETWORK_TYPE_BITMASK_GSM = 65536; // 0x10000 + field public static final int NETWORK_TYPE_BITMASK_HSDPA = 256; // 0x100 + field public static final int NETWORK_TYPE_BITMASK_HSPA = 1024; // 0x400 + field public static final int NETWORK_TYPE_BITMASK_HSPAP = 32768; // 0x8000 + field public static final int NETWORK_TYPE_BITMASK_HSUPA = 512; // 0x200 + field public static final int NETWORK_TYPE_BITMASK_LTE = 8192; // 0x2000 + field public static final int NETWORK_TYPE_BITMASK_LTE_CA = 524288; // 0x80000 + field public static final int NETWORK_TYPE_BITMASK_TD_SCDMA = 131072; // 0x20000 + field public static final int NETWORK_TYPE_BITMASK_UMTS = 8; // 0x8 + field public static final int NETWORK_TYPE_BITMASK_UNKNOWN = 1; // 0x1 field public static final int RADIO_POWER_OFF = 0; // 0x0 field public static final int RADIO_POWER_ON = 1; // 0x1 field public static final int RADIO_POWER_UNAVAILABLE = 2; // 0x2 @@ -5563,6 +5789,11 @@ package android.telephony { field public static final int SIM_ACTIVATION_STATE_UNKNOWN = 0; // 0x0 field public static final int SIM_STATE_LOADED = 10; // 0xa field public static final int SIM_STATE_PRESENT = 11; // 0xb + field public static final int SRVCC_STATE_HANDOVER_CANCELED = 3; // 0x3 + field public static final int SRVCC_STATE_HANDOVER_COMPLETED = 1; // 0x1 + field public static final int SRVCC_STATE_HANDOVER_FAILED = 2; // 0x2 + field public static final int SRVCC_STATE_HANDOVER_NONE = -1; // 0xffffffff + field public static final int SRVCC_STATE_HANDOVER_STARTED = 0; // 0x0 } public final class UiccAccessRule implements android.os.Parcelable { @@ -5742,6 +5973,7 @@ package android.telephony.euicc { field public static final int RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES = 2; // 0x2 field public static final int RESET_OPTION_DELETE_OPERATIONAL_PROFILES = 1; // 0x1 field public static final int RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS = 4; // 0x4 + field public static final int RESULT_CALLER_NOT_ALLOWED = -3; // 0xfffffffd field public static final int RESULT_EUICC_NOT_FOUND = -2; // 0xfffffffe field public static final int RESULT_OK = 0; // 0x0 field public static final int RESULT_UNKNOWN_ERROR = -1; // 0xffffffff @@ -5827,7 +6059,18 @@ package android.telephony.ims { method public int getTimeSeconds(); method public int getToA(); method public void writeToParcel(android.os.Parcel, int); + field public static final int CDIV_CF_REASON_ALL = 4; // 0x4 + field public static final int CDIV_CF_REASON_ALL_CONDITIONAL = 5; // 0x5 + field public static final int CDIV_CF_REASON_BUSY = 1; // 0x1 + field public static final int CDIV_CF_REASON_NOT_LOGGED_IN = 6; // 0x6 + field public static final int CDIV_CF_REASON_NOT_REACHABLE = 3; // 0x3 + field public static final int CDIV_CF_REASON_NO_REPLY = 2; // 0x2 + field public static final int CDIV_CF_REASON_UNCONDITIONAL = 0; // 0x0 field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STATUS_ACTIVE = 1; // 0x1 + field public static final int STATUS_NOT_ACTIVE = 0; // 0x0 + field public static final int TYPE_OF_ADDRESS_INTERNATIONAL = 145; // 0x91 + field public static final int TYPE_OF_ADDRESS_UNKNOWN = 129; // 0x81 } public final class ImsCallProfile implements android.os.Parcelable { @@ -5855,6 +6098,7 @@ package android.telephony.ims { method public void setCallExtra(java.lang.String, java.lang.String); method public void setCallExtraBoolean(java.lang.String, boolean); method public void setCallExtraInt(java.lang.String, int); + method public void setCallRestrictCause(int); method public void updateCallExtras(android.telephony.ims.ImsCallProfile); method public void updateCallType(android.telephony.ims.ImsCallProfile); method public void updateMediaProfile(android.telephony.ims.ImsCallProfile); @@ -6164,6 +6408,13 @@ package android.telephony.ims { public final class ImsSsData implements android.os.Parcelable { ctor public ImsSsData(int, int, int, int, int); method public int describeContents(); + method public android.telephony.ims.ImsCallForwardInfo[] getCallForwardInfo(); + method public int getRequestType(); + method public int getResult(); + method public int getServiceClass(); + method public int getServiceType(); + method public android.telephony.ims.ImsSsInfo[] getSuppServiceInfo(); + method public int getTeleserviceType(); method public boolean isTypeBarring(); method public boolean isTypeCf(); method public boolean isTypeClip(); @@ -6176,6 +6427,16 @@ package android.telephony.ims { method public boolean isTypeUnConditional(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int RESULT_SUCCESS = 0; // 0x0 + field public static final int SERVICE_CLASS_DATA = 2; // 0x2 + field public static final int SERVICE_CLASS_DATA_CIRCUIT_ASYNC = 32; // 0x20 + field public static final int SERVICE_CLASS_DATA_CIRCUIT_SYNC = 16; // 0x10 + field public static final int SERVICE_CLASS_DATA_PACKET_ACCESS = 64; // 0x40 + field public static final int SERVICE_CLASS_DATA_PAD = 128; // 0x80 + field public static final int SERVICE_CLASS_FAX = 4; // 0x4 + field public static final int SERVICE_CLASS_NONE = 0; // 0x0 + field public static final int SERVICE_CLASS_SMS = 8; // 0x8 + field public static final int SERVICE_CLASS_VOICE = 1; // 0x1 field public static final int SS_ACTIVATION = 0; // 0x0 field public static final int SS_ALL_BARRING = 18; // 0x12 field public static final int SS_ALL_DATA_TELESERVICES = 3; // 0x3 @@ -6212,13 +6473,31 @@ package android.telephony.ims { field public static final int SS_WAIT = 12; // 0xc } + public static class ImsSsData.Builder { + ctor public ImsSsData.Builder(int, int, int, int, int); + method public android.telephony.ims.ImsSsData build(); + method public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(android.telephony.ims.ImsCallForwardInfo[]); + method public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(android.telephony.ims.ImsSsInfo[]); + } + public final class ImsSsInfo implements android.os.Parcelable { - ctor public ImsSsInfo(int, java.lang.String); + ctor public deprecated ImsSsInfo(int, java.lang.String); method public int describeContents(); - method public java.lang.String getIcbNum(); + method public int getClirInterrogationStatus(); + method public int getClirOutgoingState(); + method public deprecated java.lang.String getIcbNum(); + method public java.lang.String getIncomingCommunicationBarringNumber(); method public int getProvisionStatus(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); + field public static final int CLIR_OUTGOING_DEFAULT = 0; // 0x0 + field public static final int CLIR_OUTGOING_INVOCATION = 1; // 0x1 + field public static final int CLIR_OUTGOING_SUPPRESSION = 2; // 0x2 + field public static final int CLIR_STATUS_NOT_PROVISIONED = 0; // 0x0 + field public static final int CLIR_STATUS_PROVISIONED_PERMANENT = 1; // 0x1 + field public static final int CLIR_STATUS_TEMPORARILY_ALLOWED = 4; // 0x4 + field public static final int CLIR_STATUS_TEMPORARILY_RESTRICTED = 3; // 0x3 + field public static final int CLIR_STATUS_UNKNOWN = 2; // 0x2 field public static final android.os.Parcelable.Creator CREATOR; field public static final int DISABLED = 0; // 0x0 field public static final int ENABLED = 1; // 0x1 @@ -6228,6 +6507,21 @@ package android.telephony.ims { field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff } + public static class ImsSsInfo.Builder { + ctor public ImsSsInfo.Builder(int); + method public android.telephony.ims.ImsSsInfo build(); + method public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int); + method public android.telephony.ims.ImsSsInfo.Builder setClirOutgoingState(int); + method public android.telephony.ims.ImsSsInfo.Builder setIncomingCommunicationBarringNumber(java.lang.String); + method public android.telephony.ims.ImsSsInfo.Builder setProvisionStatus(int); + } + + public static abstract class ImsSsInfo.ClirInterrogationStatus implements java.lang.annotation.Annotation { + } + + public static abstract class ImsSsInfo.ClirOutgoingState implements java.lang.annotation.Annotation { + } + public final class ImsStreamMediaProfile implements android.os.Parcelable { ctor public ImsStreamMediaProfile(int, int, int, int, int); method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile); @@ -6323,6 +6617,22 @@ package android.telephony.ims { method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile); } + public class ProvisioningManager { + method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(android.content.Context, int); + method public int getProvisioningIntValue(int); + method public java.lang.String getProvisioningStringValue(int); + method public void registerProvisioningChangedCallback(java.util.concurrent.Executor, android.telephony.ims.ProvisioningManager.Callback); + method public int setProvisioningIntValue(int, int); + method public int setProvisioningStringValue(int, java.lang.String); + method public void unregisterProvisioningChangedCallback(android.telephony.ims.ProvisioningManager.Callback); + } + + public static class ProvisioningManager.Callback { + ctor public ProvisioningManager.Callback(); + method public void onProvisioningIntChanged(int, int); + method public void onProvisioningStringChanged(int, java.lang.String); + } + } package android.telephony.ims.feature { @@ -6709,6 +7019,48 @@ package android.view { } +package android.view.accessibility { + + public final class AccessibilityManager { + method public void performAccessibilityShortcut(); + } + +} + +package android.view.intelligence { + + public final class ContentCaptureEvent implements android.os.Parcelable { + method public int describeContents(); + method public long getEventTime(); + method public int getFlags(); + method public android.view.autofill.AutofillId getId(); + method public java.lang.CharSequence getText(); + method public int getType(); + method public android.view.intelligence.ViewNode getViewNode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_ACTIVITY_PAUSED = 3; // 0x3 + field public static final int TYPE_ACTIVITY_RESUMED = 2; // 0x2 + field public static final int TYPE_ACTIVITY_STARTED = 1; // 0x1 + field public static final int TYPE_ACTIVITY_STOPPED = 4; // 0x4 + field public static final int TYPE_VIEW_APPEARED = 5; // 0x5 + field public static final int TYPE_VIEW_DISAPPEARED = 6; // 0x6 + field public static final int TYPE_VIEW_TEXT_CHANGED = 7; // 0x7 + } + + public final class IntelligenceManager { + method public java.util.Set getContentCaptureDisabledActivities(); + method public java.util.Set getContentCaptureDisabledPackages(); + method public void setActivityContentCaptureEnabled(android.content.ComponentName, boolean); + method public void setPackageContentCaptureEnabled(java.lang.String, boolean); + } + + public final class ViewNode extends android.app.assist.AssistStructure.ViewNode { + method public android.view.autofill.AutofillId getParentAutofillId(); + } + +} + package android.webkit { public abstract class CookieManager { @@ -7092,6 +7444,7 @@ package android.webkit { method public default void onMovedToDisplay(int, android.content.res.Configuration); method public abstract void onOverScrolled(int, int, boolean, boolean); method public default void onProvideAutofillVirtualStructure(android.view.ViewStructure, int); + method public default boolean onProvideContentCaptureStructure(android.view.ViewStructure, int); method public abstract void onProvideVirtualStructure(android.view.ViewStructure); method public abstract void onScrollChanged(int, int, int, int); method public abstract void onSizeChanged(int, int, int, int); diff --git a/api/system-removed.txt b/api/system-removed.txt index 4e7a11444548c294383b65b160328f6754a19658..4beb69920e28d7170b35f0adc6b6bf2e06250c11 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -116,9 +116,6 @@ package android.telephony { public class TelephonyManager { method public deprecated void answerRingingCall(); method public deprecated boolean endCall(); - method public deprecated boolean isIdle(); - method public deprecated boolean isOffhook(); - method public deprecated boolean isRinging(); method public deprecated void silenceRinger(); } diff --git a/api/test-current.txt b/api/test-current.txt index 463c9d35898513d1efabb7656e069fae42bcf7aa..5531014cae750cd48c94159fc0e9e7d24a90f745 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -25,6 +25,10 @@ package android.animation { package android.app { + public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback { + method public void onMovedToDisplay(int, android.content.res.Configuration); + } + public class ActivityManager { method public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int); method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName); @@ -78,6 +82,8 @@ package android.app { } public class AppOpsManager { + method public java.util.List getAllHistoricPackagesOps(java.lang.String[], long, long); + method public android.app.AppOpsManager.HistoricalPackageOps getHistoricalPackagesOps(int, java.lang.String, java.lang.String[], long, long); method public static int getNumOps(); method public static java.lang.String[] getOpStrs(); method public boolean isOperationActive(int, int, java.lang.String); @@ -135,12 +141,42 @@ package android.app { field public static final int OP_SYSTEM_ALERT_WINDOW = 24; // 0x18 } + public static final class AppOpsManager.HistoricalOpEntry implements android.os.Parcelable { + method public int describeContents(); + method public long getAccessCount(int); + method public long getAccessDuration(int); + method public long getBackgroundAccessCount(); + method public long getBackgroundAccessDuration(); + method public long getBackgroundRejectCount(); + method public long getForegroundAccessCount(); + method public long getForegroundAccessDuration(); + method public long getForegroundRejectCount(); + method public java.lang.String getOp(); + method public long getRejectCount(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class AppOpsManager.HistoricalPackageOps implements android.os.Parcelable { + method public int describeContents(); + method public android.app.AppOpsManager.HistoricalOpEntry getEntry(java.lang.String); + method public android.app.AppOpsManager.HistoricalOpEntry getEntryAt(int); + method public int getEntryCount(); + method public java.lang.String getPackageName(); + method public int getUid(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public static abstract interface AppOpsManager.OnOpActiveChangedListener { method public abstract void onOpActiveChanged(int, int, java.lang.String, boolean); } public final class NotificationChannelGroup implements android.os.Parcelable { + method public int getUserLockedFields(); + method public void lockFields(int); method public void setBlocked(boolean); + field public static final int USER_LOCKED_ALLOW_APP_OVERLAY = 2; // 0x2 } public class NotificationManager { @@ -176,10 +212,12 @@ package android.app { method public int getActivityType(); method public android.graphics.Rect getAppBounds(); method public android.graphics.Rect getBounds(); + method public int getRotation(); method public int getWindowingMode(); method public void setActivityType(int); method public void setAppBounds(android.graphics.Rect); method public void setBounds(android.graphics.Rect); + method public void setRotation(int); method public void setTo(android.app.WindowConfiguration); method public void setWindowingMode(int); method public void writeToParcel(android.os.Parcel, int); @@ -188,6 +226,7 @@ package android.app { field public static final int ACTIVITY_TYPE_RECENTS = 3; // 0x3 field public static final int ACTIVITY_TYPE_STANDARD = 1; // 0x1 field public static final int ACTIVITY_TYPE_UNDEFINED = 0; // 0x0 + field public static final int ROTATION_UNDEFINED = -1; // 0xffffffff field public static final int WINDOWING_MODE_FREEFORM = 5; // 0x5 field public static final int WINDOWING_MODE_FULLSCREEN = 1; // 0x1 field public static final int WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY = 4; // 0x4 @@ -575,12 +614,6 @@ package android.media { method public static boolean isEncodingLinearPcm(int); } - public final class AudioPresentation { - ctor public AudioPresentation(int, int, java.util.Map, java.lang.String, int, boolean, boolean, boolean); - method public int getPresentationId(); - method public int getProgramId(); - } - public final class BufferingParams implements android.os.Parcelable { method public int describeContents(); method public int getInitialMarkMs(); @@ -681,6 +714,7 @@ package android.os { public class Environment { method public static java.io.File buildPath(java.io.File, java.lang.String...); + method public static java.io.File getProductDirectory(); method public static java.io.File getStorageDirectory(); } @@ -710,7 +744,11 @@ package android.os { } public final class PowerManager { + method public int getPowerSaveMode(); + method public boolean setDynamicPowerSavings(boolean, int); method public boolean setPowerSaveMode(boolean); + field public static final int POWER_SAVER_MODE_DYNAMIC = 1; // 0x1 + field public static final int POWER_SAVER_MODE_PERCENTAGE = 0; // 0x0 } public class Process { @@ -947,6 +985,9 @@ package android.provider { public static final class Settings.Global extends android.provider.Settings.NameValueTable { field public static final java.lang.String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES = "autofill_compat_mode_allowed_packages"; + field public static final java.lang.String AUTOMATIC_POWER_SAVER_MODE = "automatic_power_saver_mode"; + field public static final java.lang.String DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD = "dynamic_power_savings_disable_threshold"; + field public static final java.lang.String DYNAMIC_POWER_SAVINGS_ENABLED = "dynamic_power_savings_enabled"; field public static final java.lang.String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions"; field public static final java.lang.String LOCATION_GLOBAL_KILL_SWITCH = "location_global_kill_switch"; field public static final java.lang.String LOW_POWER_MODE = "low_power"; @@ -957,6 +998,7 @@ package android.provider { public static final class Settings.Secure extends android.provider.Settings.NameValueTable { field public static final java.lang.String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED = "accessibility_display_magnification_enabled"; + field public static final java.lang.String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE = "accessibility_shortcut_target_service"; field public static final java.lang.String AUTOFILL_FEATURE_FIELD_CLASSIFICATION = "autofill_field_classification"; field public static final java.lang.String AUTOFILL_SERVICE = "autofill_service"; field public static final java.lang.String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT = "autofill_user_data_max_category_count"; @@ -1183,6 +1225,10 @@ package android.telecom { package android.telephony { + public class CarrierConfigManager { + method public void overrideConfig(int, android.os.PersistableBundle); + } + public class MbmsDownloadSession implements java.lang.AutoCloseable { field public static final java.lang.String MBMS_DOWNLOAD_SERVICE_OVERRIDE_METADATA = "mbms-download-service-override"; } @@ -1205,6 +1251,7 @@ package android.telephony { public class TelephonyManager { method public int getCarrierIdListVersion(); + method public boolean isRttSupported(); method public void refreshUiccProfile(); method public void setCarrierTestOverride(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff @@ -1320,6 +1367,14 @@ package android.transition { } +package android.util { + + public final class ArraySet implements java.util.Collection java.util.Set { + method public E valueAtUnchecked(int); + } + +} + package android.util.proto { public final class EncodedBuffer { @@ -1548,7 +1603,8 @@ package android.view { public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable { method public static java.lang.String actionToString(int); - field public static final int LAST_KEYCODE = 285; // 0x11d + method public final void setDisplayId(int); + field public static final int LAST_KEYCODE = 288; // 0x120 } public final class KeyboardShortcutGroup implements android.os.Parcelable { @@ -1593,6 +1649,12 @@ package android.view { method public boolean unregisterFrameCommitCallback(java.lang.Runnable); } + public abstract interface WindowManager implements android.view.ViewManager { + method public default void setShouldShowIme(int, boolean); + method public default void setShouldShowSystemDecors(int, boolean); + method public default void setShouldShowWithInsecureKeyguard(int, boolean); + } + public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable { field public static final int ACCESSIBILITY_TITLE_CHANGED = 33554432; // 0x2000000 field public static final int PRIVATE_FLAG_NO_MOVE_ANIMATION = 64; // 0x40 @@ -1604,6 +1666,17 @@ package android.view { package android.view.accessibility { + public final class AccessibilityManager { + method public void addAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener, android.os.Handler); + method public java.lang.String getAccessibilityShortcutService(); + method public void performAccessibilityShortcut(); + method public void removeAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener); + } + + public static abstract interface AccessibilityManager.AccessibilityServicesStateChangeListener { + method public abstract void onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager); + } + public class AccessibilityNodeInfo implements android.os.Parcelable { method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger); method public void writeToParcelNoRecycle(android.os.Parcel, int); diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index c04e61b77274ca7b951151d8fb56607a1ce02fe4..41d546f6d6038c380e41b4c0f17d3648e636d57e 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -174,6 +174,8 @@ public class Am extends BaseCommand { instrument.noWindowAnimation = true; } else if (opt.equals("--no-hidden-api-checks")) { instrument.disableHiddenApiChecks = true; + } else if (opt.equals("--no-isolated-storage")) { + instrument.disableIsolatedStorage = true; } else if (opt.equals("--user")) { instrument.userId = parseUserArg(nextArgRequired()); } else if (opt.equals("--abi")) { diff --git a/cmds/am/src/com/android/commands/am/Instrument.java b/cmds/am/src/com/android/commands/am/Instrument.java index 0dade0b2ba813c8699df33c9a3325f6024f6c877..70baa8702ba9815a19554c0808e866853b767141 100644 --- a/cmds/am/src/com/android/commands/am/Instrument.java +++ b/cmds/am/src/com/android/commands/am/Instrument.java @@ -16,6 +16,9 @@ package com.android.commands.am; +import static android.app.ActivityManager.INSTR_FLAG_DISABLE_HIDDEN_API_CHECKS; +import static android.app.ActivityManager.INSTR_FLAG_MOUNT_EXTERNAL_STORAGE_FULL; + import android.app.IActivityManager; import android.app.IInstrumentationWatcher; import android.app.Instrumentation; @@ -74,16 +77,13 @@ public class Instrument { String logPath = null; public boolean noWindowAnimation = false; public boolean disableHiddenApiChecks = false; + public boolean disableIsolatedStorage = false; public String abi = null; public int userId = UserHandle.USER_CURRENT; public Bundle args = new Bundle(); // Required public String componentNameArg; - // Disable hidden API checks for the newly started instrumentation. - // Must be kept in sync with ActivityManagerService. - private static final int INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS = 1 << 0; - /** * Construct the instrument command runner. */ @@ -480,7 +480,13 @@ public class Instrument { } // Start the instrumentation - int flags = disableHiddenApiChecks ? INSTRUMENTATION_FLAG_DISABLE_HIDDEN_API_CHECKS : 0; + int flags = 0; + if (disableHiddenApiChecks) { + flags |= INSTR_FLAG_DISABLE_HIDDEN_API_CHECKS; + } + if (disableIsolatedStorage) { + flags |= INSTR_FLAG_MOUNT_EXTERNAL_STORAGE_FULL; + } if (!mAm.startInstrumentation(cn, profileFile, flags, args, watcher, connection, userId, abi)) { throw new AndroidException("INSTRUMENTATION_FAILED: " + cn.flattenToString()); diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index e915cc8116768bb9b9fa8814f3313de8bb5589c9..5dcb392b002dd2c4b3c81bfedefa485d6010ee25 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -114,7 +114,7 @@ BootAnimation::BootAnimation(sp callbacks) void BootAnimation::onFirstRef() { status_t err = mSession->linkToComposerDeath(this); - ALOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err)); + SLOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err)); if (err == NO_ERROR) { run("BootAnimation", PRIORITY_DISPLAY); } @@ -128,7 +128,7 @@ sp BootAnimation::session() const { void BootAnimation::binderDied(const wp&) { // woah, surfaceflinger died! - ALOGD("SurfaceFlinger died, exiting..."); + SLOGD("SurfaceFlinger died, exiting..."); // calling requestExit() is not enough here because the Surface code // might be blocked on a condition variable that will never be updated. @@ -360,7 +360,7 @@ bool BootAnimation::threadLoop() bool BootAnimation::android() { - ALOGD("%sAnimationShownTiming start time: %" PRId64 "ms", mShuttingDown ? "Shutdown" : "Boot", + SLOGD("%sAnimationShownTiming start time: %" PRId64 "ms", mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime()); initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png"); initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png"); @@ -508,14 +508,14 @@ static bool parseColor(const char str[7], float color[3]) { static bool readFile(ZipFileRO* zip, const char* name, String8& outString) { ZipEntryRO entry = zip->findEntryByName(name); - ALOGE_IF(!entry, "couldn't find %s", name); + SLOGE_IF(!entry, "couldn't find %s", name); if (!entry) { return false; } FileMap* entryMap = zip->createEntryFileMap(entry); zip->releaseEntry(entry); - ALOGE_IF(!entryMap, "entryMap is null"); + SLOGE_IF(!entryMap, "entryMap is null"); if (!entryMap) { return false; } @@ -616,7 +616,7 @@ void BootAnimation::drawClock(const Font& font, const int xPos, const int yPos) size_t length = strftime(timeBuff, TIME_LENGTH, timeFormat, timeInfo); if (length != TIME_LENGTH - 1) { - ALOGE("Couldn't format time; abandoning boot animation clock"); + SLOGE("Couldn't format time; abandoning boot animation clock"); mClockEnabled = false; return; } @@ -654,13 +654,13 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) char pathType; if (sscanf(l, "%d %d %d", &width, &height, &fps) == 3) { - // ALOGD("> w=%d, h=%d, fps=%d", width, height, fps); + // SLOGD("> w=%d, h=%d, fps=%d", width, height, fps); animation.width = width; animation.height = height; animation.fps = fps; } else if (sscanf(l, " %c %d %d %s #%6s %16s %16s", &pathType, &count, &pause, path, color, clockPos1, clockPos2) >= 4) { - //ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPos1=%s, clockPos2=%s", + //SLOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPos1=%s, clockPos2=%s", // pathType, count, pause, path, color, clockPos1, clockPos2); Animation::Part part; part.playUntilComplete = pathType == 'c'; @@ -670,7 +670,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) part.audioData = NULL; part.animation = NULL; if (!parseColor(color, part.backgroundColor)) { - ALOGE("> invalid color '#%s'", color); + SLOGE("> invalid color '#%s'", color); part.backgroundColor[0] = 0.0f; part.backgroundColor[1] = 0.0f; part.backgroundColor[2] = 0.0f; @@ -679,7 +679,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) animation.parts.add(part); } else if (strcmp(l, "$SYSTEM") == 0) { - // ALOGD("> SYSTEM"); + // SLOGD("> SYSTEM"); Animation::Part part; part.playUntilComplete = false; part.count = 1; @@ -710,7 +710,7 @@ bool BootAnimation::preloadZip(Animation& animation) while ((entry = zip->nextEntry(cookie)) != NULL) { const int foundEntryName = zip->getEntryFileName(entry, name, ANIM_ENTRY_NAME_MAX); if (foundEntryName > ANIM_ENTRY_NAME_MAX || foundEntryName == -1) { - ALOGE("Error fetching entry file name"); + SLOGE("Error fetching entry file name"); continue; } @@ -754,7 +754,7 @@ bool BootAnimation::preloadZip(Animation& animation) } } } else { - ALOGE("bootanimation.zip is compressed; must be only stored"); + SLOGE("bootanimation.zip is compressed; must be only stored"); } } } @@ -782,7 +782,7 @@ bool BootAnimation::preloadZip(Animation& animation) frame.trimX = x; frame.trimY = y; } else { - ALOGE("Error parsing trim.txt, line: %s", lineStr); + SLOGE("Error parsing trim.txt, line: %s", lineStr); break; } } @@ -876,7 +876,7 @@ bool BootAnimation::playAnimation(const Animation& animation) const int animationX = (mWidth - animation.width) / 2; const int animationY = (mHeight - animation.height) / 2; - ALOGD("%sAnimationShownTiming start time: %" PRId64 "ms", mShuttingDown ? "Shutdown" : "Boot", + SLOGD("%sAnimationShownTiming start time: %" PRId64 "ms", mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime()); for (size_t i=0 ; i 0) { @@ -1048,13 +1048,13 @@ void BootAnimation::releaseAnimation(Animation* animation) const BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn) { if (mLoadedFiles.indexOf(fn) >= 0) { - ALOGE("File \"%s\" is already loaded. Cyclic ref is not allowed", + SLOGE("File \"%s\" is already loaded. Cyclic ref is not allowed", fn.string()); return NULL; } ZipFileRO *zip = ZipFileRO::open(fn); if (zip == NULL) { - ALOGE("Failed to open animation zip \"%s\": %s", + SLOGE("Failed to open animation zip \"%s\": %s", fn.string(), strerror(errno)); return NULL; } @@ -1143,7 +1143,7 @@ bool BootAnimation::TimeCheckThread::doThreadLoop() { if (pollResult == 0) { return true; } else if (pollResult < 0) { - ALOGE("Could not poll inotify events"); + SLOGE("Could not poll inotify events"); return false; } @@ -1152,7 +1152,7 @@ bool BootAnimation::TimeCheckThread::doThreadLoop() { if (length == 0) { return true; } else if (length < 0) { - ALOGE("Could not read inotify events"); + SLOGE("Could not read inotify events"); return false; } @@ -1183,7 +1183,7 @@ void BootAnimation::TimeCheckThread::addTimeDirWatch() { status_t BootAnimation::TimeCheckThread::readyToRun() { mInotifyFd = inotify_init(); if (mInotifyFd < 0) { - ALOGE("Could not initialize inotify fd"); + SLOGE("Could not initialize inotify fd"); return NO_INIT; } @@ -1191,7 +1191,7 @@ status_t BootAnimation::TimeCheckThread::readyToRun() { if (mSystemWd < 0) { close(mInotifyFd); mInotifyFd = -1; - ALOGE("Could not add watch for %s", SYSTEM_DATA_DIR_PATH); + SLOGE("Could not add watch for %s", SYSTEM_DATA_DIR_PATH); return NO_INIT; } diff --git a/cmds/idmap2/.clang-format b/cmds/idmap2/.clang-format new file mode 100644 index 0000000000000000000000000000000000000000..c91502a257f3f092d914f56ec3dc93be0356ef23 --- /dev/null +++ b/cmds/idmap2/.clang-format @@ -0,0 +1,7 @@ +BasedOnStyle: Google +ColumnLimit: 100 +AllowShortBlocksOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +CommentPragmas: NOLINT:.* +DerivePointerAlignment: false +PointerAlignment: Left diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..5a6c813fd20259efe95597ed6bd2b53305c3c66e --- /dev/null +++ b/cmds/idmap2/Android.bp @@ -0,0 +1,191 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_library { + name: "libidmap2", + host_supported: true, + tidy: true, + tidy_flags: [ + "-system-headers", + "-warnings-as-errors=*", + ], + srcs: [ + "libidmap2/BinaryStreamVisitor.cpp", + "libidmap2/CommandLineOptions.cpp", + "libidmap2/FileUtils.cpp", + "libidmap2/Idmap.cpp", + "libidmap2/PrettyPrintVisitor.cpp", + "libidmap2/RawPrintVisitor.cpp", + "libidmap2/ResourceUtils.cpp", + "libidmap2/Xml.cpp", + "libidmap2/ZipFile.cpp", + ], + export_include_dirs: ["include"], + target: { + android: { + static: { + enabled: false, + }, + shared_libs: [ + "libandroidfw", + "libbase", + "libutils", + "libziparchive", + ], + }, + host: { + shared: { + enabled: false, + }, + static_libs: [ + "libandroidfw", + "libbase", + "libutils", + "libziparchive", + ], + }, + }, +} + +cc_test { + name: "idmap2_tests", + host_supported: true, + tidy: true, + tidy_flags: [ + "-system-headers", + "-warnings-as-errors=*", + ], + srcs: [ + "tests/BinaryStreamVisitorTests.cpp", + "tests/CommandLineOptionsTests.cpp", + "tests/FileUtilsTests.cpp", + "tests/Idmap2BinaryTests.cpp", + "tests/IdmapTests.cpp", + "tests/Main.cpp", + "tests/PrettyPrintVisitorTests.cpp", + "tests/RawPrintVisitorTests.cpp", + "tests/ResourceUtilsTests.cpp", + "tests/XmlTests.cpp", + "tests/ZipFileTests.cpp", + ], + required: [ + "idmap2", + ], + static_libs: ["libgmock"], + target: { + android: { + shared_libs: [ + "libandroidfw", + "libbase", + "libidmap2", + "liblog", + "libutils", + "libz", + "libziparchive", + ], + }, + host: { + static_libs: [ + "libandroidfw", + "libbase", + "libidmap2", + "liblog", + "libutils", + "libziparchive", + ], + shared_libs: [ + "libz", + ], + }, + }, + data: ["tests/data/**/*.apk"], +} + +cc_binary { + name: "idmap2", + host_supported: true, + tidy: true, + tidy_flags: [ + "-system-headers", + "-warnings-as-errors=*", + ], + srcs: [ + "idmap2/Create.cpp", + "idmap2/Dump.cpp", + "idmap2/Lookup.cpp", + "idmap2/Main.cpp", + "idmap2/Scan.cpp", + "idmap2/Verify.cpp", + ], + target: { + android: { + shared_libs: [ + "libandroidfw", + "libbase", + "libidmap2", + "libutils", + "libziparchive", + ], + }, + host: { + static_libs: [ + "libandroidfw", + "libbase", + "libidmap2", + "liblog", + "libutils", + "libziparchive", + ], + shared_libs: [ + "libz", + ], + }, + }, +} + +cc_binary { + name: "idmap2d", + host_supported: false, + tidy: true, + tidy_checks: [ + // remove google-default-arguments or clang-tidy will complain about + // the auto-generated file IIdmap2.cpp + "-google-default-arguments", + ], + tidy_flags: [ + "-system-headers", + "-warnings-as-errors=*", + ], + srcs: [ + ":idmap2_aidl", + "idmap2d/Idmap2Service.cpp", + "idmap2d/Main.cpp", + ], + shared_libs: [ + "libandroidfw", + "libbase", + "libbinder", + "libcutils", + "libidmap2", + "libutils", + "libziparchive", + ], +} + +filegroup { + name: "idmap2_aidl", + srcs: [ + "idmap2d/aidl/android/os/IIdmap2.aidl", + ], +} diff --git a/cmds/idmap2/AndroidTest.xml b/cmds/idmap2/AndroidTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..5147f4e6cb4c85da080caf5b62b9cbb4ac2519a9 --- /dev/null +++ b/cmds/idmap2/AndroidTest.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/cmds/statsd/tools/Android.mk b/cmds/idmap2/CPPLINT.cfg similarity index 74% rename from cmds/statsd/tools/Android.mk rename to cmds/idmap2/CPPLINT.cfg index 7253c9637026b930ba5246662dd1cfd1e712f35d..9dc6b4a773805fe23b506f1340678115164c4fc1 100644 --- a/cmds/statsd/tools/Android.mk +++ b/cmds/idmap2/CPPLINT.cfg @@ -1,4 +1,4 @@ -# Copyright (C) 2017 The Android Open Source Project +# Copyright (C) 2018 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,10 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# -# -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) -#Include the sub-makefiles -include $(call all-makefiles-under,$(LOCAL_PATH)) \ No newline at end of file +set noparent +linelength=100 +root=.. +filter=+build/include_alpha diff --git a/cmds/idmap2/OWNERS b/cmds/idmap2/OWNERS new file mode 100644 index 0000000000000000000000000000000000000000..23ec5ab0d1f373834639abfd5904d7fce9270dd4 --- /dev/null +++ b/cmds/idmap2/OWNERS @@ -0,0 +1,2 @@ +set noparent +toddke@google.com diff --git a/cmds/idmap2/TEST_MAPPING b/cmds/idmap2/TEST_MAPPING new file mode 100644 index 0000000000000000000000000000000000000000..26ccf038cba21b8c24bef7ead9b8edadb676a55e --- /dev/null +++ b/cmds/idmap2/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit" : [ + { + "name" : "idmap2_tests" + } + ] +} diff --git a/cmds/idmap2/idmap2/Commands.h b/cmds/idmap2/idmap2/Commands.h new file mode 100644 index 0000000000000000000000000000000000000000..dcc69b30743da120de0c05ef05553f1555d945b9 --- /dev/null +++ b/cmds/idmap2/idmap2/Commands.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 IDMAP2_IDMAP2_COMMANDS_H_ +#define IDMAP2_IDMAP2_COMMANDS_H_ + +#include +#include + +bool Create(const std::vector& args, std::ostream& out_error); +bool Dump(const std::vector& args, std::ostream& out_error); +bool Lookup(const std::vector& args, std::ostream& out_error); +bool Scan(const std::vector& args, std::ostream& out_error); +bool Verify(const std::vector& args, std::ostream& out_error); + +#endif // IDMAP2_IDMAP2_COMMANDS_H_ diff --git a/cmds/idmap2/idmap2/Create.cpp b/cmds/idmap2/idmap2/Create.cpp new file mode 100644 index 0000000000000000000000000000000000000000..291eaeb9c211635802bd8b8d42a9b253d7443d78 --- /dev/null +++ b/cmds/idmap2/idmap2/Create.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 // umask +#include // umask +#include +#include +#include +#include +#include +#include + +#include "idmap2/BinaryStreamVisitor.h" +#include "idmap2/CommandLineOptions.h" +#include "idmap2/FileUtils.h" +#include "idmap2/Idmap.h" + +using android::ApkAssets; +using android::idmap2::BinaryStreamVisitor; +using android::idmap2::CommandLineOptions; +using android::idmap2::Idmap; + +bool Create(const std::vector& args, std::ostream& out_error) { + std::string target_apk_path, overlay_apk_path, idmap_path; + + const CommandLineOptions opts = + CommandLineOptions("idmap2 create") + .MandatoryOption("--target-apk-path", + "input: path to apk which will have its resources overlaid", + &target_apk_path) + .MandatoryOption("--overlay-apk-path", + "input: path to apk which contains the new resource values", + &overlay_apk_path) + .MandatoryOption("--idmap-path", "output: path to where to write idmap file", + &idmap_path); + if (!opts.Parse(args, out_error)) { + return false; + } + + const std::unique_ptr target_apk = ApkAssets::Load(target_apk_path); + if (!target_apk) { + out_error << "error: failed to load apk " << target_apk_path << std::endl; + return false; + } + + const std::unique_ptr overlay_apk = ApkAssets::Load(overlay_apk_path); + if (!overlay_apk) { + out_error << "error: failed to load apk " << overlay_apk_path << std::endl; + return false; + } + + const std::unique_ptr idmap = + Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk, out_error); + if (!idmap) { + return false; + } + + umask(0133); // u=rw,g=r,o=r + std::ofstream fout(idmap_path); + if (fout.fail()) { + out_error << "failed to open idmap path " << idmap_path << std::endl; + return false; + } + BinaryStreamVisitor visitor(fout); + idmap->accept(&visitor); + fout.close(); + if (fout.fail()) { + out_error << "failed to write to idmap path " << idmap_path << std::endl; + return false; + } + + return true; +} diff --git a/cmds/idmap2/idmap2/Dump.cpp b/cmds/idmap2/idmap2/Dump.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c8cdcfa6d3dc7eb29ad6898fabf1dab19046971e --- /dev/null +++ b/cmds/idmap2/idmap2/Dump.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#include "idmap2/CommandLineOptions.h" +#include "idmap2/Idmap.h" +#include "idmap2/PrettyPrintVisitor.h" +#include "idmap2/RawPrintVisitor.h" + +using android::idmap2::CommandLineOptions; +using android::idmap2::Idmap; +using android::idmap2::PrettyPrintVisitor; +using android::idmap2::RawPrintVisitor; + +bool Dump(const std::vector& args, std::ostream& out_error) { + std::string idmap_path; + bool verbose; + + const CommandLineOptions opts = + CommandLineOptions("idmap2 dump") + .MandatoryOption("--idmap-path", "input: path to idmap file to pretty-print", &idmap_path) + .OptionalFlag("--verbose", "annotate every byte of the idmap", &verbose); + if (!opts.Parse(args, out_error)) { + return false; + } + std::ifstream fin(idmap_path); + const std::unique_ptr idmap = Idmap::FromBinaryStream(fin, out_error); + fin.close(); + if (!idmap) { + return false; + } + + if (verbose) { + RawPrintVisitor visitor(std::cout); + idmap->accept(&visitor); + } else { + PrettyPrintVisitor visitor(std::cout); + idmap->accept(&visitor); + } + + return true; +} diff --git a/cmds/idmap2/idmap2/Lookup.cpp b/cmds/idmap2/idmap2/Lookup.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1191e6a27b079730ee0ea0b5ce816e19a178a305 --- /dev/null +++ b/cmds/idmap2/idmap2/Lookup.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "android-base/macros.h" +#include "android-base/stringprintf.h" +#include "androidfw/ApkAssets.h" +#include "androidfw/AssetManager2.h" +#include "androidfw/ConfigDescription.h" +#include "androidfw/ResourceUtils.h" +#include "androidfw/StringPiece.h" +#include "androidfw/Util.h" +#include "utils/String16.h" +#include "utils/String8.h" + +#include "idmap2/CommandLineOptions.h" +#include "idmap2/Idmap.h" +#include "idmap2/Xml.h" +#include "idmap2/ZipFile.h" + +using android::ApkAssets; +using android::ApkAssetsCookie; +using android::AssetManager2; +using android::ConfigDescription; +using android::is_valid_resid; +using android::kInvalidCookie; +using android::Res_value; +using android::ResStringPool; +using android::ResTable_config; +using android::String16; +using android::String8; +using android::StringPiece16; +using android::base::StringPrintf; +using android::idmap2::CommandLineOptions; +using android::idmap2::IdmapHeader; +using android::idmap2::ResourceId; +using android::idmap2::Xml; +using android::idmap2::ZipFile; +using android::util::Utf16ToUtf8; + +namespace { +std::pair WARN_UNUSED ParseResReference(const AssetManager2& am, + const std::string& res, + const std::string& fallback_package) { + // first, try to parse as a hex number + char* endptr = nullptr; + ResourceId resid; + resid = strtol(res.c_str(), &endptr, 16); + if (*endptr == '\0') { + return std::make_pair(true, resid); + } + + // next, try to parse as a package:type/name string + resid = am.GetResourceId(res, "", fallback_package); + if (is_valid_resid(resid)) { + return std::make_pair(true, resid); + } + + // end of the road: res could not be parsed + return std::make_pair(false, 0); +} + +std::pair WARN_UNUSED GetValue(const AssetManager2& am, ResourceId resid) { + Res_value value; + ResTable_config config; + uint32_t flags; + ApkAssetsCookie cookie = am.GetResource(resid, false, 0, &value, &config, &flags); + if (cookie == kInvalidCookie) { + return std::make_pair(false, ""); + } + + std::string out; + + // TODO(martenkongstad): use optional parameter GetResource(..., std::string* + // stacktrace = NULL) instead + out.append(StringPrintf("cookie=%d ", cookie)); + + out.append("config='"); + out.append(config.toString().c_str()); + out.append("' value="); + + switch (value.dataType) { + case Res_value::TYPE_INT_DEC: + out.append(StringPrintf("%d", value.data)); + break; + case Res_value::TYPE_INT_HEX: + out.append(StringPrintf("0x%08x", value.data)); + break; + case Res_value::TYPE_INT_BOOLEAN: + out.append(value.data != 0 ? "true" : "false"); + break; + case Res_value::TYPE_STRING: { + const ResStringPool* pool = am.GetStringPoolForCookie(cookie); + size_t len; + if (pool->isUTF8()) { + const char* str = pool->string8At(value.data, &len); + out.append(str, len); + } else { + const char16_t* str16 = pool->stringAt(value.data, &len); + out += Utf16ToUtf8(StringPiece16(str16, len)); + } + } break; + default: + out.append(StringPrintf("dataType=0x%02x data=0x%08x", value.dataType, value.data)); + break; + } + return std::make_pair(true, out); +} + +std::pair GetTargetPackageNameFromManifest(const std::string& apk_path) { + const auto zip = ZipFile::Open(apk_path); + if (!zip) { + return std::make_pair(false, ""); + } + const auto entry = zip->Uncompress("AndroidManifest.xml"); + if (!entry) { + return std::make_pair(false, ""); + } + const auto xml = Xml::Create(entry->buf, entry->size); + if (!xml) { + return std::make_pair(false, ""); + } + const auto tag = xml->FindTag("overlay"); + if (!tag) { + return std::make_pair(false, ""); + } + const auto iter = tag->find("targetPackage"); + if (iter == tag->end()) { + return std::make_pair(false, ""); + } + return std::make_pair(true, iter->second); +} +} // namespace + +bool Lookup(const std::vector& args, std::ostream& out_error) { + std::vector idmap_paths; + std::string config_str, resid_str; + const CommandLineOptions opts = + CommandLineOptions("idmap2 lookup") + .MandatoryOption("--idmap-path", "input: path to idmap file to load", &idmap_paths) + .MandatoryOption("--config", "configuration to use", &config_str) + .MandatoryOption("--resid", + "Resource ID (in the target package; '0xpptteeee' or " + "'[package:]type/name') to look up", + &resid_str); + + if (!opts.Parse(args, out_error)) { + return false; + } + + ConfigDescription config; + if (!ConfigDescription::Parse(config_str, &config)) { + out_error << "error: failed to parse config" << std::endl; + return false; + } + + std::vector> apk_assets; + std::string target_path; + std::string target_package_name; + for (size_t i = 0; i < idmap_paths.size(); i++) { + const auto& idmap_path = idmap_paths[i]; + std::fstream fin(idmap_path); + auto idmap_header = IdmapHeader::FromBinaryStream(fin); + fin.close(); + if (!idmap_header) { + out_error << "error: failed to read idmap from " << idmap_path << std::endl; + return false; + } + + if (i == 0) { + target_path = idmap_header->GetTargetPath().to_string(); + auto target_apk = ApkAssets::Load(target_path); + if (!target_apk) { + out_error << "error: failed to read target apk from " << target_path << std::endl; + return false; + } + apk_assets.push_back(std::move(target_apk)); + + bool lookup_ok; + std::tie(lookup_ok, target_package_name) = + GetTargetPackageNameFromManifest(idmap_header->GetOverlayPath().to_string()); + if (!lookup_ok) { + out_error << "error: failed to parse android:targetPackage from overlay manifest" + << std::endl; + return false; + } + } else if (target_path != idmap_header->GetTargetPath()) { + out_error << "error: different target APKs (expected target APK " << target_path << " but " + << idmap_path << " has target APK " << idmap_header->GetTargetPath() << ")" + << std::endl; + return false; + } + + auto overlay_apk = ApkAssets::LoadOverlay(idmap_path); + if (!overlay_apk) { + out_error << "error: failed to read overlay apk from " << idmap_header->GetOverlayPath() + << std::endl; + return false; + } + apk_assets.push_back(std::move(overlay_apk)); + } + + // AssetManager2::SetApkAssets requires raw ApkAssets pointers, not unique_ptrs + std::vector raw_pointer_apk_assets; + std::transform(apk_assets.cbegin(), apk_assets.cend(), std::back_inserter(raw_pointer_apk_assets), + [](const auto& p) -> const ApkAssets* { return p.get(); }); + AssetManager2 am; + am.SetApkAssets(raw_pointer_apk_assets); + am.SetConfiguration(config); + + ResourceId resid; + bool lookup_ok; + std::tie(lookup_ok, resid) = ParseResReference(am, resid_str, target_package_name); + if (!lookup_ok) { + out_error << "error: failed to parse resource ID" << std::endl; + return false; + } + + std::string value; + std::tie(lookup_ok, value) = GetValue(am, resid); + if (!lookup_ok) { + out_error << StringPrintf("error: resource 0x%08x not found", resid) << std::endl; + return false; + } + std::cout << value << std::endl; + + return true; +} diff --git a/cmds/idmap2/idmap2/Main.cpp b/cmds/idmap2/idmap2/Main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5d9ea778915a8466d7a6e8254d9167e27c258c92 --- /dev/null +++ b/cmds/idmap2/idmap2/Main.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 // EXIT_{FAILURE,SUCCESS} +#include +#include +#include +#include +#include +#include +#include + +#include "idmap2/CommandLineOptions.h" + +#include "Commands.h" + +using android::idmap2::CommandLineOptions; + +typedef std::map&, std::ostream&)>> + NameToFunctionMap; + +static void PrintUsage(const NameToFunctionMap& commands, std::ostream& out) { + out << "usage: idmap2 ["; + for (auto iter = commands.cbegin(); iter != commands.cend(); iter++) { + if (iter != commands.cbegin()) { + out << "|"; + } + out << iter->first; + } + out << "]" << std::endl; +} + +int main(int argc, char** argv) { + const NameToFunctionMap commands = { + {"create", Create}, {"dump", Dump}, {"lookup", Lookup}, {"scan", Scan}, {"verify", Verify}, + }; + if (argc <= 1) { + PrintUsage(commands, std::cerr); + return EXIT_FAILURE; + } + const std::unique_ptr> args = + CommandLineOptions::ConvertArgvToVector(argc - 1, const_cast(argv + 1)); + if (!args) { + std::cerr << "error: failed to parse command line options" << std::endl; + return EXIT_FAILURE; + } + const auto iter = commands.find(argv[1]); + if (iter == commands.end()) { + std::cerr << argv[1] << ": command not found" << std::endl; + PrintUsage(commands, std::cerr); + return EXIT_FAILURE; + } + return iter->second(*args, std::cerr) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/cmds/idmap2/idmap2/Scan.cpp b/cmds/idmap2/idmap2/Scan.cpp new file mode 100644 index 0000000000000000000000000000000000000000..00c49e38e8b22584de7754c44f4011aa9332fcb5 --- /dev/null +++ b/cmds/idmap2/idmap2/Scan.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "idmap2/CommandLineOptions.h" +#include "idmap2/FileUtils.h" +#include "idmap2/Idmap.h" +#include "idmap2/Xml.h" +#include "idmap2/ZipFile.h" + +#include "Commands.h" + +using android::idmap2::CommandLineOptions; +using android::idmap2::Idmap; +using android::idmap2::MemoryChunk; +using android::idmap2::Xml; +using android::idmap2::ZipFile; +using android::idmap2::utils::FindFiles; + +namespace { +std::unique_ptr> FindApkFiles(const std::vector& dirs, + bool recursive, std::ostream& out_error) { + const auto predicate = [](unsigned char type, const std::string& path) -> bool { + static constexpr size_t kExtLen = 4; // strlen(".apk") + return type == DT_REG && path.size() > kExtLen && + !path.compare(path.size() - kExtLen, kExtLen, ".apk"); + }; + // pass apk paths through a set to filter out duplicates + std::set paths; + for (const auto& dir : dirs) { + const auto apk_paths = FindFiles(dir, recursive, predicate); + if (!apk_paths) { + out_error << "error: failed to open directory " << dir << std::endl; + return nullptr; + } + paths.insert(apk_paths->cbegin(), apk_paths->cend()); + } + return std::unique_ptr>( + new std::vector(paths.cbegin(), paths.cend())); +} +} // namespace + +bool Scan(const std::vector& args, std::ostream& out_error) { + std::vector input_directories; + std::string target_package_name, target_apk_path, output_directory; + bool recursive = false; + + const CommandLineOptions opts = + CommandLineOptions("idmap2 scan") + .MandatoryOption("--input-directory", "directory containing overlay apks to scan", + &input_directories) + .OptionalFlag("--recursive", "also scan subfolders of overlay-directory", &recursive) + .MandatoryOption("--target-package-name", "package name of target package", + &target_package_name) + .MandatoryOption("--target-apk-path", "path to target apk", &target_apk_path) + .MandatoryOption("--output-directory", + "directory in which to write artifacts (idmap files and overlays.list)", + &output_directory); + if (!opts.Parse(args, out_error)) { + return false; + } + + const auto apk_paths = FindApkFiles(input_directories, recursive, out_error); + if (!apk_paths) { + return false; + } + + std::vector interesting_apks; + for (const std::string& path : *apk_paths) { + std::unique_ptr zip = ZipFile::Open(path); + if (!zip) { + out_error << "error: failed to open " << path << " as a zip file" << std::endl; + return false; + } + + std::unique_ptr entry = zip->Uncompress("AndroidManifest.xml"); + if (!entry) { + out_error << "error: failed to uncompress AndroidManifest.xml from " << path << std::endl; + return false; + } + + std::unique_ptr xml = Xml::Create(entry->buf, entry->size); + if (!xml) { + out_error << "error: failed to parse AndroidManifest.xml from " << path << std::endl; + continue; + } + + const auto tag = xml->FindTag("overlay"); + if (!tag) { + continue; + } + + auto iter = tag->find("isStatic"); + if (iter == tag->end() || std::stoul(iter->second) == 0u) { + continue; + } + + iter = tag->find("targetPackage"); + if (iter == tag->end() || iter->second != target_package_name) { + continue; + } + + iter = tag->find("priority"); + if (iter == tag->end()) { + continue; + } + + const int priority = std::stoi(iter->second); + if (priority < 0) { + continue; + } + + interesting_apks.insert( + std::lower_bound(interesting_apks.begin(), interesting_apks.end(), path), path); + } + + std::stringstream stream; + for (auto iter = interesting_apks.cbegin(); iter != interesting_apks.cend(); ++iter) { + const std::string idmap_path = Idmap::CanonicalIdmapPathFor(output_directory, *iter); + std::stringstream dev_null; + if (!Verify(std::vector({"--idmap-path", idmap_path}), dev_null) && + !Create(std::vector({ + "--target-apk-path", + target_apk_path, + "--overlay-apk-path", + *iter, + "--idmap-path", + idmap_path, + }), + out_error)) { + return false; + } + stream << idmap_path << std::endl; + } + + std::cout << stream.str(); + + return true; +} diff --git a/cmds/idmap2/idmap2/Verify.cpp b/cmds/idmap2/idmap2/Verify.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b5fa438b5b9f83d653a5573d9282c685da7d3395 --- /dev/null +++ b/cmds/idmap2/idmap2/Verify.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "idmap2/CommandLineOptions.h" +#include "idmap2/Idmap.h" + +using android::idmap2::CommandLineOptions; +using android::idmap2::IdmapHeader; + +bool Verify(const std::vector& args, std::ostream& out_error) { + std::string idmap_path; + const CommandLineOptions opts = + CommandLineOptions("idmap2 verify") + .MandatoryOption("--idmap-path", "input: path to idmap file to verify", &idmap_path); + if (!opts.Parse(args, out_error)) { + return false; + } + + std::ifstream fin(idmap_path); + const std::unique_ptr header = IdmapHeader::FromBinaryStream(fin); + fin.close(); + if (!header) { + out_error << "error: failed to parse idmap header" << std::endl; + return false; + } + + return header->IsUpToDate(out_error); +} diff --git a/cmds/idmap2/idmap2d/Idmap2Service.cpp b/cmds/idmap2/idmap2d/Idmap2Service.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cf72cb94da2c4eb38763e7743e07e63517901544 --- /dev/null +++ b/cmds/idmap2/idmap2d/Idmap2Service.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 // umask +#include // umask +#include + +#include +#include +#include +#include +#include +#include + +#include "android-base/macros.h" +#include "utils/String8.h" +#include "utils/Trace.h" + +#include "idmap2/BinaryStreamVisitor.h" +#include "idmap2/FileUtils.h" +#include "idmap2/Idmap.h" + +#include "idmap2d/Idmap2Service.h" + +using android::binder::Status; +using android::idmap2::BinaryStreamVisitor; +using android::idmap2::Idmap; +using android::idmap2::IdmapHeader; + +namespace { + +static constexpr const char* kIdmapCacheDir = "/data/resource-cache"; + +Status ok() { + return Status::ok(); +} + +Status error(const std::string& msg) { + LOG(ERROR) << msg; + return Status::fromExceptionCode(Status::EX_NONE, msg.c_str()); +} + +} // namespace + +namespace android { +namespace os { + +Status Idmap2Service::getIdmapPath(const std::string& overlay_apk_path, + int32_t user_id ATTRIBUTE_UNUSED, std::string* _aidl_return) { + assert(_aidl_return); + *_aidl_return = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); + return ok(); +} + +Status Idmap2Service::removeIdmap(const std::string& overlay_apk_path, + int32_t user_id ATTRIBUTE_UNUSED, bool* _aidl_return) { + assert(_aidl_return); + const std::string idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); + if (unlink(idmap_path.c_str()) == 0) { + *_aidl_return = true; + return ok(); + } else { + *_aidl_return = false; + return error("failed to unlink " + idmap_path + ": " + strerror(errno)); + } +} + +Status Idmap2Service::createIdmap(const std::string& target_apk_path, + const std::string& overlay_apk_path, int32_t user_id, + std::unique_ptr* _aidl_return) { + assert(_aidl_return); + std::stringstream trace; + trace << __FUNCTION__ << " " << target_apk_path << " " << overlay_apk_path << " " + << std::to_string(user_id); + ATRACE_NAME(trace.str().c_str()); + std::cout << trace.str() << std::endl; + + _aidl_return->reset(nullptr); + + const std::string idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); + std::ifstream fin(idmap_path); + const std::unique_ptr header = IdmapHeader::FromBinaryStream(fin); + fin.close(); + // do not reuse error stream from IsUpToDate below, or error messages will be + // polluted with irrelevant data + std::stringstream dev_null; + if (header && header->IsUpToDate(dev_null)) { + return ok(); + } + + const std::unique_ptr target_apk = ApkAssets::Load(target_apk_path); + if (!target_apk) { + return error("failed to load apk " + target_apk_path); + } + + const std::unique_ptr overlay_apk = ApkAssets::Load(overlay_apk_path); + if (!overlay_apk) { + return error("failed to load apk " + overlay_apk_path); + } + + std::stringstream err; + const std::unique_ptr idmap = + Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk, err); + if (!idmap) { + return error(err.str()); + } + + umask(0133); // u=rw,g=r,o=r + std::ofstream fout(idmap_path); + if (fout.fail()) { + return error("failed to open idmap path " + idmap_path); + } + BinaryStreamVisitor visitor(fout); + idmap->accept(&visitor); + fout.close(); + if (fout.fail()) { + return error("failed to write to idmap path " + idmap_path); + } + + _aidl_return->reset(new std::string(idmap_path)); + return ok(); +} + +} // namespace os +} // namespace android diff --git a/cmds/idmap2/idmap2d/Idmap2Service.h b/cmds/idmap2/idmap2d/Idmap2Service.h new file mode 100644 index 0000000000000000000000000000000000000000..2b32042d6aa3b6ce6667e00212631731f4854d13 --- /dev/null +++ b/cmds/idmap2/idmap2d/Idmap2Service.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 IDMAP2_IDMAP2D_IDMAP2SERVICE_H_ +#define IDMAP2_IDMAP2D_IDMAP2SERVICE_H_ + +#include +#include + +#include +#include + +#include "android/os/BnIdmap2.h" + +namespace android { +namespace os { +class Idmap2Service : public BinderService, public BnIdmap2 { + public: + static char const* getServiceName() { + return "idmap"; + } + + binder::Status getIdmapPath(const std::string& overlay_apk_path, int32_t user_id, + std::string* _aidl_return); + + binder::Status removeIdmap(const std::string& overlay_apk_path, int32_t user_id, + bool* _aidl_return); + + binder::Status createIdmap(const std::string& target_apk_path, + const std::string& overlay_apk_path, int32_t user_id, + std::unique_ptr* _aidl_return); +}; +} // namespace os +} // namespace android + +#endif // IDMAP2_IDMAP2D_IDMAP2SERVICE_H_ diff --git a/cmds/idmap2/idmap2d/Main.cpp b/cmds/idmap2/idmap2d/Main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d64a87b8ee157b28755855b25a11cddd55e3113a --- /dev/null +++ b/cmds/idmap2/idmap2d/Main.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define ATRACE_TAG ATRACE_TAG_RESOURCES + +#include +#include +#include + +#include // EXIT_{FAILURE,SUCCESS} + +#include +#include + +#include "android-base/macros.h" + +#include "Idmap2Service.h" + +using android::BinderService; +using android::IPCThreadState; +using android::ProcessState; +using android::sp; +using android::status_t; +using android::os::Idmap2Service; + +int main(int argc ATTRIBUTE_UNUSED, char** argv ATTRIBUTE_UNUSED) { + IPCThreadState::self()->disableBackgroundScheduling(true); + status_t ret = BinderService::publish(); + if (ret != android::OK) { + return EXIT_FAILURE; + } + sp ps(ProcessState::self()); + ps->startThreadPool(); + ps->giveThreadPoolName(); + IPCThreadState::self()->joinThreadPool(); + return EXIT_SUCCESS; +} diff --git a/cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl b/cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl new file mode 100644 index 0000000000000000000000000000000000000000..5d196101a7a6a2b499e42d596a1765f09857b0cd --- /dev/null +++ b/cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.os; + +/** + * @hide + */ +interface IIdmap2 { + @utf8InCpp String getIdmapPath(@utf8InCpp String overlayApkPath, int userId); + boolean removeIdmap(@utf8InCpp String overlayApkPath, int userId); + @nullable @utf8InCpp String createIdmap(@utf8InCpp String targetApkPath, + @utf8InCpp String overlayApkPath, int userId); +} diff --git a/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h b/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h new file mode 100644 index 0000000000000000000000000000000000000000..2368aeadbc9f3156c65261a598050226300d5dce --- /dev/null +++ b/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 IDMAP2_INCLUDE_IDMAP2_BINARYSTREAMVISITOR_H_ +#define IDMAP2_INCLUDE_IDMAP2_BINARYSTREAMVISITOR_H_ + +#include +#include +#include + +#include "idmap2/Idmap.h" + +namespace android { +namespace idmap2 { + +class BinaryStreamVisitor : public Visitor { + public: + explicit BinaryStreamVisitor(std::ostream& stream) : stream_(stream) { + } + virtual void visit(const Idmap& idmap); + virtual void visit(const IdmapHeader& header); + virtual void visit(const IdmapData& data); + virtual void visit(const IdmapData::Header& header); + virtual void visit(const IdmapData::TypeEntry& type_entry); + + private: + void Write16(uint16_t value); + void Write32(uint32_t value); + void WriteString(const StringPiece& value); + std::ostream& stream_; +}; + +} // namespace idmap2 +} // namespace android + +#endif // IDMAP2_INCLUDE_IDMAP2_BINARYSTREAMVISITOR_H_ diff --git a/cmds/idmap2/include/idmap2/CommandLineOptions.h b/cmds/idmap2/include/idmap2/CommandLineOptions.h new file mode 100644 index 0000000000000000000000000000000000000000..f3aa68b8d1a239ae191bbd724d53b5cb9819f6fa --- /dev/null +++ b/cmds/idmap2/include/idmap2/CommandLineOptions.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 IDMAP2_INCLUDE_IDMAP2_COMMANDLINEOPTIONS_H_ +#define IDMAP2_INCLUDE_IDMAP2_COMMANDLINEOPTIONS_H_ + +#include +#include +#include +#include +#include + +namespace android { +namespace idmap2 { + +/* + * Utility class to convert a command line, including options (--path foo.txt), + * into data structures (options.path = "foo.txt"). + */ +class CommandLineOptions { + public: + static std::unique_ptr> ConvertArgvToVector(int argc, const char** argv); + + explicit CommandLineOptions(const std::string& name) : name_(name) { + } + + CommandLineOptions& OptionalFlag(const std::string& name, const std::string& description, + bool* value); + CommandLineOptions& MandatoryOption(const std::string& name, const std::string& description, + std::string* value); + CommandLineOptions& MandatoryOption(const std::string& name, const std::string& description, + std::vector* value); + CommandLineOptions& OptionalOption(const std::string& name, const std::string& description, + std::string* value); + bool Parse(const std::vector& argv, std::ostream& outError) const; + void Usage(std::ostream& out) const; + + private: + struct Option { + std::string name; + std::string description; + std::function action; + enum { + COUNT_OPTIONAL, + COUNT_EXACTLY_ONCE, + COUNT_ONCE_OR_MORE, + } count; + bool argument; + }; + + mutable std::vector + + + + diff --git a/cmds/idmap2/tests/data/target/target.apk b/cmds/idmap2/tests/data/target/target.apk new file mode 100644 index 0000000000000000000000000000000000000000..18ecc276caae7b9be964bf4eeac8844b5801502e Binary files /dev/null and b/cmds/idmap2/tests/data/target/target.apk differ diff --git a/cmds/incident/Android.bp b/cmds/incident/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..2a5ec5bfacafc6d06d48573dee0b470310cdb406 --- /dev/null +++ b/cmds/incident/Android.bp @@ -0,0 +1,46 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_binary { + name: "incident", + + srcs: [ + "main.cpp", + ":incident_sections", + ], + + shared_libs: [ + "libbase", + "libbinder", + "libcutils", + "liblog", + "libutils", + "libincident", + ], + + cflags: [ + "-Wall", + "-Werror", + "-Wno-missing-field-initializers", + "-Wno-unused-variable", + "-Wunused-parameter", + ], +} + +genrule { + name: "incident_sections", + tools: ["incident-section-gen"], + out: ["incident_sections.cpp"], + cmd: "$(location incident-section-gen) incident > $(out)", +} diff --git a/cmds/incident/Android.mk b/cmds/incident/Android.mk deleted file mode 100644 index 8615f9b63e43920c7161d7b8feb936e3372aafa7..0000000000000000000000000000000000000000 --- a/cmds/incident/Android.mk +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - main.cpp - -LOCAL_MODULE := incident - -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libbinder \ - libcutils \ - liblog \ - libutils \ - libincident - -LOCAL_CFLAGS += \ - -Wall -Werror -Wno-missing-field-initializers -Wno-unused-variable -Wunused-parameter - -LOCAL_MODULE_CLASS := EXECUTABLES -gen_src_dir := $(local-generated-sources-dir) - -gen := $(gen_src_dir)/incident_sections.cpp -$(gen): $(HOST_OUT_EXECUTABLES)/incident-section-gen -$(gen): PRIVATE_CUSTOM_TOOL = \ - $(HOST_OUT_EXECUTABLES)/incident-section-gen incident > $@ -$(gen): $(HOST_OUT_EXECUTABLES)/incident-section-gen - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(gen) - -gen_src_dir:= -gen:= - -include $(BUILD_EXECUTABLE) diff --git a/cmds/incidentd/Android.bp b/cmds/incidentd/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..1e970f46b01d2a81837e645a37c6057c8c8ffa54 --- /dev/null +++ b/cmds/incidentd/Android.bp @@ -0,0 +1,117 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ========= +// incidentd +// ========= + +cc_binary { + name: "incidentd", + + srcs: [ + "src/**/*.cpp", + ":incidentd_section_list", + ], + + cflags: [ + "-Wall", + "-Werror", + "-Wno-missing-field-initializers", + "-Wno-unused-variable", + "-Wunused-parameter", + + // Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed. + "-Wno-error=implicit-fallthrough", + + // optimize for size (protobuf glop can get big) + "-Os", + //"-g", + //"-O0", + ], + + local_include_dirs: ["src"], + generated_headers: ["gen-platform-proto-constants"], + + shared_libs: [ + "libbase", + "libbinder", + "libdebuggerd_client", + "libdumputils", + "libincident", + "liblog", + "libprotoutil", + "libservices", + "libutils", + ], + + init_rc: ["incidentd.rc"], +} + +// ============== +// incidentd_test +// ============== + +cc_test { + name: "incidentd_test", + test_suites: ["device-tests"], + + cflags: [ + "-Werror", + "-Wall", + "-Wno-unused-variable", + "-Wunused-parameter", + + // Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed. + "-Wno-error=implicit-fallthrough", + ], + + local_include_dirs: ["src"], + generated_headers: ["gen-platform-proto-constants"], + + srcs: [ + "tests/**/*.cpp", + "src/PrivacyBuffer.cpp", + "src/FdBuffer.cpp", + "src/Privacy.cpp", + "src/Reporter.cpp", + "src/Section.cpp", + "src/Throttler.cpp", + "src/incidentd_util.cpp", + "src/report_directory.cpp", + ], + + data: ["testdata/**/*"], + + static_libs: ["libgmock"], + + shared_libs: [ + "libbase", + "libbinder", + "libdebuggerd_client", + "libdumputils", + "libincident", + "liblog", + "libprotobuf-cpp-lite", + "libprotoutil", + "libservices", + "libutils", + ], +} + +genrule { + name: "incidentd_section_list", + tools: ["incident-section-gen"], + out: ["section_list.cpp"], + cmd: "$(location incident-section-gen) incidentd > $(out)", +} diff --git a/cmds/incidentd/Android.mk b/cmds/incidentd/Android.mk deleted file mode 100644 index db864aed6bdc32528bf376e39c9b6c1d105c5aa4..0000000000000000000000000000000000000000 --- a/cmds/incidentd/Android.mk +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) - -# proto files used in incidentd to generate cppstream proto headers. -PROTO_FILES:= \ - frameworks/base/core/proto/android/os/backtrace.proto \ - frameworks/base/core/proto/android/os/data.proto \ - frameworks/base/core/proto/android/util/log.proto - -# ========= # -# incidentd # -# ========= # - -include $(CLEAR_VARS) - -LOCAL_MODULE := incidentd - -LOCAL_SRC_FILES := $(call all-cpp-files-under, src) \ - -LOCAL_CFLAGS += \ - -Wall -Werror -Wno-missing-field-initializers -Wno-unused-variable -Wunused-parameter - -ifeq (debug,) - LOCAL_CFLAGS += \ - -g -O0 -else - # optimize for size (protobuf glop can get big) - LOCAL_CFLAGS += \ - -Os -endif -LOCAL_C_INCLUDES += $(LOCAL_PATH)/src - -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libbinder \ - libdebuggerd_client \ - libdumputils \ - libincident \ - liblog \ - libprotoutil \ - libservices \ - libutils - -LOCAL_MODULE_CLASS := EXECUTABLES - -gen_src_dir := $(local-generated-sources-dir) - -# generate section_list.cpp -GEN_LIST := $(gen_src_dir)/src/section_list.cpp -$(GEN_LIST): $(HOST_OUT_EXECUTABLES)/incident-section-gen -$(GEN_LIST): PRIVATE_CUSTOM_TOOL = \ - $(HOST_OUT_EXECUTABLES)/incident-section-gen incidentd > $@ -$(GEN_LIST): $(HOST_OUT_EXECUTABLES)/incident-section-gen - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN_LIST) -GEN_LIST:= - -# generate cppstream proto, add proto files to PROTO_FILES -GEN_PROTO := $(gen_src_dir)/proto.timestamp -$(GEN_PROTO): $(HOST_OUT_EXECUTABLES)/aprotoc $(HOST_OUT_EXECUTABLES)/protoc-gen-cppstream $(PROTO_FILES) -$(GEN_PROTO): PRIVATE_GEN_SRC_DIR := $(gen_src_dir) -$(GEN_PROTO): PRIVATE_CUSTOM_TOOL = \ - $(HOST_OUT_EXECUTABLES)/aprotoc --plugin=protoc-gen-cppstream=$(HOST_OUT_EXECUTABLES)/protoc-gen-cppstream \ - --cppstream_out=$(PRIVATE_GEN_SRC_DIR) -Iexternal/protobuf/src -I . \ - $(PROTO_FILES) \ - && touch $@ -$(GEN_PROTO): $(HOST_OUT_EXECUTABLES)/aprotoc - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN_PROTO) -GEN_PROTO:= - -gen_src_dir:= - -LOCAL_INIT_RC := incidentd.rc - -include $(BUILD_EXECUTABLE) - -# ============== # -# incidentd_test # -# ============== # - -include $(CLEAR_VARS) - -LOCAL_MODULE := incidentd_test -LOCAL_COMPATIBILITY_SUITE := device-tests -LOCAL_MODULE_TAGS := tests - -LOCAL_CFLAGS := -Werror -Wall -Wno-unused-variable -Wunused-parameter - -LOCAL_C_INCLUDES += $(LOCAL_PATH)/src - -LOCAL_SRC_FILES := $(call all-cpp-files-under, tests) \ - src/PrivacyBuffer.cpp \ - src/FdBuffer.cpp \ - src/Privacy.cpp \ - src/Reporter.cpp \ - src/Section.cpp \ - src/Throttler.cpp \ - src/incidentd_util.cpp \ - src/report_directory.cpp \ - -LOCAL_STATIC_LIBRARIES := \ - libgmock \ - -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libbinder \ - libdebuggerd_client \ - libdumputils \ - libincident \ - liblog \ - libprotobuf-cpp-lite \ - libprotoutil \ - libservices \ - libutils \ - -LOCAL_TEST_DATA := $(call find-test-data-in-subdirs, $(LOCAL_PATH), *, testdata) - -LOCAL_MODULE_CLASS := NATIVE_TESTS -gen_src_dir := $(local-generated-sources-dir) -# generate cppstream proto for testing -GEN_PROTO := $(gen_src_dir)/test.proto.timestamp -$(GEN_PROTO): $(HOST_OUT_EXECUTABLES)/aprotoc $(HOST_OUT_EXECUTABLES)/protoc-gen-cppstream $(PROTO_FILES) -$(GEN_PROTO): PRIVATE_GEN_SRC_DIR := $(gen_src_dir) -$(GEN_PROTO): PRIVATE_CUSTOM_TOOL = \ - $(HOST_OUT_EXECUTABLES)/aprotoc --plugin=protoc-gen-cppstream=$(HOST_OUT_EXECUTABLES)/protoc-gen-cppstream \ - --cppstream_out=$(PRIVATE_GEN_SRC_DIR) -Iexternal/protobuf/src -I . \ - $(PROTO_FILES) \ - && touch $@ -$(GEN_PROTO): $(HOST_OUT_EXECUTABLES)/aprotoc - $(transform-generated-source) -LOCAL_GENERATED_SOURCES += $(GEN_PROTO) -GEN_PROTO:= - -gen_src_dir:= - -include $(BUILD_NATIVE_TEST) diff --git a/cmds/screencap/Android.bp b/cmds/screencap/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..248c67589696259f9355ac3251a235914561b318 --- /dev/null +++ b/cmds/screencap/Android.bp @@ -0,0 +1,21 @@ +cc_binary { + name: "screencap", + + srcs: ["screencap.cpp"], + + shared_libs: [ + "libcutils", + "libutils", + "libbinder", + "libhwui", + "libui", + "libgui", + ], + + cflags: [ + "-Wall", + "-Werror", + "-Wunused", + "-Wunreachable-code", + ], +} diff --git a/cmds/screencap/Android.mk b/cmds/screencap/Android.mk deleted file mode 100644 index 72e3c56bc6e4f11890c0cf07921c4e59a3ba9e43..0000000000000000000000000000000000000000 --- a/cmds/screencap/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES:= \ - screencap.cpp - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libutils \ - libbinder \ - libhwui \ - libui \ - libgui - -LOCAL_MODULE:= screencap - -LOCAL_MODULE_TAGS := optional - -LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code - -include $(BUILD_EXECUTABLE) diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp index d334f96d47fb93b67668564fe942a630f82935c2..8fa298060d6061f4effcefe442a5c94ddff05edd 100644 --- a/cmds/screencap/screencap.cpp +++ b/cmds/screencap/screencap.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -74,12 +75,12 @@ static SkColorType flinger2skia(PixelFormat f) } } -static sk_sp dataSpaceToColorSpace(android_dataspace d) +static sk_sp dataSpaceToColorSpace(ui::Dataspace d) { switch (d) { - case HAL_DATASPACE_V0_SRGB: + case ui::Dataspace::V0_SRGB: return SkColorSpace::MakeSRGB(); - case HAL_DATASPACE_DISPLAY_P3: + case ui::Dataspace::DISPLAY_P3: return SkColorSpace::MakeRGB( SkColorSpace::kSRGB_RenderTargetGamma, SkColorSpace::kDCIP3_D65_Gamut); default: @@ -87,12 +88,26 @@ static sk_sp dataSpaceToColorSpace(android_dataspace d) } } -static uint32_t dataSpaceToInt(android_dataspace d) +static ui::Dataspace pickBestDataspace(ui::ColorMode colorMode) +{ + switch (colorMode) { + case ui::ColorMode::SRGB: + return ui::Dataspace::V0_SRGB; + case ui::ColorMode::DISPLAY_P3: + case ui::ColorMode::BT2100_PQ: + case ui::ColorMode::BT2100_HLG: + return ui::Dataspace::DISPLAY_P3; + default: + return ui::Dataspace::V0_SRGB; + } +} + +static uint32_t dataSpaceToInt(ui::Dataspace d) { switch (d) { - case HAL_DATASPACE_V0_SRGB: + case ui::Dataspace::V0_SRGB: return COLORSPACE_SRGB; - case HAL_DATASPACE_DISPLAY_P3: + case ui::Dataspace::DISPLAY_P3: return COLORSPACE_DISPLAY_P3; default: return COLORSPACE_UNKNOWN; @@ -161,7 +176,6 @@ int main(int argc, char** argv) void* base = NULL; uint32_t w, s, h, f; - android_dataspace d; size_t size = 0; // Maps orientations from DisplayInfo to ISurfaceComposer @@ -197,8 +211,15 @@ int main(int argc, char** argv) uint32_t captureOrientation = ORIENTATION_MAP[displayOrientation]; sp outBuffer; - status_t result = ScreenshotClient::capture(display, Rect(), 0 /* reqWidth */, - 0 /* reqHeight */, false, captureOrientation, &outBuffer); + ui::Dataspace reqDataspace = + pickBestDataspace(SurfaceComposerClient::getActiveColorMode(display)); + + // Due to the fact that we hard code the way we write pixels into screenshot, + // we hard code RGBA_8888 here. + ui::PixelFormat reqPixelFormat = ui::PixelFormat::RGBA_8888; + status_t result = ScreenshotClient::capture(display, reqDataspace, reqPixelFormat, Rect(), + 0 /* reqWidth */, 0 /* reqHeight */, false, + captureOrientation, &outBuffer); if (result != NO_ERROR) { close(fd); return 1; @@ -222,12 +243,12 @@ int main(int argc, char** argv) h = outBuffer->getHeight(); s = outBuffer->getStride(); f = outBuffer->getPixelFormat(); - d = HAL_DATASPACE_UNKNOWN; size = s * h * bytesPerPixel(f); if (png) { const SkImageInfo info = - SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType, dataSpaceToColorSpace(d)); + SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType, + dataSpaceToColorSpace(reqDataspace)); SkPixmap pixmap(info, base, s * bytesPerPixel(f)); struct FDWStream final : public SkWStream { size_t fBytesWritten = 0; @@ -244,7 +265,7 @@ int main(int argc, char** argv) notifyMediaScanner(fn); } } else { - uint32_t c = dataSpaceToInt(d); + uint32_t c = dataSpaceToInt(reqDataspace); write(fd, &w, 4); write(fd, &h, 4); write(fd, &f, 4); @@ -261,4 +282,4 @@ int main(int argc, char** argv) } return 0; -} \ No newline at end of file +} diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index 09343f17458767e24f9141d7448075e8fe3dee46..783c8c45d60364776620436e0f92e45b2e22a2b0 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -101,6 +101,8 @@ public final class Sm { runFstrim(); } else if ("set-virtual-disk".equals(op)) { runSetVirtualDisk(); + } else if ("set-isolated-storage".equals(op)) { + runIsolatedStorage(); } else { throw new IllegalArgumentException(); } @@ -125,6 +127,8 @@ public final class Sm { filterType = VolumeInfo.TYPE_PRIVATE; } else if ("emulated".equals(filter)) { filterType = VolumeInfo.TYPE_EMULATED; + } else if ("stub".equals(filter)) { + filterType = VolumeInfo.TYPE_STUB; } else { filterType = -1; } @@ -278,6 +282,20 @@ public final class Sm { StorageManager.DEBUG_VIRTUAL_DISK); } + public void runIsolatedStorage() throws RemoteException { + final boolean enableIsolatedStorage = Boolean.parseBoolean(nextArg()); + // Toggling isolated-storage state will result in a device reboot. So to avoid this command + // from erroring out (DeadSystemException), call setDebugFlags() in a separate thread. + new Thread(() -> { + try { + mSm.setDebugFlags(enableIsolatedStorage ? StorageManager.DEBUG_ISOLATED_STORAGE : 0, + StorageManager.DEBUG_ISOLATED_STORAGE); + } catch (RemoteException e) { + Log.e(TAG, "Encountered an error!", e); + } + }).start(); + } + public void runIdleMaint() throws RemoteException { final boolean im_run = "run".equals(nextArg()); if (im_run) { @@ -298,7 +316,7 @@ public final class Sm { private static int showUsage() { System.err.println("usage: sm list-disks [adoptable]"); - System.err.println(" sm list-volumes [public|private|emulated|all]"); + System.err.println(" sm list-volumes [public|private|emulated|stub|all]"); System.err.println(" sm has-adoptable"); System.err.println(" sm get-primary-storage-uuid"); System.err.println(" sm set-force-adoptable [on|off|default]"); @@ -316,6 +334,8 @@ public final class Sm { System.err.println(""); System.err.println(" sm set-emulate-fbe [true|false]"); System.err.println(""); + System.err.println(" sm set-isolated-storage [true|false]"); + System.err.println(""); return 1; } } diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp index 94203f4feccdb1b2a73fddd582446b4be260430a..0114ff488413e6ce187bd41b6fcb539c6df12676 100644 --- a/cmds/statsd/Android.bp +++ b/cmds/statsd/Android.bp @@ -1,5 +1,5 @@ // -// Copyright (C) 2015 The Android Open Source Project +// 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. @@ -42,6 +42,281 @@ cc_library_host_shared { } +cc_defaults { + name: "statsd_defaults", + aidl: { + include_dirs: ["frameworks/base/core/java"], + }, + + srcs: [ + ":statsd_aidl", + "src/statsd_config.proto", + "src/FieldValue.cpp", + "src/hash.cpp", + "src/stats_log_util.cpp", + "src/anomaly/AlarmMonitor.cpp", + "src/anomaly/AlarmTracker.cpp", + "src/anomaly/AnomalyTracker.cpp", + "src/anomaly/DurationAnomalyTracker.cpp", + "src/anomaly/subscriber_util.cpp", + "src/condition/CombinationConditionTracker.cpp", + "src/condition/condition_util.cpp", + "src/condition/SimpleConditionTracker.cpp", + "src/condition/ConditionWizard.cpp", + "src/condition/StateTracker.cpp", + "src/config/ConfigKey.cpp", + "src/config/ConfigListener.cpp", + "src/config/ConfigManager.cpp", + "src/external/Perfetto.cpp", + "src/external/Perfprofd.cpp", + "src/external/StatsPuller.cpp", + "src/external/StatsCompanionServicePuller.cpp", + "src/external/SubsystemSleepStatePuller.cpp", + "src/external/PowerStatsPuller.cpp", + "src/external/ResourceHealthManagerPuller.cpp", + "src/external/ResourceThermalManagerPuller.cpp", + "src/external/StatsPullerManager.cpp", + "src/external/puller_util.cpp", + "src/logd/LogEvent.cpp", + "src/logd/LogListener.cpp", + "src/matchers/CombinationLogMatchingTracker.cpp", + "src/matchers/EventMatcherWizard.cpp", + "src/matchers/matcher_util.cpp", + "src/matchers/SimpleLogMatchingTracker.cpp", + "src/metrics/MetricProducer.cpp", + "src/metrics/EventMetricProducer.cpp", + "src/metrics/CountMetricProducer.cpp", + "src/metrics/DurationMetricProducer.cpp", + "src/metrics/duration_helper/OringDurationTracker.cpp", + "src/metrics/duration_helper/MaxDurationTracker.cpp", + "src/metrics/ValueMetricProducer.cpp", + "src/metrics/GaugeMetricProducer.cpp", + "src/metrics/MetricsManager.cpp", + "src/metrics/metrics_manager_util.cpp", + "src/packages/UidMap.cpp", + "src/storage/StorageManager.cpp", + "src/StatsLogProcessor.cpp", + "src/StatsService.cpp", + "src/statscompanion_util.cpp", + "src/subscriber/IncidentdReporter.cpp", + "src/subscriber/SubscriberReporter.cpp", + "src/HashableDimensionKey.cpp", + "src/guardrail/StatsdStats.cpp", + "src/socket/StatsSocketListener.cpp", + "src/shell/ShellSubscriber.cpp", + "src/shell/shell_config.proto", + + ":perfprofd_aidl", + ], + + local_include_dirs: [ + "src", + ], + + static_libs: [ + "libhealthhalutils", + ], + + shared_libs: [ + "libbase", + "libbinder", + "libincident", + "liblog", + "libutils", + "libservices", + "libprotoutil", + "libstatslog", + "libhardware", + "libhardware_legacy", + "libhidlbase", + "libhidltransport", + "libhwbinder", + "android.frameworks.stats@1.0", + "android.hardware.health@2.0", + "android.hardware.power@1.0", + "android.hardware.power@1.1", + "android.hardware.power.stats@1.0", + "android.hardware.thermal@1.0", + "libpackagelistparser", + "libsysutils", + "libcutils", + ], +} + +// ========= +// statsd +// ========= + +cc_binary { + name: "statsd", + defaults: ["statsd_defaults"], + + srcs: ["src/main.cpp"], + + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + "-Wno-unused-parameter", + // optimize for size (protobuf glop can get big) + "-Os", + // "-g", + // "-O0", + ], + + product_variables: { + eng: { + // Enable sanitizer ONLY on eng builds + //sanitize: { + // address: true, + //}, + }, + debuggable: { + // Add a flag to enable stats log printing from statsd on debug builds. + cflags: ["-DVERY_VERBOSE_PRINTING"], + }, + }, + + proto: { + type: "lite", + }, + + shared_libs: ["libgtest_prod"], + + vintf_fragments: ["android.frameworks.stats@1.0-service.xml"], + + init_rc: ["statsd.rc"], +} + +// ============== +// statsd_test +// ============== + +cc_test { + name: "statsd_test", + defaults: ["statsd_defaults"], + test_suites: ["device-tests"], + + cflags: [ + "-Wall", + "-Werror", + "-Wno-missing-field-initializers", + "-Wno-unused-variable", + "-Wno-unused-function", + "-Wno-unused-parameter", + ], + + srcs: [ + "src/atom_field_options.proto", + "src/atoms.proto", + "src/stats_log.proto", + "src/shell/shell_data.proto", + "tests/AlarmMonitor_test.cpp", + "tests/anomaly/AlarmTracker_test.cpp", + "tests/anomaly/AnomalyTracker_test.cpp", + "tests/ConfigManager_test.cpp", + "tests/external/puller_util_test.cpp", + "tests/indexed_priority_queue_test.cpp", + "tests/LogEntryMatcher_test.cpp", + "tests/LogEvent_test.cpp", + "tests/MetricsManager_test.cpp", + "tests/StatsLogProcessor_test.cpp", + "tests/StatsService_test.cpp", + "tests/UidMap_test.cpp", + "tests/FieldValue_test.cpp", + "tests/condition/CombinationConditionTracker_test.cpp", + "tests/condition/SimpleConditionTracker_test.cpp", + "tests/condition/StateTracker_test.cpp", + "tests/metrics/OringDurationTracker_test.cpp", + "tests/metrics/MaxDurationTracker_test.cpp", + "tests/metrics/CountMetricProducer_test.cpp", + "tests/metrics/DurationMetricProducer_test.cpp", + "tests/metrics/EventMetricProducer_test.cpp", + "tests/metrics/ValueMetricProducer_test.cpp", + "tests/metrics/GaugeMetricProducer_test.cpp", + "tests/guardrail/StatsdStats_test.cpp", + "tests/metrics/metrics_test_helper.cpp", + "tests/statsd_test_util.cpp", + "tests/e2e/WakelockDuration_e2e_test.cpp", + "tests/e2e/MetricActivation_e2e_test.cpp", + "tests/e2e/MetricConditionLink_e2e_test.cpp", + "tests/e2e/Alarm_e2e_test.cpp", + "tests/e2e/Attribution_e2e_test.cpp", + "tests/e2e/GaugeMetric_e2e_push_test.cpp", + "tests/e2e/GaugeMetric_e2e_pull_test.cpp", + "tests/e2e/ValueMetric_pull_e2e_test.cpp", + "tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp", + "tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp", + "tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp", + "tests/e2e/Anomaly_count_e2e_test.cpp", + "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", + "tests/e2e/ConfigTtl_e2e_test.cpp", + "tests/e2e/PartialBucket_e2e_test.cpp", + "tests/shell/ShellSubscriber_test.cpp", + ], + + static_libs: [ + "libgmock", + "libplatformprotos", + ], + + proto: { + type: "full", + include_dirs: ["external/protobuf/src"], + }, + + shared_libs: ["libprotobuf-cpp-full"], + +} + +//############################# +// statsd micro benchmark +//############################# + +cc_benchmark { + name: "statsd_benchmark", + defaults: ["statsd_defaults"], + + srcs: [ + "src/atom_field_options.proto", + "src/atoms.proto", + "src/stats_log.proto", + "benchmark/main.cpp", + "benchmark/hello_world_benchmark.cpp", + "benchmark/log_event_benchmark.cpp", + "benchmark/stats_write_benchmark.cpp", + "benchmark/filter_value_benchmark.cpp", + "benchmark/get_dimensions_for_condition_benchmark.cpp", + "benchmark/metric_util.cpp", + "benchmark/duration_metric_benchmark.cpp", + ], + + proto: { + type: "full", + include_dirs: ["external/protobuf/src"], + }, + + cflags: [ + "-Wall", + "-Werror", + "-Wno-unused-parameter", + "-Wno-unused-variable", + "-Wno-unused-function", + + // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374 + "-Wno-varargs" + ], + + static_libs: [ + "libplatformprotos", + ], + + shared_libs: [ + "libgtest_prod", + "libstatslog", + "libprotobuf-cpp-full", + ], +} // ==== java proto device library (for test only) ============================== java_library { diff --git a/cmds/statsd/Android.mk b/cmds/statsd/Android.mk deleted file mode 100644 index 5818f5d550c32ce17bd07285e841bc7974347d79..0000000000000000000000000000000000000000 --- a/cmds/statsd/Android.mk +++ /dev/null @@ -1,319 +0,0 @@ -# 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. - -LOCAL_PATH:= $(call my-dir) - -statsd_common_src := \ - ../../core/java/android/os/IStatsCompanionService.aidl \ - ../../core/java/android/os/IStatsManager.aidl \ - src/statsd_config.proto \ - src/FieldValue.cpp \ - src/hash.cpp \ - src/stats_log_util.cpp \ - src/anomaly/AlarmMonitor.cpp \ - src/anomaly/AlarmTracker.cpp \ - src/anomaly/AnomalyTracker.cpp \ - src/anomaly/DurationAnomalyTracker.cpp \ - src/anomaly/subscriber_util.cpp \ - src/condition/CombinationConditionTracker.cpp \ - src/condition/condition_util.cpp \ - src/condition/SimpleConditionTracker.cpp \ - src/condition/ConditionWizard.cpp \ - src/condition/StateTracker.cpp \ - src/config/ConfigKey.cpp \ - src/config/ConfigListener.cpp \ - src/config/ConfigManager.cpp \ - src/external/Perfetto.cpp \ - src/external/Perfprofd.cpp \ - src/external/StatsPuller.cpp \ - src/external/StatsCompanionServicePuller.cpp \ - src/external/SubsystemSleepStatePuller.cpp \ - src/external/ResourceHealthManagerPuller.cpp \ - src/external/ResourceThermalManagerPuller.cpp \ - src/external/StatsPullerManager.cpp \ - src/external/puller_util.cpp \ - src/logd/LogEvent.cpp \ - src/logd/LogListener.cpp \ - src/matchers/CombinationLogMatchingTracker.cpp \ - src/matchers/EventMatcherWizard.cpp \ - src/matchers/matcher_util.cpp \ - src/matchers/SimpleLogMatchingTracker.cpp \ - src/metrics/MetricProducer.cpp \ - src/metrics/EventMetricProducer.cpp \ - src/metrics/CountMetricProducer.cpp \ - src/metrics/DurationMetricProducer.cpp \ - src/metrics/duration_helper/OringDurationTracker.cpp \ - src/metrics/duration_helper/MaxDurationTracker.cpp \ - src/metrics/ValueMetricProducer.cpp \ - src/metrics/GaugeMetricProducer.cpp \ - src/metrics/MetricsManager.cpp \ - src/metrics/metrics_manager_util.cpp \ - src/packages/UidMap.cpp \ - src/storage/StorageManager.cpp \ - src/StatsLogProcessor.cpp \ - src/StatsService.cpp \ - src/statscompanion_util.cpp \ - src/subscriber/IncidentdReporter.cpp \ - src/subscriber/SubscriberReporter.cpp \ - src/HashableDimensionKey.cpp \ - src/guardrail/StatsdStats.cpp \ - src/socket/StatsSocketListener.cpp \ - src/shell/ShellSubscriber.cpp \ - src/shell/shell_config.proto - -# TODO(b/110563449): Once statsd is using a blueprint file, migrate to the proper filegroups. -statsd_common_src += \ - ../../../../system/extras/perfprofd/binder_interface/aidl/android/os/IPerfProfd.aidl - -statsd_common_c_includes := \ - $(LOCAL_PATH)/src \ - $(LOCAL_PATH)/../../libs/services/include - -statsd_common_aidl_includes := \ - $(LOCAL_PATH)/../../core/java - -statsd_common_static_libraries := \ - libhealthhalutils - -statsd_common_shared_libraries := \ - libbase \ - libbinder \ - libincident \ - liblog \ - libutils \ - libservices \ - libprotoutil \ - libstatslog \ - libhardware \ - libhardware_legacy \ - libhidlbase \ - libhidltransport \ - libhwbinder \ - android.frameworks.stats@1.0 \ - android.hardware.health@2.0 \ - android.hardware.power@1.0 \ - android.hardware.power@1.1 \ - android.hardware.thermal@1.0 \ - libpackagelistparser \ - libsysutils \ - libcutils - -# ========= -# statsd -# ========= - -include $(CLEAR_VARS) - -LOCAL_MODULE := statsd - -LOCAL_SRC_FILES := \ - $(statsd_common_src) \ - src/main.cpp - -LOCAL_CFLAGS += \ - -Wall \ - -Wextra \ - -Werror \ - -Wno-unused-parameter - -ifeq (debug,) - LOCAL_CFLAGS += \ - -g -O0 -else - # optimize for size (protobuf glop can get big) - LOCAL_CFLAGS += \ - -Os -endif -LOCAL_PROTOC_OPTIMIZE_TYPE := lite - -LOCAL_AIDL_INCLUDES := $(statsd_common_aidl_includes) -LOCAL_C_INCLUDES += $(statsd_common_c_includes) - -LOCAL_STATIC_LIBRARIES := $(statsd_common_static_libraries) - -LOCAL_SHARED_LIBRARIES := $(statsd_common_shared_libraries) \ - libgtest_prod - -LOCAL_MODULE_CLASS := EXECUTABLES - -# Enable sanitizer ONLY on eng builds. -#ifeq ($(TARGET_BUILD_VARIANT),eng) -# LOCAL_CLANG := true -# LOCAL_SANITIZE := address -#endif - -# Add a flag to enable stats log printing from statsd on debug builds. -ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) - LOCAL_CFLAGS += \ - -DVERY_VERBOSE_PRINTING -endif - -LOCAL_INIT_RC := statsd.rc - -include $(BUILD_EXECUTABLE) - - -# ============== -# statsd_test -# ============== - -include $(CLEAR_VARS) - -LOCAL_MODULE := statsd_test -LOCAL_COMPATIBILITY_SUITE := device-tests -LOCAL_MODULE_TAGS := tests - -LOCAL_AIDL_INCLUDES := $(statsd_common_aidl_includes) -LOCAL_C_INCLUDES += $(statsd_common_c_includes) - -LOCAL_CFLAGS += \ - -Wall \ - -Werror \ - -Wno-missing-field-initializers \ - -Wno-unused-variable \ - -Wno-unused-function \ - -Wno-unused-parameter - -LOCAL_SRC_FILES := \ - $(statsd_common_src) \ - src/atom_field_options.proto \ - src/atoms.proto \ - src/stats_log.proto \ - src/shell/shell_data.proto \ - tests/AlarmMonitor_test.cpp \ - tests/anomaly/AlarmTracker_test.cpp \ - tests/anomaly/AnomalyTracker_test.cpp \ - tests/ConfigManager_test.cpp \ - tests/external/puller_util_test.cpp \ - tests/indexed_priority_queue_test.cpp \ - tests/LogEntryMatcher_test.cpp \ - tests/LogEvent_test.cpp \ - tests/MetricsManager_test.cpp \ - tests/StatsLogProcessor_test.cpp \ - tests/StatsService_test.cpp \ - tests/UidMap_test.cpp \ - tests/FieldValue_test.cpp \ - tests/condition/CombinationConditionTracker_test.cpp \ - tests/condition/SimpleConditionTracker_test.cpp \ - tests/condition/StateTracker_test.cpp \ - tests/metrics/OringDurationTracker_test.cpp \ - tests/metrics/MaxDurationTracker_test.cpp \ - tests/metrics/CountMetricProducer_test.cpp \ - tests/metrics/DurationMetricProducer_test.cpp \ - tests/metrics/EventMetricProducer_test.cpp \ - tests/metrics/ValueMetricProducer_test.cpp \ - tests/metrics/GaugeMetricProducer_test.cpp \ - tests/guardrail/StatsdStats_test.cpp \ - tests/metrics/metrics_test_helper.cpp \ - tests/statsd_test_util.cpp \ - tests/e2e/WakelockDuration_e2e_test.cpp \ - tests/e2e/MetricActivation_e2e_test.cpp \ - tests/e2e/MetricConditionLink_e2e_test.cpp \ - tests/e2e/Alarm_e2e_test.cpp \ - tests/e2e/Attribution_e2e_test.cpp \ - tests/e2e/GaugeMetric_e2e_push_test.cpp \ - tests/e2e/GaugeMetric_e2e_pull_test.cpp \ - tests/e2e/ValueMetric_pull_e2e_test.cpp \ - tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp \ - tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp \ - tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp \ - tests/e2e/Anomaly_count_e2e_test.cpp \ - tests/e2e/Anomaly_duration_sum_e2e_test.cpp \ - tests/e2e/ConfigTtl_e2e_test.cpp \ - tests/e2e/PartialBucket_e2e_test.cpp \ - tests/shell/ShellSubscriber_test.cpp - -LOCAL_STATIC_LIBRARIES := \ - $(statsd_common_static_libraries) \ - libgmock \ - libplatformprotos - -LOCAL_PROTOC_OPTIMIZE_TYPE := full - -LOCAL_PROTOC_FLAGS := \ - -Iexternal/protobuf/src - -LOCAL_SHARED_LIBRARIES := $(statsd_common_shared_libraries) \ - libprotobuf-cpp-full - -include $(BUILD_NATIVE_TEST) - -############################## -# statsd micro benchmark -############################## - -include $(CLEAR_VARS) -LOCAL_MODULE := statsd_benchmark - -LOCAL_SRC_FILES := $(statsd_common_src) \ - src/atom_field_options.proto \ - src/atoms.proto \ - src/stats_log.proto \ - benchmark/main.cpp \ - benchmark/hello_world_benchmark.cpp \ - benchmark/log_event_benchmark.cpp \ - benchmark/stats_write_benchmark.cpp \ - benchmark/filter_value_benchmark.cpp \ - benchmark/get_dimensions_for_condition_benchmark.cpp \ - benchmark/metric_util.cpp \ - benchmark/duration_metric_benchmark.cpp - -LOCAL_STATIC_LIBRARIES := \ - $(statsd_common_static_libraries) - -LOCAL_PROTOC_OPTIMIZE_TYPE := full - -LOCAL_PROTOC_FLAGS := \ - -Iexternal/protobuf/src - -LOCAL_SHARED_LIBRARIES := $(statsd_common_shared_libraries) \ - libprotobuf-cpp-full - -LOCAL_STATIC_JAVA_LIBRARIES := \ - platformprotoslite - -LOCAL_C_INCLUDES := $(statsd_common_c_includes) - -LOCAL_CFLAGS := -Wall \ - -Werror \ - -Wno-unused-parameter \ - -Wno-unused-variable \ - -Wno-unused-function \ - -# Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374 -LOCAL_CFLAGS += -Wno-varargs - -LOCAL_AIDL_INCLUDES := $(statsd_common_aidl_includes) - -LOCAL_STATIC_LIBRARIES := \ - $(statsd_common_static_libraries) \ - libplatformprotos - -LOCAL_SHARED_LIBRARIES := $(statsd_common_shared_libraries) \ - libgtest_prod \ - libstatslog - -LOCAL_MODULE_TAGS := eng tests - -include $(BUILD_NATIVE_BENCHMARK) - - -statsd_common_src:= -statsd_common_aidl_includes:= -statsd_common_c_includes:= -statsd_common_static_libraries:= -statsd_common_shared_libraries:= - - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/cmds/statsd/android.frameworks.stats@1.0-service.xml b/cmds/statsd/android.frameworks.stats@1.0-service.xml new file mode 100644 index 0000000000000000000000000000000000000000..bb02f66a28b16d8abf28052a110189ad648b6846 --- /dev/null +++ b/cmds/statsd/android.frameworks.stats@1.0-service.xml @@ -0,0 +1,11 @@ + + + android.frameworks.stats + hwbinder + 1.0 + + IStats + default + + + diff --git a/cmds/statsd/src/FieldValue.cpp b/cmds/statsd/src/FieldValue.cpp index fc1a61cac558547b718e380ba15c31d5ff4628a0..80ed80776829b6965c53466689a4593e717c37ee 100644 --- a/cmds/statsd/src/FieldValue.cpp +++ b/cmds/statsd/src/FieldValue.cpp @@ -18,6 +18,7 @@ #include "Log.h" #include "FieldValue.h" #include "HashableDimensionKey.h" +#include "math.h" namespace android { namespace os { @@ -174,6 +175,25 @@ std::string Value::toString() const { } } +bool Value::isZero() const { + switch (type) { + case INT: + return int_value == 0; + case LONG: + return long_value == 0; + case FLOAT: + return fabs(float_value) <= std::numeric_limits::epsilon(); + case DOUBLE: + return fabs(double_value) <= std::numeric_limits::epsilon(); + case STRING: + return str_value.size() == 0; + case STORAGE: + return storage_value.size() == 0; + default: + return false; + } +} + bool Value::operator==(const Value& that) const { if (type != that.getType()) return false; diff --git a/cmds/statsd/src/FieldValue.h b/cmds/statsd/src/FieldValue.h index 77163f9d86195336122fe9db213e16b83e457961..a5d00ac4e72bcbac7bd2053c14ce86ae41344ec8 100644 --- a/cmds/statsd/src/FieldValue.h +++ b/cmds/statsd/src/FieldValue.h @@ -331,6 +331,8 @@ struct Value { std::string toString() const; + bool isZero() const; + Type getType() const { return type; } diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index f4c70bee28065694be363fcacb12ccc836026b70..a9819972cfc769cb1868381f48bf9a0f438c61f5 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -71,6 +71,9 @@ const int FIELD_ID_STRINGS = 9; #define STATS_DATA_DIR "/data/misc/stats-data" +// Cool down period for writing data to disk to avoid overwriting files. +#define WRITE_DATA_COOL_DOWN_SEC 5 + StatsLogProcessor::StatsLogProcessor(const sp& uidMap, const sp& pullerManager, const sp& anomalyAlarmMonitor, @@ -272,26 +275,25 @@ void StatsLogProcessor::dumpStates(int out, bool verbose) { } /* - * onDumpReport dumps serialized ConfigMetricsReportList into outData. + * onDumpReport dumps serialized ConfigMetricsReportList into proto. */ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTimeStampNs, const bool include_current_partial_bucket, + const bool erase_data, const DumpReportReason dumpReportReason, - vector* outData) { + ProtoOutputStream* proto) { std::lock_guard lock(mMetricsMutex); - ProtoOutputStream proto; - // Start of ConfigKey. - uint64_t configKeyToken = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY); - proto.write(FIELD_TYPE_INT32 | FIELD_ID_UID, key.GetUid()); - proto.write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)key.GetId()); - proto.end(configKeyToken); + uint64_t configKeyToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY); + proto->write(FIELD_TYPE_INT32 | FIELD_ID_UID, key.GetUid()); + proto->write(FIELD_TYPE_INT64 | FIELD_ID_ID, (long long)key.GetId()); + proto->end(configKeyToken); // End of ConfigKey. // Then, check stats-data directory to see there's any file containing // ConfigMetricsReport from previous shutdowns to concatenate to reports. - StorageManager::appendConfigMetricsReport(key, &proto); + StorageManager::appendConfigMetricsReport(key, proto); auto it = mMetricsManagers.find(key); if (it != mMetricsManagers.end()) { @@ -301,14 +303,27 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTim // Start of ConfigMetricsReport (reports). uint64_t reportsToken = - proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS); + proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS); onConfigMetricsReportLocked(key, dumpTimeStampNs, include_current_partial_bucket, - dumpReportReason, &proto); - proto.end(reportsToken); + erase_data, dumpReportReason, proto); + proto->end(reportsToken); // End of ConfigMetricsReport (reports). } else { ALOGW("Config source %s does not exist", key.ToString().c_str()); } +} + +/* + * onDumpReport dumps serialized ConfigMetricsReportList into outData. + */ +void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTimeStampNs, + const bool include_current_partial_bucket, + const bool erase_data, + const DumpReportReason dumpReportReason, + vector* outData) { + ProtoOutputStream proto; + onDumpReport(key, dumpTimeStampNs, include_current_partial_bucket, erase_data, + dumpReportReason, &proto); if (outData != nullptr) { outData->clear(); @@ -332,6 +347,7 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, const int64_t dumpTim void StatsLogProcessor::onConfigMetricsReportLocked(const ConfigKey& key, const int64_t dumpTimeStampNs, const bool include_current_partial_bucket, + const bool erase_data, const DumpReportReason dumpReportReason, ProtoOutputStream* proto) { // We already checked whether key exists in mMetricsManagers in @@ -348,17 +364,15 @@ void StatsLogProcessor::onConfigMetricsReportLocked(const ConfigKey& key, // First, fill in ConfigMetricsReport using current data on memory, which // starts from filling in StatsLogReport's. it->second->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, - &str_set, proto); + erase_data, &str_set, proto); // Fill in UidMap if there is at least one metric to report. // This skips the uid map if it's an empty config. if (it->second->getNumMetrics() > 0) { uint64_t uidMapToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_ID_UID_MAP); - if (it->second->hashStringInReport()) { - mUidMap->appendUidMap(dumpTimeStampNs, key, &str_set, proto); - } else { - mUidMap->appendUidMap(dumpTimeStampNs, key, nullptr, proto); - } + mUidMap->appendUidMap( + dumpTimeStampNs, key, it->second->hashStringInReport() ? &str_set : nullptr, + it->second->versionStringsInReport(), it->second->installerInReport(), proto); proto->end(uidMapToken); } @@ -442,7 +456,7 @@ void StatsLogProcessor::flushIfNecessaryLocked( if (totalBytes > StatsdStats::kMaxMetricsBytesPerConfig) { // Too late. We need to start clearing data. metricsManager.dropData(timestampNs); - StatsdStats::getInstance().noteDataDropped(key); + StatsdStats::getInstance().noteDataDropped(key, totalBytes); VLOG("StatsD had to toss out metrics for %s", key.ToString().c_str()); } else if ((totalBytes > StatsdStats::kBytesPerConfigTriggerGetData) || (mOnDiskDataConfigs.find(key) != mOnDiskDataConfigs.end())) { @@ -479,7 +493,7 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, } ProtoOutputStream proto; onConfigMetricsReportLocked(key, timestampNs, true /* include_current_partial_bucket*/, - dumpReportReason, &proto); + true /* erase_data */, dumpReportReason, &proto); string file_name = StringPrintf("%s/%ld_%d_%lld", STATS_DATA_DIR, (long)getWallClockSec(), key.GetUid(), (long long)key.GetId()); android::base::unique_fd fd(open(file_name.c_str(), @@ -495,6 +509,16 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, void StatsLogProcessor::WriteDataToDiskLocked(const DumpReportReason dumpReportReason) { const int64_t timeNs = getElapsedRealtimeNs(); + // Do not write to disk if we already have in the last few seconds. + // This is to avoid overwriting files that would have the same name if we + // write twice in the same second. + if (static_cast (timeNs) < + mLastWriteTimeNs + WRITE_DATA_COOL_DOWN_SEC * NS_PER_SEC) { + ALOGI("Statsd skipping writing data to disk. Already wrote data in last %d seconds", + WRITE_DATA_COOL_DOWN_SEC); + return; + } + mLastWriteTimeNs = timeNs; for (auto& pair : mMetricsManagers) { WriteDataToDiskLocked(pair.first, timeNs, dumpReportReason); } diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index 3e8b9b8d5df52b0af65a75b79632f6274f06a6e0..a5ce9b65f89995d33d78efa292115c9dfc8245d0 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -61,8 +61,11 @@ public: size_t GetMetricsSize(const ConfigKey& key) const; void onDumpReport(const ConfigKey& key, const int64_t dumpTimeNs, - const bool include_current_partial_bucket, + const bool include_current_partial_bucket, const bool erase_data, const DumpReportReason dumpReportReason, vector* outData); + void onDumpReport(const ConfigKey& key, const int64_t dumpTimeNs, + const bool include_current_partial_bucket, const bool erase_data, + const DumpReportReason dumpReportReason, ProtoOutputStream* proto); /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies anomaly alarmSet. */ void onAnomalyAlarmFired( @@ -141,6 +144,7 @@ private: void onConfigMetricsReportLocked(const ConfigKey& key, const int64_t dumpTimeStampNs, const bool include_current_partial_bucket, + const bool erase_data, const DumpReportReason dumpReportReason, util::ProtoOutputStream* proto); @@ -173,6 +177,9 @@ private: long mLastPullerCacheClearTimeSec = 0; + // Last time we wrote data to disk. + int64_t mLastWriteTimeNs = 0; + #ifdef VERY_VERBOSE_PRINTING bool mPrintAllLogs = false; #endif diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index ce28777318826693f31ccf909cb414389fa525e1..7fa05be29b9d9e5207e10a19929ad62615e8e72c 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -46,6 +46,8 @@ using namespace android; using android::base::StringPrintf; +using android::util::FIELD_COUNT_REPEATED; +using android::util::FIELD_TYPE_MESSAGE; namespace android { namespace os { @@ -58,6 +60,9 @@ constexpr const char* kOpUsage = "android:get_usage_stats"; #define STATS_SERVICE_DIR "/data/misc/stats-service" +// for StatsDataDumpProto +const int FIELD_ID_REPORTS_LIST = 1; + static binder::Status ok() { return binder::Status::ok(); } @@ -224,31 +229,48 @@ status_t StatsService::onTransact(uint32_t code, const Parcel& data, Parcel* rep } /** - * Write debugging data about statsd. + * Write data from statsd. + * Format for statsdStats: adb shell dumpsys stats --metadata [-v] [--proto] + * Format for data report: adb shell dumpsys stats [anything other than --metadata] [--proto] + * Anything ending in --proto will be in proto format. + * Anything without --metadata as the first argument will be report information. + * (bugreports call "adb shell dumpsys stats --dump-priority NORMAL -a --proto") + * TODO: Come up with a more robust method of enacting . */ status_t StatsService::dump(int fd, const Vector& args) { if (!checkCallingPermission(String16(kPermissionDump))) { return PERMISSION_DENIED; } - - bool verbose = false; - bool proto = false; - if (args.size() > 0 && !args[0].compare(String16("-v"))) { - verbose = true; + int lastArg = args.size() - 1; + bool asProto = false; + if (lastArg >= 0 && !args[lastArg].compare(String16("--proto"))) { // last argument + asProto = true; + lastArg--; } - if (args.size() > 0 && !args[args.size()-1].compare(String16("--proto"))) { - proto = true; + if (args.size() > 0 && !args[0].compare(String16("--metadata"))) { // first argument + // Request is to dump statsd stats. + bool verbose = false; + if (lastArg >= 0 && !args[lastArg].compare(String16("-v"))) { + verbose = true; + lastArg--; + } + dumpStatsdStats(fd, verbose, asProto); + } else { + // Request is to dump statsd report data. + if (asProto) { + dumpIncidentSection(fd); + } else { + dprintf(fd, "Non-proto format of stats data dump not available; see proto version.\n"); + } } - dump_impl(fd, verbose, proto); - return NO_ERROR; } /** * Write debugging data about statsd in text or proto format. */ -void StatsService::dump_impl(int out, bool verbose, bool proto) { +void StatsService::dumpStatsdStats(int out, bool verbose, bool proto) { if (proto) { vector data; StatsdStats::getInstance().dumpStats(&data, false); // does not reset statsdStats. @@ -261,6 +283,22 @@ void StatsService::dump_impl(int out, bool verbose, bool proto) { } } +/** + * Write stats report data in StatsDataDumpProto incident section format. + */ +void StatsService::dumpIncidentSection(int out) { + ProtoOutputStream proto; + for (const ConfigKey& configKey : mConfigManager->GetAllConfigKeys()) { + uint64_t reportsListToken = + proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_REPORTS_LIST); + mProcessor->onDumpReport(configKey, getElapsedRealtimeNs(), + true /* includeCurrentBucket */, false /* erase_data */, + ADB_DUMP, &proto); + proto.end(reportsListToken); + proto.flush(out); + } +} + /** * Implementation of the adb shell cmd stats command. */ @@ -283,7 +321,7 @@ status_t StatsService::command(int in, int out, int err, Vector& args, } if (!args[0].compare(String8("dump-report"))) { - return cmd_dump_report(out, err, args); + return cmd_dump_report(out, args); } if (!args[0].compare(String8("pull-source")) && args.size() > 1) { @@ -546,7 +584,7 @@ status_t StatsService::cmd_config(int in, int out, int err, Vector& arg return UNKNOWN_ERROR; } -status_t StatsService::cmd_dump_report(int out, int err, const Vector& args) { +status_t StatsService::cmd_dump_report(int out, const Vector& args) { if (mProcessor != nullptr) { int argCount = args.size(); bool good = false; @@ -589,14 +627,13 @@ status_t StatsService::cmd_dump_report(int out, int err, const Vector& if (good) { vector data; mProcessor->onDumpReport(ConfigKey(uid, StrToInt64(name)), getElapsedRealtimeNs(), - includeCurrentBucket, ADB_DUMP, &data); + includeCurrentBucket, true /* erase_data */, ADB_DUMP, &data); if (proto) { for (size_t i = 0; i < data.size(); i ++) { dprintf(out, "%c", data[i]); } } else { - dprintf(out, "Dump report for Config [%d,%s]\n", uid, name.c_str()); - dprintf(out, "See the StatsLogReport in logcat...\n"); + dprintf(out, "Non-proto stats data dump not currently supported.\n"); } return android::OK; } else { @@ -750,21 +787,24 @@ status_t StatsService::cmd_print_logs(int out, const Vector& args) { } Status StatsService::informAllUidData(const vector& uid, const vector& version, - const vector& app) { + const vector& version_string, + const vector& app, + const vector& installer) { ENFORCE_UID(AID_SYSTEM); VLOG("StatsService::informAllUidData was called"); - mUidMap->updateMap(getElapsedRealtimeNs(), uid, version, app); + mUidMap->updateMap(getElapsedRealtimeNs(), uid, version, version_string, app, installer); VLOG("StatsService::informAllUidData succeeded"); return Status::ok(); } -Status StatsService::informOnePackage(const String16& app, int32_t uid, int64_t version) { +Status StatsService::informOnePackage(const String16& app, int32_t uid, int64_t version, + const String16& version_string, const String16& installer) { ENFORCE_UID(AID_SYSTEM); VLOG("StatsService::informOnePackage was called"); - mUidMap->updateApp(getElapsedRealtimeNs(), app, uid, version); + mUidMap->updateApp(getElapsedRealtimeNs(), app, uid, version, version_string, installer); return Status::ok(); } @@ -888,7 +928,7 @@ Status StatsService::getData(int64_t key, const String16& packageName, vectorgetCallingPid(), ipc->getCallingUid()); ConfigKey configKey(ipc->getCallingUid(), key); mProcessor->onDumpReport(configKey, getElapsedRealtimeNs(), false /* include_current_bucket*/, - GET_DATA_CALLED, output); + true /* erase_data */, GET_DATA_CALLED, output); return Status::ok(); } diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index cbf34292c1d49a82d54cabe3d7ad5a47adb938cd..cd4d601a606fa322eec8743559d52a84a75f73f6 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -73,8 +73,10 @@ public: virtual Status informAlarmForSubscriberTriggeringFired(); virtual Status informAllUidData(const vector& uid, const vector& version, - const vector& app); - virtual Status informOnePackage(const String16& app, int32_t uid, int64_t version); + const vector& version_string, + const vector& app, const vector& installer); + virtual Status informOnePackage(const String16& app, int32_t uid, int64_t version, + const String16& version_string, const String16& installer); virtual Status informOnePackageRemoved(const String16& app, int32_t uid); virtual Status informDeviceShutdown(); @@ -213,9 +215,14 @@ private: uint32_t serial); /** - * Text or proto output of dumpsys. + * Proto output of statsd report data dumpsys, wrapped in a StatsDataDumpProto. */ - void dump_impl(int outFd, bool verbose, bool proto); + void dumpIncidentSection(int outFd); + + /** + * Text or proto output of statsdStats dumpsys. + */ + void dumpStatsdStats(int outFd, bool verbose, bool proto); /** * Print usage information for the commands @@ -240,7 +247,7 @@ private: /** * Print the event log. */ - status_t cmd_dump_report(int outFd, int err, const Vector& args); + status_t cmd_dump_report(int outFd, const Vector& args); /** * Print the mapping of uids to package names. diff --git a/cmds/statsd/src/atom_field_options.proto b/cmds/statsd/src/atom_field_options.proto index 453bf7e126cde0d7a722bfc9ae26b5993bbd099b..e33bd8c97a079e392b5cd6499d8d9fc05aab8c75 100644 --- a/cmds/statsd/src/atom_field_options.proto +++ b/cmds/statsd/src/atom_field_options.proto @@ -64,10 +64,22 @@ message StateAtomFieldOption { optional StateField option = 1 [default = STATE_FIELD_UNSET]; } +// Used to generate StatsLog.write APIs. +enum LogMode { + MODE_UNSET = 0; + // Log fields as their actual types e.g., all primary data types. + // Or fields that are hardcoded in stats_log_api_gen tool e.g., AttributionNode + MODE_AUTOMATIC = 1; + // Log fields in their proto binary format. These fields will not be parsed in statsd + MODE_BYTES = 2; +} + extend google.protobuf.FieldOptions { // Flags to decorate an atom that presents a state change. optional StateAtomFieldOption state_field_option = 50000; // Flags to decorate the uid fields in an atom. optional bool is_uid = 50001 [default = false]; + + optional LogMode log_mode = 50002 [default = MODE_AUTOMATIC]; } \ No newline at end of file diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 10ad1208d20d5fa6a4690d7aaac8bbdafac77f78..9757f32b25ef8709061c2498a69a03b54dae1ecd 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -22,12 +22,15 @@ option java_outer_classname = "AtomsProto"; import "frameworks/base/cmds/statsd/src/atom_field_options.proto"; import "frameworks/base/core/proto/android/app/enums.proto"; +import "frameworks/base/core/proto/android/app/settings_enums.proto"; import "frameworks/base/core/proto/android/app/job/enums.proto"; import "frameworks/base/core/proto/android/bluetooth/enums.proto"; import "frameworks/base/core/proto/android/os/enums.proto"; import "frameworks/base/core/proto/android/server/enums.proto"; +import "frameworks/base/core/proto/android/server/location/enums.proto"; import "frameworks/base/core/proto/android/service/procstats_enum.proto"; import "frameworks/base/core/proto/android/stats/enums.proto"; +import "frameworks/base/core/proto/android/stats/launcher/launcher.proto"; import "frameworks/base/core/proto/android/telecomm/enums.proto"; import "frameworks/base/core/proto/android/telephony/enums.proto"; import "frameworks/base/core/proto/android/view/enums.proto"; @@ -66,7 +69,7 @@ message Atom { ExcessiveCpuUsageReported excessive_cpu_usage_reported = 16; CachedKillReported cached_kill_reported = 17; ProcessMemoryStatReported process_memory_stat_reported = 18; - // 19 is available + LauncherUIChanged launcher_event = 19; BatterySaverModeStateChanged battery_saver_mode_state_changed = 20; DeviceIdleModeStateChanged device_idle_mode_state_changed = 21; DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22; @@ -116,7 +119,7 @@ message Atom { ResourceConfigurationChanged resource_configuration_changed = 66; BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67; BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68; - // 69 is blank but need not be. + GpsSignalQualityChanged gps_signal_quality_changed = 69; UsbConnectorStateChanged usb_connector_state_changed = 70; SpeakerImpedanceReported speaker_impedance_reported = 71; HardwareFailed hardware_failed = 72; @@ -143,10 +146,20 @@ message Atom { BatteryCausedShutdown battery_caused_shutdown = 93; PhoneServiceStateChanged phone_service_state_changed = 94; PhoneStateChanged phone_state_changed = 95; + UserRestrictionChanged user_restriction_changed = 96; + SettingsUIChanged settings_ui_changed = 97; + ConnectivityStateChanged connectivity_state_changed = 98; + // TODO: service state change is very noisy shortly after boot, as well + // as at other transitions - coming out of doze, device plugged in, etc. + // Consider removing this if it becomes a problem + ServiceStateChanged service_state_changed = 99; + ServiceLaunchReported service_launch_reported = 100; + PhenotypeFlagStateChanged phenotype_flag_state_changed = 101; + BinaryPushStateChanged binary_push_state_changed = 102; } // Pulled events will start at field 10000. - // Next: 10037 + // Next: 10038 oneof pulled { WifiBytesTransfer wifi_bytes_transfer = 10000; WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001; @@ -185,6 +198,11 @@ message Atom { ProcStats proc_stats_pkg_proc = 10034; ProcessCpuTime process_cpu_time = 10035; NativeProcessMemoryState native_process_memory_state = 10036; + CpuTimePerThreadFreq cpu_time_per_thread_freq = 10037; + OnDevicePowerMeasurement on_device_power_measurement = 10038; + DeviceCalculatedPowerUse device_calculated_power_use = 10039; + DeviceCalculatedPowerBlameUid device_calculated_power_blame_uid = 10040; + DeviceCalculatedPowerBlameOther device_calculated_power_blame_other = 10041; } // DO NOT USE field numbers above 100,000 in AOSP. @@ -479,7 +497,6 @@ message SensorStateChanged { optional State state = 3; } - /** * Logs when GPS state changes. * @@ -496,6 +513,16 @@ message GpsScanStateChanged { optional State state = 2; } +/** + * Logs when GPS signal quality. + * + * Logged from: + * /frameworks/base/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java + */ +message GpsSignalQualityChanged { + optional android.server.location.GpsSignalQualityEnum level = 1; +} + /** * Logs when a sync manager sync state changes. @@ -1436,6 +1463,48 @@ message PhoneStateChanged { optional State state = 1; } +message LauncherUIChanged { + optional android.stats.launcher.LauncherAction action = 1; + optional android.stats.launcher.LauncherState src_state = 2; + optional android.stats.launcher.LauncherState dst_state = 3; + optional android.stats.launcher.LauncherExtension extension = 4 [(log_mode) = MODE_BYTES]; + optional bool is_swipe_up_enabled = 5; +} + +/** + * Logs when Settings UI has changed. + * + * Logged from: + * packages/apps/Settings + */ +message SettingsUIChanged { + /** + * Where this SettingsUIChange event comes from. For example, if + * it's a PAGE_VISIBLE event, where the page is opened from. + */ + optional android.app.settings.PageId attribution = 1; + + /** + * What the UI action is. + */ + optional android.app.settings.Action action = 2; + + /** + * Where the action is happening + */ + optional android.app.settings.PageId pageId = 3; + + /** + * What preference changed in this event. + */ + optional string changedPreferenceKey = 4; + + /** + * The new value of the changed preference. + */ + optional int64 changedPreferenceIntValue = 5; +} + /** * Logs that a setting was updated. * Logged from: @@ -2051,27 +2120,124 @@ message Notification { optional int32 importance = 7; // ID for the notification channel. - optional int32 channel_id = 8; + optional string channel_id = 8; // Importance for the notification channel. optional int32 channel_importance = 9; + // Application-supplied ID associated with the notifications group. + optional string group_id = 10; + // Whether notification was a group summary. - optional bool group_summary = 10; + optional bool group_summary = 11; - // Time since notification was created in milliseconds. - optional int64 since_create_millis = 11; + // Reason for dismissal of a notification. This field is only meaningful for + // TYPE_DISMISS events. + optional int32 dismiss_reason = 12; - // Time since notification was interrupted in milliseconds. - optional int64 since_interruption_millis = 12; + // The first post time of notification, stable across updates. + optional int64 creation_millis = 13; - // Time since notification was updated in milliseconds. - optional int64 since_update_millis = 13; + // The most recent interruption time, or the creation time if no updates. + // Differs from update_millis because updates are filtered based on whether + // they actually interrupted the user. + optional int64 interruption_millis = 14; - // Time since notification was visible in milliseconds. - optional int64 since_visible_millis = 14; + // The most recent update time, or the creation time if no updates. + optional int64 update_millis = 15; + + // The most recent visibility event. + optional int64 visible_millis = 16; +} + +/* + * Logs when a flag flip state changes. + * Logged in P/h. + */ +message PhenotypeFlagStateChanged { + // Mendel configuration name. + optional string mendel_config_name = 1; + // State + enum State { + STATE_UNKNOWN = 0; + COMMITTED = 1; + } + optional State state = 2; +} + +/* + * Logs when a binary push state changes. + * Logged in Play store + */ +message BinaryPushStateChanged { + // Binary package name. + optional string binary_name = 1; + // Version code. + optional int64 version = 2; + // State + enum State { + STATE_UNKNOWN = 0; + DOWNLOAD_START = 1; + DOWNLOAD_DONE = 2; + INSTALL_START = 3; + INSTALL_DONE = 4; + REBOOT_START = 5; + REBOOT_DONE = 6; + } + optional State state = 3; +} + +/* + * Logs when a connection becomes available and lost. + * Logged in StatsCompanionService.java + */ +message ConnectivityStateChanged { + // Id of the network. + optional int32 net_id = 1; + + enum State { + UNKNOWN = 0; + CONNECTED = 1; + DISCONNECTED = 2; + } + // Connected state of a network. + optional State state = 2; } +/** + * Logs when a service starts and stops. + * Logged from: + * services/core/java/com/android/server/am/ActiveServices.java + */ +message ServiceStateChanged { + + optional int32 uid = 1 [(is_uid) = true]; + + optional string package_name = 2; + + optional string service_name = 3; + + enum State { + START = 1; + STOP = 2; + } + + optional State state = 4; +} + +/** + * Logs when a service is launched. + * Logged from: + * services/core/java/com/android/server/am/ActiveServices.java + */ +message ServiceLaunchReported { + + optional int32 uid = 1 [(is_uid) = true]; + + optional string package_name = 2; + + optional string service_name = 3; +} ////////////////////////////////////////////////////////////////////// // Pulled atoms below this line // @@ -2205,6 +2371,27 @@ message SubsystemSleepState { optional uint64 time_millis = 4; } +/** + * Pulls on-device power measurement information. + * Data defined by hardware/interfaces/power/stats/1.0/types.hal. + * Pulled from: + * frameworks/base/cmds/statsd/src/external/PowerStatsPuller.cpp + */ +message OnDevicePowerMeasurement { + // Name of the subsystem (to which the rail belongs). + optional string subsystem_name = 1; + + // Rail name. The rail lies within the subsystem. + optional string rail_name = 2; + + // Time (in ms since boot) at which the rail energy value was measured. + // This may differ slightly from the time that statsd logs this information. + optional uint64 measurement_timestamp_millis = 3; + + // Accumulated energy used via the rail since device boot in uWs. + optional uint64 energy_microwatt_secs = 4; +} + /** * Pulls Cpu time per frequency. * Pulls the time the cpu spend on the frequency index. Frequency index @@ -2343,31 +2530,38 @@ message ProcessMemoryState { // Peak RSS usage of the process. Value is read from the VmHWM field in /proc/PID/status or // from memory.max_usage_in_bytes under /dev/memcg if the device uses per-app memory cgroups. optional int64 rss_high_watermark_in_bytes = 9; + + // Elapsed real time when the process started. + // Value is read from /proc/PID/stat, field 22. 0 if read from per-app memory cgroups. + optional int64 start_time_nanos = 10; } /* * Logs the memory stats for a native process (from procfs). */ message NativeProcessMemoryState { - // The uid if available. -1 means not available. - optional int32 uid = 1 [(is_uid) = true]; + // The uid if available. -1 means not available. + optional int32 uid = 1 [(is_uid) = true]; - // The process name. - optional string process_name = 2; + // The process name. + optional string process_name = 2; - // # of page-faults - optional int64 page_fault = 3; + // # of page-faults + optional int64 page_fault = 3; - // # of major page-faults - optional int64 page_major_fault = 4; + // # of major page-faults + optional int64 page_major_fault = 4; + + // RSS + optional int64 rss_in_bytes = 5; - // RSS - optional int64 rss_in_bytes = 5; + // RSS high watermark. + // Peak RSS usage of the process. Value is read from the VmHWM field in /proc/PID/status. + optional int64 rss_high_watermark_in_bytes = 6; - // RSS high watermark. - // Peak RSS usage of the process. Value is read from the VmHWM field in /proc/PID/status or - // from memory.max_usage_in_bytes under /dev/memcg if the device uses per-app memory cgroups. - optional int64 rss_high_watermark_in_bytes = 6; + // Elapsed real time when the process started. + // Value is read from /proc/PID/stat, field 22. + optional int64 start_time_nanos = 7; } /* @@ -2481,10 +2675,17 @@ message Temperature { * Binder stats will be reset every time the data is pulled. It means it can only be pulled by one * config on the device. * - * Next tag: 14 + * Next tag: 15 */ message BinderCalls { + // UID of the process responsible for the binder transaction. It will be set if the process + // executing the binder transaction attribute the transaction to another uid using + // Binder.setThreadWorkSource(). + // + // If not set, the value will be -1. optional int32 uid = 1 [(is_uid) = true]; + // UID of the process executing the binder transaction. + optional int32 direct_caller_uid = 14; // Fully qualified class name of the API call. // // This is a system server class name. @@ -3034,6 +3235,20 @@ message PowerProfile { optional PowerProfileProto power_profile = 1; } +/** + * Logs when a user restriction was added or removed. + * + * Logged from: + * frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java + */ +message UserRestrictionChanged { + // The raw string of the user restriction as defined in UserManager. + // Allowed values are defined in UserRestrictionsUtils#USER_RESTRICTIONS. + optional string restriction = 1; + // Whether the restriction is enabled or disabled. + optional bool enabled = 2; +} + /** * Pulls process user time and system time. Puller takes a snapshot of all pids * in the system and returns cpu stats for those that are working at the time. @@ -3049,3 +3264,89 @@ message ProcessCpuTime { // Process cpu time in system space, cumulative from boot/process start optional int64 system_time_millis = 4; } + +/** + * Pulls the CPU usage for each thread. + * + * Read from /proc/$PID/task/$TID/time_in_state files. + * + * TODO(mishaw): This is an experimental atom. Issues with big/little CPU frequencies, and + * time_in_state files not being present on some phones, have not been addressed. These should be + * considered before a public release. + */ +message CpuTimePerThreadFreq { + // UID that owns the process. + optional int32 uid = 1 [(is_uid) = true]; + // ID of the process. + optional uint32 process_id = 2; + // ID of the thread. + optional uint32 thread_id = 3; + // Name of the process taken from `/proc/$PID/cmdline`. + optional string process_name = 4; + // Name of the thread taken from `/proc/$PID/task/$TID/comm` + optional string thread_name = 5; + // What frequency the CPU was running at, in KHz + optional uint32 frequency_khz = 6; + // Time spent in frequency in milliseconds, since thread start. + optional uint32 time_millis = 7; +} + +/** + * Pulls on-device BatteryStats power use calculations for the overall device. + */ +message DeviceCalculatedPowerUse { + // Power used by the device in mAh, as computed by BatteryStats, since BatteryStats last reset + // (i.e. roughly since device was last significantly charged). + // Currently, this is BatteryStatsHelper.getComputedPower() (not getTotalPower()). + optional float computed_power_milli_amp_hours = 1; +} + +/** + * Pulls on-device BatteryStats power use calculations broken down by uid. + * This atom should be complemented by DeviceCalculatedPowerBlameOther, which contains the power use + * that is attributed to non-uid items. They must all be included to get the total power use. + */ +message DeviceCalculatedPowerBlameUid { + // Uid being blamed. Note: isolated uids have already been mapped to host uid. + optional int32 uid = 1 [(is_uid) = true]; + + // Power used by this uid in mAh, as computed by BatteryStats, since BatteryStats last reset + // (i.e. roughly since device was last significantly charged). + optional float power_milli_amp_hours = 2; +} + +/** + * Pulls on-device BatteryStats power use calculations that are not due to a uid, broken down by + * drain type. + * This atom should be complemented by DeviceCalculatedPowerBlameUid, which contains the blame that + * is attributed uids. They must all be included to get the total power use. + */ +message DeviceCalculatedPowerBlameOther { + // The type of item whose power use is being reported. + enum DrainType { + AMBIENT_DISPLAY = 0; + // reserved 1; reserved "APP"; // Logged instead in DeviceCalculatedPowerBlameUid. + BLUETOOTH = 2; + CAMERA = 3; + // Cell-standby + CELL = 4; + FLASHLIGHT = 5; + IDLE = 6; + MEMORY = 7; + // Amount that total computed drain exceeded the drain estimated using the + // battery level changes and capacity. + OVERCOUNTED = 8; + PHONE = 9; + SCREEN = 10; + // Amount that total computed drain was below the drain estimated using the + // battery level changes and capacity. + UNACCOUNTED = 11; + // reserved 12; reserved "USER"; // Entire drain for a user. This is NOT supported. + WIFI = 13; + } + optional DrainType drain_type = 1; + + // Power used by this item in mAh, as computed by BatteryStats, since BatteryStats last reset + // (i.e. roughly since device was last significantly charged). + optional float power_milli_amp_hours = 2; +} \ No newline at end of file diff --git a/cmds/statsd/src/external/PowerStatsPuller.cpp b/cmds/statsd/src/external/PowerStatsPuller.cpp new file mode 100644 index 0000000000000000000000000000000000000000..71e5fa0c710d317b381ccd901abaaf3c118eb25f --- /dev/null +++ b/cmds/statsd/src/external/PowerStatsPuller.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define DEBUG false // STOPSHIP if true +#include "Log.h" + +#include + +#include + +#include "PowerStatsPuller.h" +#include "stats_log_util.h" + +using android::hardware::hidl_vec; +using android::hardware::power::stats::V1_0::IPowerStats; +using android::hardware::power::stats::V1_0::EnergyData; +using android::hardware::power::stats::V1_0::RailInfo; +using android::hardware::power::stats::V1_0::Status; +using android::hardware::Return; +using android::hardware::Void; + +using std::make_shared; +using std::shared_ptr; + +namespace android { +namespace os { +namespace statsd { + +sp gPowerStatsHal = nullptr; +std::mutex gPowerStatsHalMutex; +bool gPowerStatsExist = true; // Initialized to ensure making a first attempt. +std::vector gRailInfo; + +bool getPowerStatsHal() { + if (gPowerStatsHal == nullptr && gPowerStatsExist) { + gPowerStatsHal = android::hardware::power::stats::V1_0::IPowerStats::getService(); + if (gPowerStatsHal == nullptr) { + ALOGW("Couldn't load power.stats HAL service"); + gPowerStatsExist = false; + } + } + return gPowerStatsHal != nullptr; +} + +PowerStatsPuller::PowerStatsPuller() : StatsPuller(android::util::ON_DEVICE_POWER_MEASUREMENT) { +} + +bool PowerStatsPuller::PullInternal(vector>* data) { + std::lock_guard lock(gPowerStatsHalMutex); + + if (!getPowerStatsHal()) { + ALOGE("power.stats Hal not loaded"); + return false; + } + + int64_t wallClockTimestampNs = getWallClockNs(); + int64_t elapsedTimestampNs = getElapsedRealtimeNs(); + + data->clear(); + + // Pull getRailInfo if necessary + if (gRailInfo.empty()) { + bool resultSuccess = true; + Return ret = gPowerStatsHal->getRailInfo( + [&resultSuccess](const hidl_vec &list, Status status) { + resultSuccess = (status == Status::SUCCESS || status == Status::NOT_SUPPORTED); + if (status != Status::SUCCESS) return; + + gRailInfo.reserve(list.size()); + for (size_t i = 0; i < list.size(); ++i) { + gRailInfo.push_back(list[i]); + } + }); + if (!resultSuccess || !ret.isOk()) { + ALOGE("power.stats getRailInfo() failed. Description: %s", ret.description().c_str()); + gPowerStatsHal = nullptr; + return false; + } + // If SUCCESS but empty, or if NOT_SUPPORTED, then never try again. + if (gRailInfo.empty()) { + ALOGE("power.stats has no rail information"); + gPowerStatsExist = false; // No rail info, so never try again. + return false; + } + } + + // Pull getEnergyData and write the data out + const hidl_vec desiredRailIndices; // Empty vector indicates we want all. + bool resultSuccess = true; + Return ret = gPowerStatsHal->getEnergyData(desiredRailIndices, + [&data, wallClockTimestampNs, elapsedTimestampNs, &resultSuccess] + (hidl_vec energyDataList, Status status) { + resultSuccess = (status == Status::SUCCESS); + if (!resultSuccess) return; + + for (size_t i = 0; i < energyDataList.size(); i++) { + const EnergyData& energyData = energyDataList[i]; + + if (energyData.index >= gRailInfo.size()) { + ALOGE("power.stats getEnergyData() returned an invalid rail index %u.", + energyData.index); + resultSuccess = false; + return; + } + const RailInfo& rail = gRailInfo[energyData.index]; + + auto ptr = make_shared(android::util::ON_DEVICE_POWER_MEASUREMENT, + wallClockTimestampNs, elapsedTimestampNs); + ptr->write(rail.subsysName); + ptr->write(rail.railName); + ptr->write(energyData.timestamp); + ptr->write(energyData.energy); + ptr->init(); + data->push_back(ptr); + + VLOG("power.stat: %s.%s: %llu, %llu", + rail.subsysName.c_str(), + rail.railName.c_str(), + (unsigned long long)energyData.timestamp, + (unsigned long long)energyData.energy); + } + }); + if (!resultSuccess || !ret.isOk()) { + ALOGE("power.stats getEnergyData() failed. Description: %s", ret.description().c_str()); + gPowerStatsHal = nullptr; + return false; + } + return true; +} + +} // namespace statsd +} // namespace os +} // namespace android diff --git a/cmds/statsd/src/external/PowerStatsPuller.h b/cmds/statsd/src/external/PowerStatsPuller.h new file mode 100644 index 0000000000000000000000000000000000000000..dd5ff8fe08d0faf704ea309ad0b3d27786c02c17 --- /dev/null +++ b/cmds/statsd/src/external/PowerStatsPuller.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "StatsPuller.h" + +namespace android { +namespace os { +namespace statsd { + +/** + * Reads hal for power.stats + */ +class PowerStatsPuller : public StatsPuller { +public: + PowerStatsPuller(); + bool PullInternal(vector>* data) override; +}; + +} // namespace statsd +} // namespace os +} // namespace android diff --git a/cmds/statsd/src/external/StatsPuller.cpp b/cmds/statsd/src/external/StatsPuller.cpp index 436a8801896ff92264fd38bde755f86ae92f6929..e3f251a5263d2f2097bcf5b62fab403e10342aca 100644 --- a/cmds/statsd/src/external/StatsPuller.cpp +++ b/cmds/statsd/src/external/StatsPuller.cpp @@ -46,6 +46,7 @@ bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector elapsedTimeNs - mLastPullTimeNs) { @@ -55,7 +56,9 @@ bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector& data : mCachedData) { data->setElapsedTimestampNs(elapsedTimeNs); data->setLogdWallClockTimestampNs(wallClockTimeNs); @@ -64,6 +67,7 @@ bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector StatsPullerManager::kAllPullAtomInfo = { // subsystem_sleep_state {android::util::SUBSYSTEM_SLEEP_STATE, {{}, {}, 1 * NS_PER_SEC, new SubsystemSleepStatePuller()}}, + // on_device_power_measurement + {android::util::ON_DEVICE_POWER_MEASUREMENT, + {{}, {}, 1 * NS_PER_SEC, new PowerStatsPuller()}}, // cpu_time_per_freq {android::util::CPU_TIME_PER_FREQ, {{3}, @@ -167,13 +171,13 @@ const std::map StatsPullerManager::kAllPullAtomInfo = { // process_memory_state {android::util::PROCESS_MEMORY_STATE, {{4, 5, 6, 7, 8, 9}, - {2, 3}, + {2, 3, 10}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_STATE)}}, // native_process_memory_state {android::util::NATIVE_PROCESS_MEMORY_STATE, {{3, 4, 5, 6}, - {2}, + {2, 7}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::NATIVE_PROCESS_MEMORY_STATE)}}, // temperature @@ -231,7 +235,28 @@ const std::map StatsPullerManager::kAllPullAtomInfo = { {{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::POWER_PROFILE)}}, // Process cpu stats. Min cool-down is 5 sec, inline with what AcitivityManagerService uses. {android::util::PROCESS_CPU_TIME, - {{}, {}, 5 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::PROCESS_CPU_TIME)}}, + {{} /* additive fields */, {} /* non additive fields */, + 5 * NS_PER_SEC /* min cool-down in seconds*/, + new StatsCompanionServicePuller(android::util::PROCESS_CPU_TIME)}}, + {android::util::CPU_TIME_PER_THREAD_FREQ, + {{7}, + {2, 3, 4, 5, 6}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_TIME_PER_THREAD_FREQ)}}, + // DeviceCalculatedPowerUse. + {android::util::DEVICE_CALCULATED_POWER_USE, + {{}, {}, 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::DEVICE_CALCULATED_POWER_USE)}}, + // DeviceCalculatedPowerBlameUid. + {android::util::DEVICE_CALCULATED_POWER_BLAME_UID, + {{}, {}, // BatteryStats already merged isolated with host ids so it's unnecessary here. + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::DEVICE_CALCULATED_POWER_BLAME_UID)}}, + // DeviceCalculatedPowerBlameOther. + {android::util::DEVICE_CALCULATED_POWER_BLAME_OTHER, + {{}, {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::DEVICE_CALCULATED_POWER_BLAME_OTHER)}}, }; StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp index bf0bfec9c08d9feda1b0b319ffd1901e40b05ef9..661768914c69af47d758d7462c663db126de1209 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.cpp +++ b/cmds/statsd/src/guardrail/StatsdStats.cpp @@ -47,11 +47,9 @@ const int FIELD_ID_CONFIG_STATS = 3; const int FIELD_ID_ATOM_STATS = 7; const int FIELD_ID_UIDMAP_STATS = 8; const int FIELD_ID_ANOMALY_ALARM_STATS = 9; -// const int FIELD_ID_PULLED_ATOM_STATS = 10; // The proto is written in stats_log_util.cpp -const int FIELD_ID_LOGGER_ERROR_STATS = 11; const int FIELD_ID_PERIODIC_ALARM_STATS = 12; -// const int FIELD_ID_LOG_LOSS_STATS = 14; const int FIELD_ID_SYSTEM_SERVER_RESTART = 15; +const int FIELD_ID_LOGGER_ERROR_STATS = 16; const int FIELD_ID_ATOM_STATS_TAG = 1; const int FIELD_ID_ATOM_STATS_COUNT = 2; @@ -59,8 +57,9 @@ const int FIELD_ID_ATOM_STATS_COUNT = 2; const int FIELD_ID_ANOMALY_ALARMS_REGISTERED = 1; const int FIELD_ID_PERIODIC_ALARMS_REGISTERED = 1; -const int FIELD_ID_LOGGER_STATS_TIME = 1; -const int FIELD_ID_LOGGER_STATS_ERROR_CODE = 2; +const int FIELD_ID_LOG_LOSS_STATS_TIME = 1; +const int FIELD_ID_LOG_LOSS_STATS_COUNT = 2; +const int FIELD_ID_LOG_LOSS_STATS_ERROR = 3; const int FIELD_ID_CONFIG_STATS_UID = 1; const int FIELD_ID_CONFIG_STATS_ID = 2; @@ -73,7 +72,8 @@ const int FIELD_ID_CONFIG_STATS_MATCHER_COUNT = 7; const int FIELD_ID_CONFIG_STATS_ALERT_COUNT = 8; const int FIELD_ID_CONFIG_STATS_VALID = 9; const int FIELD_ID_CONFIG_STATS_BROADCAST = 10; -const int FIELD_ID_CONFIG_STATS_DATA_DROP = 11; +const int FIELD_ID_CONFIG_STATS_DATA_DROP_TIME = 11; +const int FIELD_ID_CONFIG_STATS_DATA_DROP_BYTES = 21; const int FIELD_ID_CONFIG_STATS_DUMP_REPORT_TIME = 12; const int FIELD_ID_CONFIG_STATS_DUMP_REPORT_BYTES = 20; const int FIELD_ID_CONFIG_STATS_MATCHER_STATS = 13; @@ -180,12 +180,12 @@ void StatsdStats::noteConfigReset(const ConfigKey& key) { noteConfigResetInternalLocked(key); } -void StatsdStats::noteLogLost(int32_t wallClockTimeSec, int32_t count) { +void StatsdStats::noteLogLost(int32_t wallClockTimeSec, int32_t count, int32_t lastError) { lock_guard lock(mLock); if (mLogLossStats.size() == kMaxLoggerErrors) { mLogLossStats.pop_front(); } - mLogLossStats.push_back(std::make_pair(wallClockTimeSec, count)); + mLogLossStats.emplace_back(wallClockTimeSec, count, lastError); } void StatsdStats::noteBroadcastSent(const ConfigKey& key) { @@ -205,11 +205,11 @@ void StatsdStats::noteBroadcastSent(const ConfigKey& key, int32_t timeSec) { it->second->broadcast_sent_time_sec.push_back(timeSec); } -void StatsdStats::noteDataDropped(const ConfigKey& key) { - noteDataDropped(key, getWallClockSec()); +void StatsdStats::noteDataDropped(const ConfigKey& key, const size_t totalBytes) { + noteDataDropped(key, totalBytes, getWallClockSec()); } -void StatsdStats::noteDataDropped(const ConfigKey& key, int32_t timeSec) { +void StatsdStats::noteDataDropped(const ConfigKey& key, const size_t totalBytes, int32_t timeSec) { lock_guard lock(mLock); auto it = mConfigStats.find(key); if (it == mConfigStats.end()) { @@ -218,8 +218,10 @@ void StatsdStats::noteDataDropped(const ConfigKey& key, int32_t timeSec) { } if (it->second->data_drop_time_sec.size() == kMaxTimestampCount) { it->second->data_drop_time_sec.pop_front(); + it->second->data_drop_bytes.pop_front(); } it->second->data_drop_time_sec.push_back(timeSec); + it->second->data_drop_bytes.push_back(totalBytes); } void StatsdStats::noteMetricsReportSent(const ConfigKey& key, const size_t num_bytes) { @@ -332,7 +334,8 @@ void StatsdStats::noteRegisteredPeriodicAlarmChanged() { void StatsdStats::updateMinPullIntervalSec(int pullAtomId, long intervalSec) { lock_guard lock(mLock); - mPulledAtomStats[pullAtomId].minPullIntervalSec = intervalSec; + mPulledAtomStats[pullAtomId].minPullIntervalSec = + std::min(mPulledAtomStats[pullAtomId].minPullIntervalSec, intervalSec); } void StatsdStats::notePull(int pullAtomId) { @@ -345,6 +348,30 @@ void StatsdStats::notePullFromCache(int pullAtomId) { mPulledAtomStats[pullAtomId].totalPullFromCache++; } +void StatsdStats::notePullTime(int pullAtomId, int64_t pullTimeNs) { + lock_guard lock(mLock); + auto& pullStats = mPulledAtomStats[pullAtomId]; + pullStats.maxPullTimeNs = std::max(pullStats.maxPullTimeNs, pullTimeNs); + pullStats.avgPullTimeNs = (pullStats.avgPullTimeNs * pullStats.numPullTime + pullTimeNs) / + (pullStats.numPullTime + 1); + pullStats.numPullTime += 1; +} + +void StatsdStats::notePullDelay(int pullAtomId, int64_t pullDelayNs) { + lock_guard lock(mLock); + auto& pullStats = mPulledAtomStats[pullAtomId]; + pullStats.maxPullDelayNs = std::max(pullStats.maxPullDelayNs, pullDelayNs); + pullStats.avgPullDelayNs = + (pullStats.avgPullDelayNs * pullStats.numPullDelay + pullDelayNs) / + (pullStats.numPullDelay + 1); + pullStats.numPullDelay += 1; +} + +void StatsdStats::notePullDataError(int pullAtomId) { + lock_guard lock(mLock); + mPulledAtomStats[pullAtomId].dataError++; +} + void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) { lock_guard lock(mLock); @@ -382,6 +409,7 @@ void StatsdStats::resetInternalLocked() { for (auto& config : mConfigStats) { config.second->broadcast_sent_time_sec.clear(); config.second->data_drop_time_sec.clear(); + config.second->data_drop_bytes.clear(); config.second->dump_report_stats.clear(); config.second->annotations.clear(); config.second->matcher_stats.clear(); @@ -390,6 +418,17 @@ void StatsdStats::resetInternalLocked() { config.second->metric_dimension_in_condition_stats.clear(); config.second->alert_stats.clear(); } + for (auto& pullStats : mPulledAtomStats) { + pullStats.second.totalPull = 0; + pullStats.second.totalPullFromCache = 0; + pullStats.second.avgPullTimeNs = 0; + pullStats.second.maxPullTimeNs = 0; + pullStats.second.numPullTime = 0; + pullStats.second.avgPullDelayNs = 0; + pullStats.second.maxPullDelayNs = 0; + pullStats.second.numPullDelay = 0; + pullStats.second.dataError = 0; + } } string buildTimeString(int64_t timeSec) { @@ -421,8 +460,12 @@ void StatsdStats::dumpStats(int out) const { dprintf(out, "\tbroadcast time: %d\n", broadcastTime); } - for (const auto& dataDropTime : configStats->data_drop_time_sec) { - dprintf(out, "\tdata drop time: %d\n", dataDropTime); + auto dropTimePtr = configStats->data_drop_time_sec.begin(); + auto dropBytesPtr = configStats->data_drop_bytes.begin(); + for (int i = 0; i < (int)configStats->data_drop_time_sec.size(); + i++, dropTimePtr++, dropBytesPtr++) { + dprintf(out, "\tdata drop time: %d with size %lld", *dropTimePtr, + (long long)*dropBytesPtr); } } dprintf(out, "%lu Active Configs\n", (unsigned long)mConfigStats.size()); @@ -445,9 +488,13 @@ void StatsdStats::dumpStats(int out) const { (long long)broadcastTime); } - for (const auto& dataDropTime : configStats->data_drop_time_sec) { - dprintf(out, "\tdata drop time: %s(%lld)\n", buildTimeString(dataDropTime).c_str(), - (long long)dataDropTime); + auto dropTimePtr = configStats->data_drop_time_sec.begin(); + auto dropBytesPtr = configStats->data_drop_bytes.begin(); + for (int i = 0; i < (int)configStats->data_drop_time_sec.size(); + i++, dropTimePtr++, dropBytesPtr++) { + dprintf(out, "\tdata drop time: %s(%lld) with %lld bytes\n", + buildTimeString(*dropTimePtr).c_str(), (long long)*dropTimePtr, + (long long)*dropBytesPtr); } for (const auto& dump : configStats->dump_report_stats) { @@ -486,8 +533,14 @@ void StatsdStats::dumpStats(int out) const { dprintf(out, "********Pulled Atom stats***********\n"); for (const auto& pair : mPulledAtomStats) { - dprintf(out, "Atom %d->%ld, %ld, %ld\n", (int)pair.first, (long)pair.second.totalPull, - (long)pair.second.totalPullFromCache, (long)pair.second.minPullIntervalSec); + dprintf(out, + "Atom %d->(total pull)%ld, (pull from cache)%ld, (min pull interval)%ld, (average " + "pull time nanos)%lld, (max pull time nanos)%lld, (average pull delay nanos)%lld, " + "(max pull delay nanos)%lld, (data error)%ld\n", + (int)pair.first, (long)pair.second.totalPull, (long)pair.second.totalPullFromCache, + (long)pair.second.minPullIntervalSec, (long long)pair.second.avgPullTimeNs, + (long long)pair.second.maxPullTimeNs, (long long)pair.second.avgPullDelayNs, + (long long)pair.second.maxPullDelayNs, pair.second.dataError); } if (mAnomalyAlarmRegisteredStats > 0) { @@ -510,8 +563,8 @@ void StatsdStats::dumpStats(int out) const { } for (const auto& loss : mLogLossStats) { - dprintf(out, "Log loss: %lld (wall clock sec) - %d (count)\n", (long long)loss.first, - loss.second); + dprintf(out, "Log loss: %lld (wall clock sec) - %d (count) %d (last error)\n", + (long long)loss.mWallClockSec, loss.mCount, loss.mLastError); } } @@ -540,9 +593,15 @@ void addConfigStatsToProto(const ConfigStats& configStats, ProtoOutputStream* pr broadcast); } - for (const auto& drop : configStats.data_drop_time_sec) { - proto->write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_STATS_DATA_DROP | FIELD_COUNT_REPEATED, - drop); + for (const auto& drop_time : configStats.data_drop_time_sec) { + proto->write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_STATS_DATA_DROP_TIME | FIELD_COUNT_REPEATED, + drop_time); + } + + for (const auto& drop_bytes : configStats.data_drop_bytes) { + proto->write( + FIELD_TYPE_INT64 | FIELD_ID_CONFIG_STATS_DATA_DROP_BYTES | FIELD_COUNT_REPEATED, + (long long)drop_bytes); } for (const auto& dump : configStats.dump_report_stats) { @@ -660,13 +719,11 @@ void StatsdStats::dumpStats(std::vector* output, bool reset) { proto.end(uidMapToken); for (const auto& error : mLogLossStats) { - // The logger error stats are not used anymore since we move away from logd. - // Temporarily use this field to log the log loss timestamp and count - // TODO(b/80538532) Add a dedicated field in stats_log for this. uint64_t token = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_LOGGER_ERROR_STATS | FIELD_COUNT_REPEATED); - proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_TIME, error.first); - proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_ERROR_CODE, error.second); + proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_TIME, error.mWallClockSec); + proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_COUNT, error.mCount); + proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOG_LOSS_STATS_ERROR, error.mLastError); proto.end(token); } diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index a8188c89928a0555588d613a3d720577003a05f9..343709a2a1eb39e90118571ece17793e859d5bd3 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -43,6 +43,8 @@ struct ConfigStats { std::list broadcast_sent_time_sec; std::list data_drop_time_sec; + // Number of bytes dropped at corresponding time. + std::list data_drop_bytes; std::list> dump_report_stats; // Stores how many times a matcher have been matched. The map size is capped by kMaxConfigCount. @@ -169,7 +171,7 @@ public: /** * Report a config's metrics data has been dropped. */ - void noteDataDropped(const ConfigKey& key); + void noteDataDropped(const ConfigKey& key, const size_t totalBytes); /** * Report metrics data report has been sent. @@ -261,15 +263,38 @@ public: void setUidMapChanges(int changes); void setCurrentUidMapMemory(int bytes); - // Update minimum interval between pulls for an pulled atom + /* + * Updates minimum interval between pulls for an pulled atom. + */ void updateMinPullIntervalSec(int pullAtomId, long intervalSec); - // Notify pull request for an atom + /* + * Notes an atom is pulled. + */ void notePull(int pullAtomId); - // Notify pull request for an atom served from cached data + /* + * Notes an atom is served from puller cache. + */ void notePullFromCache(int pullAtomId); + /* + * Notify data error for pulled atom. + */ + void notePullDataError(int pullAtomId); + + /* + * Records time for actual pulling, not including those served from cache and not including + * statsd processing delays. + */ + void notePullTime(int pullAtomId, int64_t pullTimeNs); + + /* + * Records pull delay for a pulled atom, including those served from cache and including statsd + * processing delays. + */ + void notePullDelay(int pullAtomId, int64_t pullDelayNs); + /* * Records when system server restarts. */ @@ -278,7 +303,7 @@ public: /** * Records statsd skipped an event. */ - void noteLogLost(int32_t wallClockTimeSec, int32_t count); + void noteLogLost(int32_t wallClockTimeSec, int32_t count, int lastError); /** * Reset the historical stats. Including all stats in icebox, and the tracked stats about @@ -300,9 +325,16 @@ public: void dumpStats(int outFd) const; typedef struct { - long totalPull; - long totalPullFromCache; - long minPullIntervalSec; + long totalPull = 0; + long totalPullFromCache = 0; + long minPullIntervalSec = LONG_MAX; + int64_t avgPullTimeNs = 0; + int64_t maxPullTimeNs = 0; + long numPullTime = 0; + int64_t avgPullDelayNs = 0; + int64_t maxPullDelayNs = 0; + long numPullDelay = 0; + long dataError = 0; } PulledAtomStats; private: @@ -332,8 +364,18 @@ private: // Maps PullAtomId to its stats. The size is capped by the puller atom counts. std::map mPulledAtomStats; + struct LogLossStats { + LogLossStats(int32_t sec, int32_t count, int32_t error) + : mWallClockSec(sec), mCount(count), mLastError(error) { + } + int32_t mWallClockSec; + int32_t mCount; + // error code defined in linux/errno.h + int32_t mLastError; + }; + // Timestamps when we detect log loss, and the number of logs lost. - std::list> mLogLossStats; + std::list mLogLossStats; std::list mSystemServerRestartSec; @@ -350,7 +392,7 @@ private: void resetInternalLocked(); - void noteDataDropped(const ConfigKey& key, int32_t timeSec); + void noteDataDropped(const ConfigKey& key, const size_t totalBytes, int32_t timeSec); void noteMetricsReportSent(const ConfigKey& key, const size_t num_bytes, int32_t timeSec); @@ -366,6 +408,7 @@ private: FRIEND_TEST(StatsdStatsTest, TestTimestampThreshold); FRIEND_TEST(StatsdStatsTest, TestAnomalyMonitor); FRIEND_TEST(StatsdStatsTest, TestSystemServerCrash); + FRIEND_TEST(StatsdStatsTest, TestPullAtomStats); }; } // namespace statsd diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp index 4bbcfd5933661c774100cc4ae4b34a0816323845..625294ce5e49a85e5e3b74eac4bc8e8cf8c352f3 100644 --- a/cmds/statsd/src/logd/LogEvent.cpp +++ b/cmds/statsd/src/logd/LogEvent.cpp @@ -156,9 +156,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, FieldValue(Field(mTagId, getSimpleField(1)), Value(speakerImpedance.speakerLocation))); mValues.push_back( FieldValue(Field(mTagId, getSimpleField(2)), Value(speakerImpedance.milliOhms))); - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, @@ -173,9 +170,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, FieldValue(Field(mTagId, getSimpleField(2)), Value(hardwareFailed.hardwareLocation))); mValues.push_back( FieldValue(Field(mTagId, getSimpleField(3)), Value(int32_t(hardwareFailed.errorCode)))); - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, @@ -190,9 +184,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, FieldValue(Field(mTagId, getSimpleField(2)), Value(physicalDropDetected.accelPeak))); mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), Value(physicalDropDetected.freefallDuration))); - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, @@ -205,10 +196,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 1)), Value(chargeCycles.cycleBucket[i]))); } - - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, @@ -231,10 +218,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, Value(batteryHealthSnapshotArgs.resistanceMicroOhm))); mValues.push_back(FieldValue(Field(mTagId, getSimpleField(7)), Value(batteryHealthSnapshotArgs.levelPercent))); - - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, const SlowIo& slowIo) { @@ -247,10 +230,6 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, con FieldValue(Field(mTagId, getSimpleField(1)), Value(int32_t(slowIo.operation)))); pos[0]++; mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), Value(slowIo.count))); - - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, @@ -261,16 +240,14 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), Value(batteryCausedShutdown.voltageMicroV))); - - if (!mValues.empty()) { - mValues.back().mField.decorateLastPos(1); - } } -LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) { +LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) : LogEvent(tagId, timestampNs, 0) {} + +LogEvent::LogEvent(int32_t tagId, int64_t timestampNs, int32_t uid) { mLogdTimestampNs = timestampNs; mTagId = tagId; - mLogUid = 0; + mLogUid = uid; mContext = create_android_logger(1937006964); // the event tag shared by all stats logs if (mContext) { android_log_write_int64(mContext, timestampNs); @@ -344,7 +321,8 @@ bool LogEvent::write(float value) { return false; } -bool LogEvent::writeKeyValuePairs(const std::map& int_map, +bool LogEvent::writeKeyValuePairs(int32_t uid, + const std::map& int_map, const std::map& long_map, const std::map& string_map, const std::map& float_map) { @@ -352,6 +330,7 @@ bool LogEvent::writeKeyValuePairs(const std::map& int_map, if (android_log_write_list_begin(mContext) < 0) { return false; } + write(uid); for (const auto& itr : int_map) { if (android_log_write_list_begin(mContext) < 0) { return false; @@ -561,6 +540,10 @@ void LogEvent::init(android_log_context context) { } i++; } while ((elem.type != EVENT_TYPE_UNKNOWN) && !elem.complete); + if (isKeyValuePairAtom && mValues.size() > 0) { + mValues[0] = FieldValue(Field(android::util::KEY_VALUE_PAIRS_ATOM, getSimpleField(1)), + Value((int32_t)mLogUid)); + } } int64_t LogEvent::GetLong(size_t key, status_t* err) const { diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h index c7e2a8c5ca214eb1f961dc656c7576b98039b6a1..3d5b2abc7e3a12365ccf874e1b2c91e222c50f53 100644 --- a/cmds/statsd/src/logd/LogEvent.h +++ b/cmds/statsd/src/logd/LogEvent.h @@ -75,6 +75,9 @@ public: // For testing. The timestamp is used as both elapsed real time and logd timestamp. explicit LogEvent(int32_t tagId, int64_t timestampNs); + // For testing. The timestamp is used as both elapsed real time and logd timestamp. + explicit LogEvent(int32_t tagId, int64_t timestampNs, int32_t uid); + /** * Constructs a KeyValuePairsAtom LogEvent from value maps. */ @@ -147,7 +150,8 @@ public: bool write(float value); bool write(const std::vector& nodes); bool write(const AttributionNodeInternal& node); - bool writeKeyValuePairs(const std::map& int_map, + bool writeKeyValuePairs(int32_t uid, + const std::map& int_map, const std::map& long_map, const std::map& string_map, const std::map& float_map); diff --git a/cmds/statsd/src/main.cpp b/cmds/statsd/src/main.cpp index 6b8c12a893e8708a14156916dcf507e06ac9b8c8..eddc86eca798a83af873311c2bab823d0876e2f9 100644 --- a/cmds/statsd/src/main.cpp +++ b/cmds/statsd/src/main.cpp @@ -82,7 +82,9 @@ int main(int /*argc*/, char** /*argv*/) { // Create the service gStatsService = new StatsService(looper); - if (defaultServiceManager()->addService(String16("stats"), gStatsService) != 0) { + if (defaultServiceManager()->addService(String16("stats"), gStatsService, false, + IServiceManager::DUMP_FLAG_PRIORITY_NORMAL | IServiceManager::DUMP_FLAG_PROTO) + != 0) { ALOGE("Failed to add service as AIDL service"); return -1; } diff --git a/cmds/statsd/src/metrics/CountMetricProducer.cpp b/cmds/statsd/src/metrics/CountMetricProducer.cpp index bd94800a327d4ec060b04d6d2393ece8d2d04df6..5ca88142f1521f4d4a0f1caf733b081ab6cd7fb7 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.cpp +++ b/cmds/statsd/src/metrics/CountMetricProducer.cpp @@ -143,6 +143,7 @@ void CountMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) { void CountMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { if (include_current_partial_bucket) { @@ -230,7 +231,9 @@ void CountMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, protoOutput->end(protoToken); - mPastBuckets.clear(); + if (erase_data) { + mPastBuckets.clear(); + } } void CountMetricProducer::dropDataLocked(const int64_t dropTimeNs) { diff --git a/cmds/statsd/src/metrics/CountMetricProducer.h b/cmds/statsd/src/metrics/CountMetricProducer.h index 39d4ae2f36a5aaec283a2c4135c9e81858aa5727..1ac4426468d89494f3e0f988b47c9abe02ff4da3 100644 --- a/cmds/statsd/src/metrics/CountMetricProducer.h +++ b/cmds/statsd/src/metrics/CountMetricProducer.h @@ -56,6 +56,7 @@ private: void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) override; diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp index dd3402dae2f8a7f422d2b382ec394b2d834c1f27..35deffe5db97fa423414259328ff3614894a4d10 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp +++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp @@ -453,6 +453,7 @@ void DurationMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) { void DurationMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { if (include_current_partial_bucket) { @@ -541,7 +542,9 @@ void DurationMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } protoOutput->end(protoToken); - mPastBuckets.clear(); + if (erase_data) { + mPastBuckets.clear(); + } } void DurationMetricProducer::flushIfNeededLocked(const int64_t& eventTimeNs) { diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.h b/cmds/statsd/src/metrics/DurationMetricProducer.h index 12addb8727f158cc6cf1c4a1d1955354bfe81504..1b830a3f69f5c9d00c260b9b5c6d126a6856ea7f 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.h +++ b/cmds/statsd/src/metrics/DurationMetricProducer.h @@ -63,6 +63,7 @@ private: void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) override; diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp index afd8ec2212feeb383b165bd8cf423bc0dc4a9a5a..a18e406b74ca2b2c7d24c74b22271ec1061c29dc 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.cpp +++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp @@ -105,6 +105,7 @@ void EventMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) { void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { if (mProto->size() <= 0) { @@ -120,7 +121,9 @@ void EventMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, protoOutput->write(FIELD_TYPE_MESSAGE | FIELD_ID_EVENT_METRICS, reinterpret_cast(buffer.get()->data()), buffer.get()->size()); - mProto->clear(); + if (erase_data) { + mProto->clear(); + } } void EventMetricProducer::onConditionChangedLocked(const bool conditionMet, diff --git a/cmds/statsd/src/metrics/EventMetricProducer.h b/cmds/statsd/src/metrics/EventMetricProducer.h index 7f7aa37112552836edda4e1d37ff28fae3c73677..96adfdd487435d6d1509199e1413efc044134e17 100644 --- a/cmds/statsd/src/metrics/EventMetricProducer.h +++ b/cmds/statsd/src/metrics/EventMetricProducer.h @@ -47,6 +47,7 @@ private: void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) override; void clearPastBucketsLocked(const int64_t dumpTimeNs) override; diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index f5a16e96fdf5a0bb0e5b097850ff843f00fd7c1f..461ad28dc77f3e1c56a0dcdf6c183a578a1aa5c4 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -140,7 +140,7 @@ GaugeMetricProducer::GaugeMetricProducer(const ConfigKey& key, const GaugeMetric // Adjust start for partial bucket mCurrentBucketStartTimeNs = startTimeNs; - if (mIsPulled) { + if (mIsPulled && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) { pullAndMatchEventsLocked(startTimeNs); } @@ -182,6 +182,7 @@ void GaugeMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) { void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { VLOG("Gauge metric %lld report now...", (long long)mMetricId); @@ -226,7 +227,6 @@ void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, (long long)(NanoToMillis(pair.second))); protoOutput->end(wrapperToken); } - mSkippedBuckets.clear(); for (const auto& pair : mPastBuckets) { const MetricDimensionKey& dimensionKey = pair.first; @@ -304,7 +304,11 @@ void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } protoOutput->end(protoToken); - mPastBuckets.clear(); + + if (erase_data) { + mPastBuckets.clear(); + mSkippedBuckets.clear(); + } } void GaugeMetricProducer::pullAndMatchEventsLocked(const int64_t timestampNs) { diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h index 99827bb2ad2d687b07c9116c380ff8384a01b710..6e3530b0daf41bfb5cd3c049532280a601403d46 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.h +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h @@ -80,7 +80,7 @@ public: } flushCurrentBucketLocked(eventTimeNs); mCurrentBucketStartTimeNs = eventTimeNs; - if (mIsPulled) { + if (mIsPulled && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) { pullAndMatchEventsLocked(eventTimeNs); } }; @@ -94,6 +94,7 @@ protected: private: void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) override; void clearPastBucketsLocked(const int64_t dumpTimeNs) override; diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h index b21fd501c2d02319d4a62ae20d270cf800fc54fa..127cbbde1a3af66a0fde847287eb654418b38917 100644 --- a/cmds/statsd/src/metrics/MetricProducer.h +++ b/cmds/statsd/src/metrics/MetricProducer.h @@ -133,10 +133,12 @@ public: // This method clears all the past buckets. void onDumpReport(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) { std::lock_guard lock(mMutex); - return onDumpReportLocked(dumpTimeNs, include_current_partial_bucket, str_set, protoOutput); + return onDumpReportLocked(dumpTimeNs, include_current_partial_bucket, erase_data, + str_set, protoOutput); } void clearPastBuckets(const int64_t dumpTimeNs) { @@ -210,6 +212,7 @@ protected: const int64_t eventTime) = 0; virtual void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) = 0; virtual void clearPastBucketsLocked(const int64_t dumpTimeNs) = 0; diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index f85ba1f93e8c76189fffbb3075030c749792b258..ac34f4760a12b84d6dd409c52f8a83cb8d0f4eda 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -77,6 +77,8 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config, mActivationAtomTrackerToMetricMap, mMetricIndexesWithActivation, mNoReportMetricIds); mHashStringsInReport = config.hash_strings_in_metric_report(); + mVersionStringsInReport = config.version_strings_in_metric_report(); + mInstallerInReport = config.installer_in_metric_report(); if (config.allowed_log_source_size() == 0) { mConfigValid = false; @@ -197,6 +199,7 @@ void MetricsManager::dropData(const int64_t dropTimeNs) { void MetricsManager::onDumpReport(const int64_t dumpTimeStampNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { VLOG("=========================Metric Reports Start=========================="); @@ -206,11 +209,11 @@ void MetricsManager::onDumpReport(const int64_t dumpTimeStampNs, uint64_t token = protoOutput->start( FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_METRICS); if (mHashStringsInReport) { - producer->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, str_set, - protoOutput); + producer->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, erase_data, + str_set, protoOutput); } else { - producer->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, nullptr, - protoOutput); + producer->onDumpReport(dumpTimeStampNs, include_current_partial_bucket, erase_data, + nullptr, protoOutput); } protoOutput->end(token); } else { diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h index 649222ffef9d43e8fa3e151e8c3671c3de2ece56..a31efbd3c8a682a4a7c488425e270a58e6f6bfbe 100644 --- a/cmds/statsd/src/metrics/MetricsManager.h +++ b/cmds/statsd/src/metrics/MetricsManager.h @@ -83,6 +83,14 @@ public: return mHashStringsInReport; }; + inline bool versionStringsInReport() const { + return mVersionStringsInReport; + }; + + inline bool installerInReport() const { + return mInstallerInReport; + }; + void refreshTtl(const int64_t currentTimestampNs) { if (mTtlNs > 0) { mTtlEndNs = currentTimestampNs + mTtlNs; @@ -107,6 +115,7 @@ public: virtual void onDumpReport(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput); @@ -125,6 +134,8 @@ private: bool mConfigValid = false; bool mHashStringsInReport = false; + bool mVersionStringsInReport = false; + bool mInstallerInReport = false; const int64_t mTtlNs; int64_t mTtlEndNs; diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 192a54b7e0a38d020aa85cde739139f79f48a996..a34df8aabea2e5657d65d156dd57474d08960959 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -64,21 +64,29 @@ const int FIELD_ID_BUCKET_INFO = 3; const int FIELD_ID_DIMENSION_LEAF_IN_WHAT = 4; const int FIELD_ID_DIMENSION_LEAF_IN_CONDITION = 5; // for ValueBucketInfo -const int FIELD_ID_VALUE_LONG = 7; -const int FIELD_ID_VALUE_DOUBLE = 8; +const int FIELD_ID_VALUE_INDEX = 1; +const int FIELD_ID_VALUE_LONG = 2; +const int FIELD_ID_VALUE_DOUBLE = 3; +const int FIELD_ID_VALUES = 9; const int FIELD_ID_BUCKET_NUM = 4; const int FIELD_ID_START_BUCKET_ELAPSED_MILLIS = 5; const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6; // ValueMetric has a minimum bucket size of 10min so that we don't pull too frequently -ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric& metric, +ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, + const ValueMetric& metric, const int conditionIndex, - const sp& wizard, const int pullTagId, - const int64_t timeBaseNs, const int64_t startTimeNs, + const sp& conditionWizard, + const int whatMatcherIndex, + const sp& matcherWizard, + const int pullTagId, + const int64_t timeBaseNs, + const int64_t startTimeNs, const sp& pullerManager) - : MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, wizard), + : MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, conditionWizard), + mWhatMatcherIndex(whatMatcherIndex), + mEventMatcherWizard(matcherWizard), mPullerManager(pullerManager), - mValueField(metric.value_field()), mPullTagId(pullTagId), mIsPulled(pullTagId != -1), mMinBucketSizeNs(metric.min_bucket_size_nanos()), @@ -92,7 +100,9 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric : StatsdStats::kDimensionKeySizeHardLimit), mUseAbsoluteValueOnReset(metric.use_absolute_value_on_reset()), mAggregationType(metric.aggregation_type()), - mValueType(metric.aggregation_type() == ValueMetric::AVG ? DOUBLE : LONG) { + mUseDiff(metric.has_use_diff() ? metric.use_diff() : (mIsPulled ? true : false)), + mValueDirection(metric.value_direction()), + mSkipZeroDiffOutput(metric.skip_zero_diff_output()) { int64_t bucketSizeMills = 0; if (metric.has_bucket()) { bucketSizeMills = TimeUnitToBucketSizeInMillisGuardrailed(key.GetUid(), metric.bucket()); @@ -101,6 +111,9 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric } mBucketSizeNs = bucketSizeMills * 1000000; + + translateFieldMatcher(metric.value_field(), &mFieldMatchers); + if (metric.has_dimensions_in_what()) { translateFieldMatcher(metric.dimensions_in_what(), &mDimensionsInWhat); mContainANYPositionInDimensionsInWhat = HasPositionANY(metric.dimensions_in_what()); @@ -120,29 +133,27 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric } } - if (mValueField.child_size() > 0) { - mField = mValueField.child(0).field(); - } mConditionSliced = (metric.links().size() > 0) || (mDimensionsInCondition.size() > 0); mSliceByPositionALL = HasPositionALL(metric.dimensions_in_what()) || - HasPositionALL(metric.dimensions_in_condition()); + HasPositionALL(metric.dimensions_in_condition()); flushIfNeededLocked(startTimeNs); - // Kicks off the puller immediately. + if (mIsPulled) { mPullerManager->RegisterReceiver(mPullTagId, this, getCurrentBucketEndTimeNs(), mBucketSizeNs); } - // TODO: Only do this for partial buckets like first bucket. All other buckets should use + // Only do this for partial buckets like first bucket. All other buckets should use // flushIfNeeded to adjust start and end to bucket boundaries. // Adjust start for partial bucket mCurrentBucketStartTimeNs = startTimeNs; - if (mIsPulled) { - pullLocked(startTimeNs); + // Kicks off the puller immediately if condition is true and diff based. + if (mIsPulled && mCondition && mUseDiff) { + pullAndMatchEventsLocked(startTimeNs); } - VLOG("value metric %lld created. bucket size %lld start_time: %lld", - (long long)metric.id(), (long long)mBucketSizeNs, (long long)mTimeBaseNs); + VLOG("value metric %lld created. bucket size %lld start_time: %lld", (long long)metric.id(), + (long long)mBucketSizeNs, (long long)mTimeBaseNs); } ValueMetricProducer::~ValueMetricProducer() { @@ -170,6 +181,7 @@ void ValueMetricProducer::clearPastBucketsLocked(const int64_t dumpTimeNs) { void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, ProtoOutputStream* protoOutput) { VLOG("metric %lld dump report now...", (long long)mMetricId); @@ -187,14 +199,14 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, // Fills the dimension path if not slicing by ALL. if (!mSliceByPositionALL) { if (!mDimensionsInWhat.empty()) { - uint64_t dimenPathToken = protoOutput->start( - FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_PATH_IN_WHAT); + uint64_t dimenPathToken = + protoOutput->start(FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_PATH_IN_WHAT); writeDimensionPathToProto(mDimensionsInWhat, protoOutput); protoOutput->end(dimenPathToken); } if (!mDimensionsInCondition.empty()) { - uint64_t dimenPathToken = protoOutput->start( - FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_PATH_IN_CONDITION); + uint64_t dimenPathToken = + protoOutput->start(FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_PATH_IN_CONDITION); writeDimensionPathToProto(mDimensionsInCondition, protoOutput); protoOutput->end(dimenPathToken); } @@ -211,7 +223,6 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, (long long)(NanoToMillis(pair.second))); protoOutput->end(wrapperToken); } - mSkippedBuckets.clear(); for (const auto& pair : mPastBuckets) { const MetricDimensionKey& dimensionKey = pair.first; @@ -221,15 +232,15 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, // First fill dimension. if (mSliceByPositionALL) { - uint64_t dimensionToken = protoOutput->start( - FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_IN_WHAT); + uint64_t dimensionToken = + protoOutput->start(FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_IN_WHAT); writeDimensionToProto(dimensionKey.getDimensionKeyInWhat(), str_set, protoOutput); protoOutput->end(dimensionToken); if (dimensionKey.hasDimensionKeyInCondition()) { - uint64_t dimensionInConditionToken = protoOutput->start( - FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_IN_CONDITION); - writeDimensionToProto(dimensionKey.getDimensionKeyInCondition(), - str_set, protoOutput); + uint64_t dimensionInConditionToken = + protoOutput->start(FIELD_TYPE_MESSAGE | FIELD_ID_DIMENSION_IN_CONDITION); + writeDimensionToProto(dimensionKey.getDimensionKeyInCondition(), str_set, + protoOutput); protoOutput->end(dimensionInConditionToken); } } else { @@ -237,8 +248,8 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, FIELD_ID_DIMENSION_LEAF_IN_WHAT, str_set, protoOutput); if (dimensionKey.hasDimensionKeyInCondition()) { writeDimensionLeafNodesToProto(dimensionKey.getDimensionKeyInCondition(), - FIELD_ID_DIMENSION_LEAF_IN_CONDITION, - str_set, protoOutput); + FIELD_ID_DIMENSION_LEAF_IN_CONDITION, str_set, + protoOutput); } } @@ -256,28 +267,43 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_BUCKET_NUM, (long long)(getBucketNumFromEndTimeNs(bucket.mBucketEndNs))); } - if (mValueType == LONG) { - protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_VALUE_LONG, - (long long)bucket.mValueLong); - } else { - protoOutput->write(FIELD_TYPE_DOUBLE | FIELD_ID_VALUE_DOUBLE, bucket.mValueDouble); + for (int i = 0; i < (int)bucket.valueIndex.size(); i ++) { + int index = bucket.valueIndex[i]; + const Value& value = bucket.values[i]; + uint64_t valueToken = protoOutput->start( + FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_VALUES); + protoOutput->write(FIELD_TYPE_INT32 | FIELD_ID_VALUE_INDEX, + index); + if (value.getType() == LONG) { + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_VALUE_LONG, + (long long)value.long_value); + VLOG("\t bucket [%lld - %lld] value %d: %lld", (long long)bucket.mBucketStartNs, + (long long)bucket.mBucketEndNs, index, (long long)value.long_value); + } else if (value.getType() == DOUBLE) { + protoOutput->write(FIELD_TYPE_DOUBLE | FIELD_ID_VALUE_DOUBLE, + value.double_value); + VLOG("\t bucket [%lld - %lld] value %d: %.2f", (long long)bucket.mBucketStartNs, + (long long)bucket.mBucketEndNs, index, value.double_value); + } else { + VLOG("Wrong value type for ValueMetric output: %d", value.getType()); + } + protoOutput->end(valueToken); } protoOutput->end(bucketInfoToken); - VLOG("\t bucket [%lld - %lld] count: %lld, %.2f", (long long)bucket.mBucketStartNs, - (long long)bucket.mBucketEndNs, (long long)bucket.mValueLong, bucket.mValueDouble); } protoOutput->end(wrapperToken); } protoOutput->end(protoToken); VLOG("metric %lld dump report now...", (long long)mMetricId); - mPastBuckets.clear(); + if (erase_data) { + mPastBuckets.clear(); + mSkippedBuckets.clear(); + } } void ValueMetricProducer::onConditionChangedLocked(const bool condition, const int64_t eventTimeNs) { - mCondition = condition; - if (eventTimeNs < mCurrentBucketStartTimeNs) { VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTimeNs, (long long)mCurrentBucketStartTimeNs); @@ -286,49 +312,72 @@ void ValueMetricProducer::onConditionChangedLocked(const bool condition, flushIfNeededLocked(eventTimeNs); - if (mIsPulled) { - pullLocked(eventTimeNs); + // Pull on condition changes. + if (mIsPulled && (mCondition != condition)) { + pullAndMatchEventsLocked(eventTimeNs); } + + // when condition change from true to false, clear diff base + if (mUseDiff && mCondition && !condition) { + for (auto& slice : mCurrentSlicedBucket) { + for (auto& interval : slice.second) { + interval.hasBase = false; + } + } + } + + mCondition = condition; } -void ValueMetricProducer::pullLocked(const int64_t timestampNs) { +void ValueMetricProducer::pullAndMatchEventsLocked(const int64_t timestampNs) { vector> allData; if (mPullerManager->Pull(mPullTagId, timestampNs, &allData)) { if (allData.size() == 0) { return; } for (const auto& data : allData) { - onMatchedLogEventLocked(0, *data); + if (mEventMatcherWizard->matchLogEvent( + *data, mWhatMatcherIndex) == MatchingState::kMatched) { + onMatchedLogEventLocked(mWhatMatcherIndex, *data); + } } } } +int64_t ValueMetricProducer::calcPreviousBucketEndTime(const int64_t currentTimeNs) { + return mTimeBaseNs + ((currentTimeNs - mTimeBaseNs) / mBucketSizeNs) * mBucketSizeNs; +} + void ValueMetricProducer::onDataPulled(const std::vector>& allData) { std::lock_guard lock(mMutex); - - if (mCondition == true || mConditionTrackerIndex < 0) { + if (mCondition) { if (allData.size() == 0) { + VLOG("Data pulled is empty"); return; } // For scheduled pulled data, the effective event time is snap to the nearest - // bucket boundary to make bucket finalize. + // bucket end. In the case of waking up from a deep sleep state, we will + // attribute to the previous bucket end. If the sleep was long but not very long, we + // will be in the immediate next bucket. Previous bucket may get a larger number as + // we pull at a later time than real bucket end. + // If the sleep was very long, we skip more than one bucket before sleep. In this case, + // if the diff base will be cleared and this new data will serve as new diff base. int64_t realEventTime = allData.at(0)->GetElapsedTimestampNs(); - int64_t eventTime = mTimeBaseNs + - ((realEventTime - mTimeBaseNs) / mBucketSizeNs) * mBucketSizeNs; - - // close the end of the bucket - mCondition = false; - for (const auto& data : allData) { - data->setElapsedTimestampNs(eventTime - 1); - onMatchedLogEventLocked(0, *data); + int64_t bucketEndTime = calcPreviousBucketEndTime(realEventTime) - 1; + if (bucketEndTime < mCurrentBucketStartTimeNs) { + VLOG("Skip bucket end pull due to late arrival: %lld vs %lld", (long long)bucketEndTime, + (long long)mCurrentBucketStartTimeNs); + return; } - - // start a new bucket - mCondition = true; for (const auto& data : allData) { - data->setElapsedTimestampNs(eventTime); - onMatchedLogEventLocked(0, *data); + if (mEventMatcherWizard->matchLogEvent(*data, mWhatMatcherIndex) == + MatchingState::kMatched) { + data->setElapsedTimestampNs(bucketEndTime); + onMatchedLogEventLocked(mWhatMatcherIndex, *data); + } } + } else { + VLOG("No need to commit data on condition false."); } } @@ -341,10 +390,12 @@ void ValueMetricProducer::dumpStatesLocked(FILE* out, bool verbose) const { (unsigned long)mCurrentSlicedBucket.size()); if (verbose) { for (const auto& it : mCurrentSlicedBucket) { + for (const auto& interval : it.second) { fprintf(out, "\t(what)%s\t(condition)%s (value)%s\n", it.first.getDimensionKeyInWhat().toString().c_str(), it.first.getDimensionKeyInCondition().toString().c_str(), - it.second.value.toString().c_str()); + interval.value.toString().c_str()); + } } } } @@ -360,8 +411,8 @@ bool ValueMetricProducer::hitGuardRailLocked(const MetricDimensionKey& newKey) { StatsdStats::getInstance().noteMetricDimensionSize(mConfigKey, mMetricId, newTupleCount); // 2. Don't add more tuples, we are above the allowed threshold. Drop the data. if (newTupleCount > mDimensionHardLimit) { - ALOGE("ValueMetric %lld dropping data for dimension key %s", - (long long)mMetricId, newKey.toString().c_str()); + ALOGE("ValueMetric %lld dropping data for dimension key %s", (long long)mMetricId, + newKey.toString().c_str()); return true; } } @@ -369,31 +420,35 @@ bool ValueMetricProducer::hitGuardRailLocked(const MetricDimensionKey& newKey) { return false; } -const Value getDoubleOrLong(const Value& value) { - Value v; - switch (value.type) { - case INT: - v.setLong(value.int_value); - break; - case LONG: - v.setLong(value.long_value); - break; - case FLOAT: - v.setDouble(value.float_value); - break; - case DOUBLE: - v.setDouble(value.double_value); - break; - default: - break; - } - return v; +bool getDoubleOrLong(const LogEvent& event, const Matcher& matcher, Value& ret) { + for (const FieldValue& value : event.getValues()) { + if (value.mField.matches(matcher)) { + switch (value.mValue.type) { + case INT: + ret.setLong(value.mValue.int_value); + break; + case LONG: + ret.setLong(value.mValue.long_value); + break; + case FLOAT: + ret.setDouble(value.mValue.float_value); + break; + case DOUBLE: + ret.setDouble(value.mValue.double_value); + break; + default: + break; + } + return true; + } + } + return false; } -void ValueMetricProducer::onMatchedLogEventInternalLocked( - const size_t matcherIndex, const MetricDimensionKey& eventKey, - const ConditionKey& conditionKey, bool condition, - const LogEvent& event) { +void ValueMetricProducer::onMatchedLogEventInternalLocked(const size_t matcherIndex, + const MetricDimensionKey& eventKey, + const ConditionKey& conditionKey, + bool condition, const LogEvent& event) { int64_t eventTimeNs = event.GetElapsedTimestampNs(); if (eventTimeNs < mCurrentBucketStartTimeNs) { VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTimeNs, @@ -403,86 +458,101 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( flushIfNeededLocked(eventTimeNs); - if (hitGuardRailLocked(eventKey)) { + // For pulled data, we already check condition when we decide to pull or + // in onDataPulled. So take all of them. + // For pushed data, just check condition. + if (!(mIsPulled || condition)) { + VLOG("ValueMetric skip event because condition is false"); return; } - Interval& interval = mCurrentSlicedBucket[eventKey]; - if (mField > event.size()) { - VLOG("Failed to extract value field %d from atom %s. %d", mField, event.ToString().c_str(), - (int)event.size()); + if (hitGuardRailLocked(eventKey)) { return; } - Value value = getDoubleOrLong(event.getValues()[mField - 1].mValue); + vector& multiIntervals = mCurrentSlicedBucket[eventKey]; + if (multiIntervals.size() < mFieldMatchers.size()) { + VLOG("Resizing number of intervals to %d", (int)mFieldMatchers.size()); + multiIntervals.resize(mFieldMatchers.size()); + } - Value diff; - bool hasDiff = false; - if (mIsPulled) { - // Always require condition for pulled events. In the case of no condition, only pull - // on bucket boundaries, in which we fake condition changes. - if (mCondition == true) { - if (!interval.startUpdated) { - interval.start = value; - interval.startUpdated = true; - } else { - // Skip it if there is already value recorded for the start. Happens when puller - // takes too long to finish. In this case we take the previous value. - VLOG("Already recorded value for this dimension %s", eventKey.toString().c_str()); + for (int i = 0; i < (int)mFieldMatchers.size(); i++) { + const Matcher& matcher = mFieldMatchers[i]; + Interval& interval = multiIntervals[i]; + interval.valueIndex = i; + Value value; + if (!getDoubleOrLong(event, matcher, value)) { + VLOG("Failed to get value %d from event %s", i, event.ToString().c_str()); + return; + } + + if (mUseDiff) { + // no base. just update base and return. + if (!interval.hasBase) { + interval.base = value; + interval.hasBase = true; + return; } - } else { - // Generally we expect value to be monotonically increasing. - // If not, take absolute value or drop it, based on config. - if (interval.startUpdated) { - if (value >= interval.start) { - diff = (value - interval.start); - hasDiff = true; - } else { - if (mUseAbsoluteValueOnReset) { + Value diff; + switch (mValueDirection) { + case ValueMetric::INCREASING: + if (value >= interval.base) { + diff = value - interval.base; + } else if (mUseAbsoluteValueOnReset) { diff = value; - hasDiff = true; } else { - VLOG("Dropping data for atom %d, prev: %s, now: %s", mPullTagId, - interval.start.toString().c_str(), value.toString().c_str()); + VLOG("Unexpected decreasing value"); + StatsdStats::getInstance().notePullDataError(mPullTagId); + interval.base = value; + return; } - } - interval.startUpdated = false; - } else { - VLOG("No start for matching end %s", value.toString().c_str()); + break; + case ValueMetric::DECREASING: + if (interval.base >= value) { + diff = interval.base - value; + } else if (mUseAbsoluteValueOnReset) { + diff = value; + } else { + VLOG("Unexpected increasing value"); + StatsdStats::getInstance().notePullDataError(mPullTagId); + interval.base = value; + return; + } + break; + case ValueMetric::ANY: + diff = value - interval.base; + break; + default: + break; } + interval.base = value; + value = diff; } - } else { - // for pushed events, only aggregate when sliced condition is true - if (condition == true || mConditionTrackerIndex < 0) { - diff = value; - hasDiff = true; - } - } - if (hasDiff) { + if (interval.hasValue) { switch (mAggregationType) { case ValueMetric::SUM: - // for AVG, we add up and take average when flushing the bucket + // for AVG, we add up and take average when flushing the bucket case ValueMetric::AVG: - interval.value += diff; + interval.value += value; break; case ValueMetric::MIN: - interval.value = diff < interval.value ? diff : interval.value; + interval.value = std::min(value, interval.value); break; case ValueMetric::MAX: - interval.value = diff > interval.value ? diff : interval.value; + interval.value = std::max(value, interval.value); break; default: break; } } else { - interval.value = diff; + interval.value = value; interval.hasValue = true; } interval.sampleSize += 1; } // TODO: propgate proper values down stream when anomaly support doubles - long wholeBucketVal = interval.value.long_value; + long wholeBucketVal = multiIntervals[0].value.long_value; auto prev = mCurrentFullBucket.find(eventKey); if (prev != mCurrentFullBucket.end()) { wholeBucketVal += prev->second; @@ -509,6 +579,12 @@ void ValueMetricProducer::flushIfNeededLocked(const int64_t& eventTimeNs) { if (numBucketsForward > 1) { VLOG("Skipping forward %lld buckets", (long long)numBucketsForward); + // take base again in future good bucket. + for (auto& slice : mCurrentSlicedBucket) { + for (auto& interval : slice.second) { + interval.hasBase = false; + } + } } VLOG("metric %lld: new bucket start time: %lld", (long long)mMetricId, (long long)mCurrentBucketStartTimeNs); @@ -519,27 +595,38 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { (int)mCurrentSlicedBucket.size()); int64_t fullBucketEndTimeNs = getCurrentBucketEndTimeNs(); - ValueBucket info; - info.mBucketStartNs = mCurrentBucketStartTimeNs; - if (eventTimeNs < fullBucketEndTimeNs) { - info.mBucketEndNs = eventTimeNs; - } else { - info.mBucketEndNs = fullBucketEndTimeNs; - } + int64_t bucketEndTime = eventTimeNs < fullBucketEndTimeNs ? eventTimeNs : fullBucketEndTimeNs; - if (info.mBucketEndNs - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) { + if (bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) { // The current bucket is large enough to keep. for (const auto& slice : mCurrentSlicedBucket) { - if (slice.second.hasValue) { - info.mValueLong = slice.second.value.long_value; - info.mValueDouble = (double)slice.second.value.long_value / slice.second.sampleSize; - // it will auto create new vector of ValuebucketInfo if the key is not found. + ValueBucket bucket; + bucket.mBucketStartNs = mCurrentBucketStartTimeNs; + bucket.mBucketEndNs = bucketEndTime; + for (const auto& interval : slice.second) { + if (interval.hasValue) { + // skip the output if the diff is zero + if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) { + continue; + } + bucket.valueIndex.push_back(interval.valueIndex); + if (mAggregationType != ValueMetric::AVG) { + bucket.values.push_back(interval.value); + } else { + double sum = interval.value.type == LONG ? (double)interval.value.long_value + : interval.value.double_value; + bucket.values.push_back(Value((double)sum / interval.sampleSize)); + } + } + } + // it will auto create new vector of ValuebucketInfo if the key is not found. + if (bucket.valueIndex.size() > 0) { auto& bucketList = mPastBuckets[slice.first]; - bucketList.push_back(info); + bucketList.push_back(bucket); } } } else { - mSkippedBuckets.emplace_back(info.mBucketStartNs, info.mBucketEndNs); + mSkippedBuckets.emplace_back(mCurrentBucketStartTimeNs, bucketEndTime); } if (eventTimeNs > fullBucketEndTimeNs) { // If full bucket, send to anomaly tracker. @@ -547,7 +634,7 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { if (mCurrentFullBucket.size() > 0) { for (const auto& slice : mCurrentSlicedBucket) { // TODO: fix this when anomaly can accept double values - mCurrentFullBucket[slice.first] += slice.second.value.long_value; + mCurrentFullBucket[slice.first] += slice.second[0].value.long_value; } for (const auto& slice : mCurrentFullBucket) { for (auto& tracker : mAnomalyTrackers) { @@ -563,7 +650,7 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { for (auto& tracker : mAnomalyTrackers) { if (tracker != nullptr) { // TODO: fix this when anomaly can accept double values - tracker->addPastBucket(slice.first, slice.second.value.long_value, + tracker->addPastBucket(slice.first, slice.second[0].value.long_value, mCurrentBucketNum); } } @@ -573,12 +660,17 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { // Accumulate partial bucket. for (const auto& slice : mCurrentSlicedBucket) { // TODO: fix this when anomaly can accept double values - mCurrentFullBucket[slice.first] += slice.second.value.long_value; + mCurrentFullBucket[slice.first] += slice.second[0].value.long_value; } } // Reset counters - mCurrentSlicedBucket.clear(); + for (auto& slice : mCurrentSlicedBucket) { + for (auto& interval : slice.second) { + interval.hasValue = false; + interval.sampleSize = 0; + } + } } size_t ValueMetricProducer::byteSizeLocked() const { diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index b2f0b6ff4d78ba0919808264186fbf2ab3810522..c3912eebbc117e71c9fca370bb964f5d7a981c21 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -23,6 +23,7 @@ #include "../condition/ConditionTracker.h" #include "../external/PullDataReceiver.h" #include "../external/StatsPullerManager.h" +#include "../matchers/EventMatcherWizard.h" #include "../stats_log_util.h" #include "MetricProducer.h" #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h" @@ -34,14 +35,16 @@ namespace statsd { struct ValueBucket { int64_t mBucketStartNs; int64_t mBucketEndNs; - int64_t mValueLong; - double mValueDouble; + std::vector valueIndex; + std::vector values; }; class ValueMetricProducer : public virtual MetricProducer, public virtual PullDataReceiver { public: ValueMetricProducer(const ConfigKey& key, const ValueMetric& valueMetric, - const int conditionIndex, const sp& wizard, + const int conditionIndex, const sp& conditionWizard, + const int whatMatcherIndex, + const sp& matcherWizard, const int pullTagId, const int64_t timeBaseNs, const int64_t startTimeNs, const sp& pullerManager); @@ -54,35 +57,11 @@ public: void notifyAppUpgrade(const int64_t& eventTimeNs, const string& apk, const int uid, const int64_t version) override { std::lock_guard lock(mMutex); - - if (mIsPulled && (mCondition == true || mConditionTrackerIndex < 0)) { - vector> allData; - mPullerManager->Pull(mPullTagId, eventTimeNs, &allData); - if (allData.size() == 0) { - // This shouldn't happen since this valuemetric is not useful now. - } - - // Pretend the pulled data occurs right before the app upgrade event. - mCondition = false; - for (const auto& data : allData) { - data->setElapsedTimestampNs(eventTimeNs - 1); - onMatchedLogEventLocked(0, *data); - } - - flushCurrentBucketLocked(eventTimeNs); - mCurrentBucketStartTimeNs = eventTimeNs; - - mCondition = true; - for (const auto& data : allData) { - data->setElapsedTimestampNs(eventTimeNs); - onMatchedLogEventLocked(0, *data); - } - } else { - // For pushed value metric or pulled metric where condition is not true, - // we simply flush and reset the current bucket start. - flushCurrentBucketLocked(eventTimeNs); - mCurrentBucketStartTimeNs = eventTimeNs; + if (mIsPulled && mCondition) { + pullAndMatchEventsLocked(eventTimeNs - 1); } + flushCurrentBucketLocked(eventTimeNs); + mCurrentBucketStartTimeNs = eventTimeNs; }; protected: @@ -94,6 +73,7 @@ protected: private: void onDumpReportLocked(const int64_t dumpTimeNs, const bool include_current_partial_bucket, + const bool erase_data, std::set *str_set, android::util::ProtoOutputStream* protoOutput) override; void clearPastBucketsLocked(const int64_t dumpTimeNs) override; @@ -116,9 +96,17 @@ private: void dropDataLocked(const int64_t dropTimeNs) override; + // Calculate previous bucket end time based on current time. + int64_t calcPreviousBucketEndTime(const int64_t currentTimeNs); + + const int mWhatMatcherIndex; + + sp mEventMatcherWizard; + sp mPullerManager; - const FieldMatcher mValueField; + // Value fields for matching. + std::vector mFieldMatchers; // tagId for pulled data. -1 if this is not pulled const int mPullTagId; @@ -126,15 +114,14 @@ private: // if this is pulled metric const bool mIsPulled; - int mField; - - // internal state of a bucket. + // internal state of an ongoing aggregation bucket. typedef struct { - // Pulled data always come in pair of . This holds the value - // for start. The diff (end - start) is taken as the real value. - Value start; - // Whether the start data point is updated - bool startUpdated; + // Index in multi value aggregation. + int valueIndex; + // Holds current base value of the dimension. Take diff and update if necessary. + Value base; + // Whether there is a base to diff to. + bool hasBase; // Current value, depending on the aggregation type. Value value; // Number of samples collected. @@ -144,7 +131,7 @@ private: bool hasValue; } Interval; - std::unordered_map mCurrentSlicedBucket; + std::unordered_map> mCurrentSlicedBucket; std::unordered_map mCurrentFullBucket; @@ -159,7 +146,7 @@ private: // Util function to check whether the specified dimension hits the guardrail. bool hitGuardRailLocked(const MetricDimensionKey& newKey); - void pullLocked(const int64_t timestampNs); + void pullAndMatchEventsLocked(const int64_t timestampNs); static const size_t kBucketSize = sizeof(ValueBucket{}); @@ -171,9 +158,14 @@ private: const ValueMetric::AggregationType mAggregationType; - const Type mValueType; + const bool mUseDiff; + + const ValueMetric::ValueDirection mValueDirection; + + const bool mSkipZeroDiffOutput; FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsNoCondition); + FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering); FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset); FRIEND_TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset); FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition); @@ -186,13 +178,13 @@ private: FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition); FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition); FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2); - FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition3); FRIEND_TEST(ValueMetricProducerTest, TestPushedAggregateMin); FRIEND_TEST(ValueMetricProducerTest, TestPushedAggregateMax); FRIEND_TEST(ValueMetricProducerTest, TestPushedAggregateAvg); FRIEND_TEST(ValueMetricProducerTest, TestPushedAggregateSum); - FRIEND_TEST(ValueMetricProducerTest, TestPushedAggregateSumSliced); FRIEND_TEST(ValueMetricProducerTest, TestFirstBucket); + FRIEND_TEST(ValueMetricProducerTest, TestCalcPreviousBucketEndTime); + FRIEND_TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput); }; } // namespace statsd diff --git a/cmds/statsd/src/metrics/metrics_manager_util.cpp b/cmds/statsd/src/metrics/metrics_manager_util.cpp index 136ba074d589a0c636c73753fd3691a75f7526fc..47b037646325770f5e33b2b1a44dc1f0f99ab016 100644 --- a/cmds/statsd/src/metrics/metrics_manager_util.cpp +++ b/cmds/statsd/src/metrics/metrics_manager_util.cpp @@ -488,9 +488,9 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t } } - sp valueProducer = - new ValueMetricProducer(key, metric, conditionIndex, wizard, pullTagId, - timeBaseTimeNs, currentTimeNs, pullerManager); + sp valueProducer = new ValueMetricProducer( + key, metric, conditionIndex, wizard, trackerIndex, matcherWizard, pullTagId, + timeBaseTimeNs, currentTimeNs, pullerManager); allMetricProducers.push_back(valueProducer); } diff --git a/cmds/statsd/src/packages/UidMap.cpp b/cmds/statsd/src/packages/UidMap.cpp index 37a00673959c8d8da91a1091d9831f2094675b3b..59f3f0448e0e887cce2d1d730564aefd5a897bb7 100644 --- a/cmds/statsd/src/packages/UidMap.cpp +++ b/cmds/statsd/src/packages/UidMap.cpp @@ -49,6 +49,10 @@ const int FIELD_ID_SNAPSHOT_PACKAGE_VERSION = 2; const int FIELD_ID_SNAPSHOT_PACKAGE_UID = 3; const int FIELD_ID_SNAPSHOT_PACKAGE_DELETED = 4; const int FIELD_ID_SNAPSHOT_PACKAGE_NAME_HASH = 5; +const int FIELD_ID_SNAPSHOT_PACKAGE_VERSION_STRING = 6; +const int FIELD_ID_SNAPSHOT_PACKAGE_VERSION_STRING_HASH = 7; +const int FIELD_ID_SNAPSHOT_PACKAGE_INSTALLER = 8; +const int FIELD_ID_SNAPSHOT_PACKAGE_INSTALLER_HASH = 9; const int FIELD_ID_SNAPSHOT_TIMESTAMP = 1; const int FIELD_ID_SNAPSHOT_PACKAGE_INFO = 2; const int FIELD_ID_SNAPSHOTS = 1; @@ -60,6 +64,10 @@ const int FIELD_ID_CHANGE_UID = 4; const int FIELD_ID_CHANGE_NEW_VERSION = 5; const int FIELD_ID_CHANGE_PREV_VERSION = 6; const int FIELD_ID_CHANGE_PACKAGE_HASH = 7; +const int FIELD_ID_CHANGE_NEW_VERSION_STRING = 8; +const int FIELD_ID_CHANGE_PREV_VERSION_STRING = 9; +const int FIELD_ID_CHANGE_NEW_VERSION_STRING_HASH = 10; +const int FIELD_ID_CHANGE_PREV_VERSION_STRING_HASH = 11; UidMap::UidMap() : mBytesUsed(0) {} @@ -104,7 +112,8 @@ int64_t UidMap::getAppVersion(int uid, const string& packageName) const { } void UidMap::updateMap(const int64_t& timestamp, const vector& uid, - const vector& versionCode, const vector& packageName) { + const vector& versionCode, const vector& versionString, + const vector& packageName, const vector& installer) { vector> broadcastList; { lock_guard lock(mMutex); // Exclusively lock for updates. @@ -121,7 +130,9 @@ void UidMap::updateMap(const int64_t& timestamp, const vector& uid, mMap.clear(); for (size_t j = 0; j < uid.size(); j++) { string package = string(String8(packageName[j]).string()); - mMap[std::make_pair(uid[j], package)] = AppData(versionCode[j]); + mMap[std::make_pair(uid[j], package)] = + AppData(versionCode[j], string(String8(versionString[j]).string()), + string(String8(installer[j]).string())); } for (const auto& kv : deletedApps) { @@ -150,23 +161,30 @@ void UidMap::updateMap(const int64_t& timestamp, const vector& uid, } void UidMap::updateApp(const int64_t& timestamp, const String16& app_16, const int32_t& uid, - const int64_t& versionCode) { + const int64_t& versionCode, const String16& versionString, + const String16& installer) { vector> broadcastList; string appName = string(String8(app_16).string()); { lock_guard lock(mMutex); int32_t prevVersion = 0; + string prevVersionString = ""; + string newVersionString = string(String8(versionString).string()); bool found = false; auto it = mMap.find(std::make_pair(uid, appName)); if (it != mMap.end()) { found = true; prevVersion = it->second.versionCode; + prevVersionString = it->second.versionString; it->second.versionCode = versionCode; + it->second.versionString = newVersionString; + it->second.installer = string(String8(installer).string()); it->second.deleted = false; } if (!found) { // Otherwise, we need to add an app at this uid. - mMap[std::make_pair(uid, appName)] = AppData(versionCode); + mMap[std::make_pair(uid, appName)] = + AppData(versionCode, newVersionString, string(String8(installer).string())); } else { // Only notify the listeners if this is an app upgrade. If this app is being installed // for the first time, then we don't notify the listeners. @@ -174,7 +192,8 @@ void UidMap::updateApp(const int64_t& timestamp, const String16& app_16, const i // app after deletion. getListenerListCopyLocked(&broadcastList); } - mChanges.emplace_back(false, timestamp, appName, uid, versionCode, prevVersion); + mChanges.emplace_back(false, timestamp, appName, uid, versionCode, newVersionString, + prevVersion, prevVersionString); mBytesUsed += kBytesChangeRecord; ensureBytesUsedBelowLimit(); StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed); @@ -226,10 +245,12 @@ void UidMap::removeApp(const int64_t& timestamp, const String16& app_16, const i lock_guard lock(mMutex); int64_t prevVersion = 0; + string prevVersionString = ""; auto key = std::make_pair(uid, app); auto it = mMap.find(key); if (it != mMap.end() && !it->second.deleted) { prevVersion = it->second.versionCode; + prevVersionString = it->second.versionString; it->second.deleted = true; mDeletedApps.push_back(key); } @@ -240,7 +261,7 @@ void UidMap::removeApp(const int64_t& timestamp, const String16& app_16, const i mMap.erase(oldest); StatsdStats::getInstance().noteUidMapAppDeletionDropped(); } - mChanges.emplace_back(true, timestamp, app, uid, 0, prevVersion); + mChanges.emplace_back(true, timestamp, app, uid, 0, "", prevVersion, prevVersionString); mBytesUsed += kBytesChangeRecord; ensureBytesUsedBelowLimit(); StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed); @@ -315,8 +336,9 @@ size_t UidMap::getBytesUsed() const { return mBytesUsed; } -void UidMap::appendUidMap(const int64_t& timestamp, const ConfigKey& key, - std::set *str_set, ProtoOutputStream* proto) { +void UidMap::appendUidMap(const int64_t& timestamp, const ConfigKey& key, std::set* str_set, + bool includeVersionStrings, bool includeInstaller, + ProtoOutputStream* proto) { lock_guard lock(mMutex); // Lock for updates for (const ChangeRecord& record : mChanges) { @@ -330,8 +352,22 @@ void UidMap::appendUidMap(const int64_t& timestamp, const ConfigKey& key, str_set->insert(record.package); proto->write(FIELD_TYPE_UINT64 | FIELD_ID_CHANGE_PACKAGE_HASH, (long long)Hash64(record.package)); + if (includeVersionStrings) { + str_set->insert(record.versionString); + proto->write(FIELD_TYPE_UINT64 | FIELD_ID_CHANGE_NEW_VERSION_STRING_HASH, + (long long)Hash64(record.versionString)); + str_set->insert(record.prevVersionString); + proto->write(FIELD_TYPE_UINT64 | FIELD_ID_CHANGE_PREV_VERSION_STRING_HASH, + (long long)Hash64(record.prevVersionString)); + } } else { proto->write(FIELD_TYPE_STRING | FIELD_ID_CHANGE_PACKAGE, record.package); + if (includeVersionStrings) { + proto->write(FIELD_TYPE_STRING | FIELD_ID_CHANGE_NEW_VERSION_STRING, + record.versionString); + proto->write(FIELD_TYPE_STRING | FIELD_ID_CHANGE_PREV_VERSION_STRING, + record.prevVersionString); + } } proto->write(FIELD_TYPE_INT32 | FIELD_ID_CHANGE_UID, (int)record.uid); @@ -354,8 +390,26 @@ void UidMap::appendUidMap(const int64_t& timestamp, const ConfigKey& key, str_set->insert(kv.first.second); proto->write(FIELD_TYPE_UINT64 | FIELD_ID_SNAPSHOT_PACKAGE_NAME_HASH, (long long)Hash64(kv.first.second)); + if (includeVersionStrings) { + str_set->insert(kv.second.versionString); + proto->write(FIELD_TYPE_UINT64 | FIELD_ID_SNAPSHOT_PACKAGE_VERSION_STRING_HASH, + (long long)Hash64(kv.second.versionString)); + } + if (includeInstaller) { + str_set->insert(kv.second.installer); + proto->write(FIELD_TYPE_UINT64 | FIELD_ID_SNAPSHOT_PACKAGE_INSTALLER_HASH, + (long long)Hash64(kv.second.installer)); + } } else { proto->write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_NAME, kv.first.second); + if (includeVersionStrings) { + proto->write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_VERSION_STRING, + kv.second.versionString); + } + if (includeInstaller) { + proto->write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_INSTALLER, + kv.second.installer); + } } proto->write(FIELD_TYPE_INT64 | FIELD_ID_SNAPSHOT_PACKAGE_VERSION, @@ -391,8 +445,9 @@ void UidMap::printUidMap(int out) const { for (const auto& kv : mMap) { if (!kv.second.deleted) { - dprintf(out, "%s, v%" PRId64 " (%i)\n", kv.first.second.c_str(), kv.second.versionCode, - kv.first.first); + dprintf(out, "%s, v%" PRId64 ", %s, %s (%i)\n", kv.first.second.c_str(), + kv.second.versionCode, kv.second.versionString.c_str(), + kv.second.installer.c_str(), kv.first.first); } } } diff --git a/cmds/statsd/src/packages/UidMap.h b/cmds/statsd/src/packages/UidMap.h index 4598369f1222157999dec273432783537c9f3466..75ff507ef09a44944c9debf459aacc33b7c0c045 100644 --- a/cmds/statsd/src/packages/UidMap.h +++ b/cmds/statsd/src/packages/UidMap.h @@ -44,12 +44,16 @@ namespace statsd { struct AppData { int64_t versionCode; + string versionString; + string installer; bool deleted; // Empty constructor needed for unordered map. AppData() { } - AppData(const int64_t v) : versionCode(v), deleted(false){}; + + AppData(const int64_t v, const string& versionString, const string& installer) + : versionCode(v), versionString(versionString), installer(installer), deleted(false){}; }; // When calling appendUidMap, we retrieve all the ChangeRecords since the last @@ -61,15 +65,20 @@ struct ChangeRecord { const int32_t uid; const int64_t version; const int64_t prevVersion; + const string versionString; + const string prevVersionString; ChangeRecord(const bool isDeletion, const int64_t timestampNs, const string& package, - const int32_t uid, const int64_t version, const int64_t prevVersion) + const int32_t uid, const int64_t version, const string versionString, + const int64_t prevVersion, const string prevVersionString) : deletion(isDeletion), timestampNs(timestampNs), package(package), uid(uid), version(version), - prevVersion(prevVersion) { + prevVersion(prevVersion), + versionString(versionString), + prevVersionString(prevVersionString) { } }; @@ -87,10 +96,12 @@ public: * tuple, ie. uid[j] corresponds to packageName[j] with versionCode[j]. */ void updateMap(const int64_t& timestamp, const vector& uid, - const vector& versionCode, const vector& packageName); + const vector& versionCode, const vector& versionString, + const vector& packageName, const vector& installer); void updateApp(const int64_t& timestamp, const String16& packageName, const int32_t& uid, - const int64_t& versionCode); + const int64_t& versionCode, const String16& versionString, + const String16& installer); void removeApp(const int64_t& timestamp, const String16& packageName, const int32_t& uid); // Returns true if the given uid contains the specified app (eg. com.google.android.gms). @@ -127,8 +138,9 @@ public: // Gets all snapshots and changes that have occurred since the last output. // If every config key has received a change or snapshot record, then this // record is deleted. - void appendUidMap(const int64_t& timestamp, const ConfigKey& key, - std::set *str_set, util::ProtoOutputStream* proto); + void appendUidMap(const int64_t& timestamp, const ConfigKey& key, std::set* str_set, + bool includeVersionStrings, bool includeInstaller, + util::ProtoOutputStream* proto); // Forces the output to be cleared. We still generate a snapshot based on the current state. // This results in extra data uploaded but helps us reconstruct the uid mapping on the server diff --git a/cmds/statsd/src/socket/StatsSocketListener.cpp b/cmds/statsd/src/socket/StatsSocketListener.cpp index 9b0691b6092d02e91196c31a2b2354e4f2d58783..6bb8cda072815510f3ee082a5e71af215c20ec14 100755 --- a/cmds/statsd/src/socket/StatsSocketListener.cpp +++ b/cmds/statsd/src/socket/StatsSocketListener.cpp @@ -40,7 +40,6 @@ namespace os { namespace statsd { static const int kLogMsgHeaderSize = 28; -static const int kLibLogTag = 1006; StatsSocketListener::StatsSocketListener(const sp& listener) : SocketListener(getLogSocket(), false /*start listen*/), mListener(listener) { @@ -109,10 +108,11 @@ bool StatsSocketListener::onDataAvailable(SocketClient* cli) { // TODO(b/80538532): In addition to log it in StatsdStats, we should properly reset the config. if (n == sizeof(android_log_event_int_t)) { android_log_event_int_t* int_event = reinterpret_cast(ptr); - if (int_event->header.tag == kLibLogTag && int_event->payload.type == EVENT_TYPE_INT) { - ALOGE("Found dropped events: %d", int_event->payload.data); + if (int_event->payload.type == EVENT_TYPE_INT) { + ALOGE("Found dropped events: %d error %d", int_event->payload.data, + int_event->header.tag); StatsdStats::getInstance().noteLogLost((int32_t)getWallClockSec(), - int_event->payload.data); + int_event->payload.data, int_event->header.tag); return true; } } diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index 10ed7f3ebaa1ae83e16d18c5e6bed9f8953122d9..32ee5af9ee218251d532e886c662d4296090964c 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -108,12 +108,22 @@ message ValueBucketInfo { optional int64 value = 3 [deprecated = true]; - oneof values { - int64 value_long = 7; + oneof single_value { + int64 value_long = 7 [deprecated = true]; - double value_double = 8; + double value_double = 8 [deprecated = true]; } + message Value { + optional int32 index = 1; + oneof value { + int64 value_long = 2; + double value_double = 3; + } + } + + repeated Value values = 9; + optional int64 bucket_num = 4; optional int64 start_bucket_elapsed_millis = 5; @@ -223,6 +233,14 @@ message UidMapping { optional bool deleted = 4; optional uint64 name_hash = 5; + + optional string version_string = 6; + + optional uint64 version_string_hash = 7; + + optional string installer = 8; + + optional uint64 installer_hash = 9; } optional int64 elapsed_timestamp_nanos = 1; @@ -240,6 +258,10 @@ message UidMapping { optional int64 new_version = 5; optional int64 prev_version = 6; optional uint64 app_hash = 7; + optional string new_version_string = 8; + optional string prev_version_string = 9; + optional uint64 new_version_string_hash = 10; + optional uint64 prev_version_string_hash = 11; } repeated Change changes = 2; } @@ -328,6 +350,7 @@ message StatsdStatsReport { optional bool is_valid = 9; repeated int32 broadcast_sent_time_sec = 10; repeated int32 data_drop_time_sec = 11; + repeated int64 data_drop_bytes = 21; repeated int32 dump_report_time_sec = 12; repeated int32 dump_report_data_size = 20; repeated MatcherStats matcher_stats = 13; @@ -369,6 +392,11 @@ message StatsdStatsReport { optional int64 total_pull = 2; optional int64 total_pull_from_cache = 3; optional int64 min_pull_interval_sec = 4; + optional int64 average_pull_time_nanos = 5; + optional int64 max_pull_time_nanos = 6; + optional int64 average_pull_delay_nanos = 7; + optional int64 max_pull_delay_nanos = 8; + optional int64 data_error = 9; } repeated PulledAtomStats pulled_atom_stats = 10; @@ -392,4 +420,11 @@ message StatsdStatsReport { repeated int64 log_loss_stats = 14; repeated int32 system_restart_sec = 15; + + message LogLossStats { + optional int32 detected_time_sec = 1; + optional int32 count = 2; + optional int32 last_error = 3; + } + repeated LogLossStats detected_log_loss = 16; } diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp index 805e5833c1ebdd10b2c7dc0ef1f91c46454f2193..504c5864f2ec35d5d2beb582eb02ba85c592892a 100644 --- a/cmds/statsd/src/stats_log_util.cpp +++ b/cmds/statsd/src/stats_log_util.cpp @@ -25,15 +25,16 @@ #include #include +using android::util::AtomsInfo; using android::util::FIELD_COUNT_REPEATED; using android::util::FIELD_TYPE_BOOL; +using android::util::FIELD_TYPE_FIXED64; using android::util::FIELD_TYPE_FLOAT; using android::util::FIELD_TYPE_INT32; using android::util::FIELD_TYPE_INT64; -using android::util::FIELD_TYPE_UINT64; -using android::util::FIELD_TYPE_FIXED64; using android::util::FIELD_TYPE_MESSAGE; using android::util::FIELD_TYPE_STRING; +using android::util::FIELD_TYPE_UINT64; using android::util::ProtoOutputStream; namespace android { @@ -58,6 +59,11 @@ const int FIELD_ID_PULL_ATOM_ID = 1; const int FIELD_ID_TOTAL_PULL = 2; const int FIELD_ID_TOTAL_PULL_FROM_CACHE = 3; const int FIELD_ID_MIN_PULL_INTERVAL_SEC = 4; +const int FIELD_ID_AVERAGE_PULL_TIME_NANOS = 5; +const int FIELD_ID_MAX_PULL_TIME_NANOS = 6; +const int FIELD_ID_AVERAGE_PULL_DELAY_NANOS = 7; +const int FIELD_ID_MAX_PULL_DELAY_NANOS = 8; +const int FIELD_ID_DATA_ERROR = 9; namespace { @@ -294,8 +300,9 @@ void writeDimensionPathToProto(const std::vector& fieldMatchers, // } // // -void writeFieldValueTreeToStreamHelper(const std::vector& dims, size_t* index, - int depth, int prefix, ProtoOutputStream* protoOutput) { +void writeFieldValueTreeToStreamHelper(int tagId, const std::vector& dims, + size_t* index, int depth, int prefix, + ProtoOutputStream* protoOutput) { size_t count = dims.size(); while (*index < count) { const auto& dim = dims[*index]; @@ -319,9 +326,31 @@ void writeFieldValueTreeToStreamHelper(const std::vector& dims, size case FLOAT: protoOutput->write(FIELD_TYPE_FLOAT | fieldNum, dim.mValue.float_value); break; - case STRING: - protoOutput->write(FIELD_TYPE_STRING | fieldNum, dim.mValue.str_value); + case STRING: { + bool isBytesField = false; + // Bytes field is logged via string format in log_msg format. So here we check + // if this string field is a byte field. + std::map>::const_iterator itr; + if (depth == 0 && (itr = AtomsInfo::kBytesFieldAtoms.find(tagId)) != + AtomsInfo::kBytesFieldAtoms.end()) { + const std::vector& bytesFields = itr->second; + for (int bytesField : bytesFields) { + if (bytesField == fieldNum) { + // This is a bytes field + isBytesField = true; + break; + } + } + } + if (isBytesField) { + protoOutput->write(FIELD_TYPE_MESSAGE | fieldNum, + (const char*)dim.mValue.str_value.c_str(), + dim.mValue.str_value.length()); + } else { + protoOutput->write(FIELD_TYPE_STRING | fieldNum, dim.mValue.str_value); + } break; + } case STORAGE: protoOutput->write(FIELD_TYPE_MESSAGE | fieldNum, (const char*)dim.mValue.storage_value.data(), @@ -342,7 +371,7 @@ void writeFieldValueTreeToStreamHelper(const std::vector& dims, size } // Directly jump to the leaf value because the repeated position field is implied // by the position of the sub msg in the parent field. - writeFieldValueTreeToStreamHelper(dims, index, valueDepth, + writeFieldValueTreeToStreamHelper(tagId, dims, index, valueDepth, dim.mField.getPrefix(valueDepth), protoOutput); if (msg_token != 0) { protoOutput->end(msg_token); @@ -359,7 +388,7 @@ void writeFieldValueTreeToStream(int tagId, const std::vector& value uint64_t atomToken = protoOutput->start(FIELD_TYPE_MESSAGE | tagId); size_t index = 0; - writeFieldValueTreeToStreamHelper(values, &index, 0, 0, protoOutput); + writeFieldValueTreeToStreamHelper(tagId, values, &index, 0, 0, protoOutput); protoOutput->end(atomToken); } @@ -410,6 +439,15 @@ void writePullerStatsToStream(const std::pair (long long)pair.second.totalPullFromCache); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MIN_PULL_INTERVAL_SEC, (long long)pair.second.minPullIntervalSec); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_AVERAGE_PULL_TIME_NANOS, + (long long)pair.second.avgPullTimeNs); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MAX_PULL_TIME_NANOS, + (long long)pair.second.maxPullTimeNs); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_AVERAGE_PULL_DELAY_NANOS, + (long long)pair.second.avgPullDelayNs); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_MAX_PULL_DELAY_NANOS, + (long long)pair.second.maxPullDelayNs); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_DATA_ERROR, (long long)pair.second.dataError); protoOutput->end(token); } diff --git a/cmds/statsd/src/stats_log_util.h b/cmds/statsd/src/stats_log_util.h index b8f6850ddc2938a59c8066efc875169810969c1e..61f31eb3fa177ea9a2213ea68e282b6b600b507a 100644 --- a/cmds/statsd/src/stats_log_util.h +++ b/cmds/statsd/src/stats_log_util.h @@ -21,6 +21,7 @@ #include "HashableDimensionKey.h" #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h" #include "guardrail/StatsdStats.h" +#include "statslog.h" namespace android { namespace os { @@ -87,6 +88,10 @@ bool parseProtoOutputStream(util::ProtoOutputStream& protoOutput, T* message) { // Returns the truncated timestamp. int64_t truncateTimestampNsToFiveMinutes(int64_t timestampNs); +inline bool isPushedAtom(int atomId) { + return atomId <= util::kMaxPushedAtomId && atomId > 1; +} + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index d5f81a593082246c3d08fee1e975589b66e70a3c..f955df29aee0a6b95d9237360f9ec62654b3d624 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -270,6 +270,18 @@ message ValueMetric { optional int64 min_bucket_size_nanos = 10; optional bool use_absolute_value_on_reset = 11 [default = false]; + + optional bool use_diff = 12; + + enum ValueDirection { + UNKNOWN = 0; + INCREASING = 1; + DECREASING = 2; + ANY = 3; + } + optional ValueDirection value_direction = 13 [default = INCREASING]; + + optional bool skip_zero_diff_output = 14 [default = true]; } message Alert { @@ -397,6 +409,10 @@ message StatsdConfig { repeated MetricActivation metric_activation = 17; + optional bool version_strings_in_metric_report = 18; + + optional bool installer_in_metric_report = 19; + // Field number 1000 is reserved for later use. reserved 1000; } diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp index 4c6671dcd6632ed95478c6199c334ace82f0dd75..2b9528f7d1de862e1185f6b29898d987863e43f3 100644 --- a/cmds/statsd/tests/LogEntryMatcher_test.cpp +++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp @@ -148,8 +148,12 @@ TEST(AtomMatcherTest, TestAttributionMatcher) { uidMap.updateMap( 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */, + {android::String16("v1"), android::String16("v1"), android::String16("v2"), + android::String16("v1"), android::String16("v2")}, {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"), - android::String16("Pkg2"), android::String16("PkG3")} /* package name list */); + android::String16("Pkg2"), android::String16("PkG3")} /* package name list */, + {android::String16(""), android::String16(""), android::String16(""), + android::String16(""), android::String16("")}); EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event)); attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0) @@ -297,8 +301,12 @@ TEST(AtomMatcherTest, TestNeqAnyStringMatcher) { UidMap uidMap; uidMap.updateMap( 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */, + {android::String16("v1"), android::String16("v1"), android::String16("v2"), + android::String16("v1"), android::String16("v2")}, {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"), - android::String16("Pkg2"), android::String16("PkG3")} /* package name list */); + android::String16("Pkg2"), android::String16("PkG3")} /* package name list */, + {android::String16(""), android::String16(""), android::String16(""), + android::String16(""), android::String16("")}); AttributionNodeInternal attribution_node1; attribution_node1.set_uid(1111); @@ -372,8 +380,12 @@ TEST(AtomMatcherTest, TestEqAnyStringMatcher) { UidMap uidMap; uidMap.updateMap( 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */, + {android::String16("v1"), android::String16("v1"), android::String16("v2"), + android::String16("v1"), android::String16("v2")}, {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"), - android::String16("Pkg2"), android::String16("PkG3")} /* package name list */); + android::String16("Pkg2"), android::String16("PkG3")} /* package name list */, + {android::String16(""), android::String16(""), android::String16(""), + android::String16(""), android::String16("")}); AttributionNodeInternal attribution_node1; attribution_node1.set_uid(1067); diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp index ced65f292d49a5c785fbf9054f7cf59da7ce65ee..6384757b7fc8ab7685d234cf51c57ef4ae34e470 100644 --- a/cmds/statsd/tests/LogEvent_test.cpp +++ b/cmds/statsd/tests/LogEvent_test.cpp @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "src/logd/LogEvent.h" #include #include -#include "src/logd/LogEvent.h" +#include "frameworks/base/cmds/statsd/src/atoms.pb.h" +#include "frameworks/base/core/proto/android/stats/launcher/launcher.pb.h" #ifdef __ANDROID__ @@ -22,6 +24,9 @@ namespace android { namespace os { namespace statsd { +using std::string; +using util::ProtoOutputStream; + TEST(LogEventTest, TestLogParsing) { LogEvent event1(1, 2000); @@ -90,7 +95,7 @@ TEST(LogEventTest, TestLogParsing) { } TEST(LogEventTest, TestKeyValuePairsAtomParsing) { - LogEvent event1(83, 2000); + LogEvent event1(83, 2000, 1000); std::map int_map; std::map long_map; std::map string_map; @@ -108,7 +113,8 @@ TEST(LogEventTest, TestKeyValuePairsAtomParsing) { float_map[111] = 2.2f; float_map[222] = 1.1f; - EXPECT_TRUE(event1.writeKeyValuePairs(int_map, + EXPECT_TRUE(event1.writeKeyValuePairs(0, // Logging side logs 0 uid. + int_map, long_map, string_map, float_map)); @@ -116,87 +122,92 @@ TEST(LogEventTest, TestKeyValuePairsAtomParsing) { EXPECT_EQ(83, event1.GetTagId()); const auto& items = event1.getValues(); - EXPECT_EQ((size_t)16, items.size()); + EXPECT_EQ((size_t)17, items.size()); const FieldValue& item0 = event1.getValues()[0]; - EXPECT_EQ(0x2010101, item0.mField.getField()); + EXPECT_EQ(0x10000, item0.mField.getField()); EXPECT_EQ(Type::INT, item0.mValue.getType()); - EXPECT_EQ(11, item0.mValue.int_value); + EXPECT_EQ(1000, item0.mValue.int_value); const FieldValue& item1 = event1.getValues()[1]; - EXPECT_EQ(0x2010182, item1.mField.getField()); + EXPECT_EQ(0x2010201, item1.mField.getField()); EXPECT_EQ(Type::INT, item1.mValue.getType()); - EXPECT_EQ(123, item1.mValue.int_value); + EXPECT_EQ(11, item1.mValue.int_value); const FieldValue& item2 = event1.getValues()[2]; - EXPECT_EQ(0x2010201, item2.mField.getField()); + EXPECT_EQ(0x2010282, item2.mField.getField()); EXPECT_EQ(Type::INT, item2.mValue.getType()); - EXPECT_EQ(22, item2.mValue.int_value); + EXPECT_EQ(123, item2.mValue.int_value); const FieldValue& item3 = event1.getValues()[3]; - EXPECT_EQ(0x2010282, item3.mField.getField()); + EXPECT_EQ(0x2010301, item3.mField.getField()); EXPECT_EQ(Type::INT, item3.mValue.getType()); - EXPECT_EQ(345, item3.mValue.int_value); + EXPECT_EQ(22, item3.mValue.int_value); const FieldValue& item4 = event1.getValues()[4]; - EXPECT_EQ(0x2010301, item4.mField.getField()); + EXPECT_EQ(0x2010382, item4.mField.getField()); EXPECT_EQ(Type::INT, item4.mValue.getType()); - EXPECT_EQ(33, item4.mValue.int_value); + EXPECT_EQ(345, item4.mValue.int_value); const FieldValue& item5 = event1.getValues()[5]; - EXPECT_EQ(0x2010382, item5.mField.getField()); - EXPECT_EQ(Type::LONG, item5.mValue.getType()); - EXPECT_EQ(678L, item5.mValue.int_value); + EXPECT_EQ(0x2010401, item5.mField.getField()); + EXPECT_EQ(Type::INT, item5.mValue.getType()); + EXPECT_EQ(33, item5.mValue.int_value); const FieldValue& item6 = event1.getValues()[6]; - EXPECT_EQ(0x2010401, item6.mField.getField()); - EXPECT_EQ(Type::INT, item6.mValue.getType()); - EXPECT_EQ(44, item6.mValue.int_value); + EXPECT_EQ(0x2010482, item6.mField.getField()); + EXPECT_EQ(Type::LONG, item6.mValue.getType()); + EXPECT_EQ(678L, item6.mValue.int_value); const FieldValue& item7 = event1.getValues()[7]; - EXPECT_EQ(0x2010482, item7.mField.getField()); - EXPECT_EQ(Type::LONG, item7.mValue.getType()); - EXPECT_EQ(890L, item7.mValue.int_value); + EXPECT_EQ(0x2010501, item7.mField.getField()); + EXPECT_EQ(Type::INT, item7.mValue.getType()); + EXPECT_EQ(44, item7.mValue.int_value); const FieldValue& item8 = event1.getValues()[8]; - EXPECT_EQ(0x2010501, item8.mField.getField()); - EXPECT_EQ(Type::INT, item8.mValue.getType()); - EXPECT_EQ(1, item8.mValue.int_value); + EXPECT_EQ(0x2010582, item8.mField.getField()); + EXPECT_EQ(Type::LONG, item8.mValue.getType()); + EXPECT_EQ(890L, item8.mValue.int_value); const FieldValue& item9 = event1.getValues()[9]; - EXPECT_EQ(0x2010583, item9.mField.getField()); - EXPECT_EQ(Type::STRING, item9.mValue.getType()); - EXPECT_EQ("test2", item9.mValue.str_value); + EXPECT_EQ(0x2010601, item9.mField.getField()); + EXPECT_EQ(Type::INT, item9.mValue.getType()); + EXPECT_EQ(1, item9.mValue.int_value); const FieldValue& item10 = event1.getValues()[10]; - EXPECT_EQ(0x2010601, item10.mField.getField()); - EXPECT_EQ(Type::INT, item10.mValue.getType()); - EXPECT_EQ(2, item10.mValue.int_value); + EXPECT_EQ(0x2010683, item10.mField.getField()); + EXPECT_EQ(Type::STRING, item10.mValue.getType()); + EXPECT_EQ("test2", item10.mValue.str_value); const FieldValue& item11 = event1.getValues()[11]; - EXPECT_EQ(0x2010683, item11.mField.getField()); - EXPECT_EQ(Type::STRING, item11.mValue.getType()); - EXPECT_EQ("test1", item11.mValue.str_value); + EXPECT_EQ(0x2010701, item11.mField.getField()); + EXPECT_EQ(Type::INT, item11.mValue.getType()); + EXPECT_EQ(2, item11.mValue.int_value); const FieldValue& item12 = event1.getValues()[12]; - EXPECT_EQ(0x2010701, item12.mField.getField()); - EXPECT_EQ(Type::INT, item12.mValue.getType()); - EXPECT_EQ(111, item12.mValue.int_value); + EXPECT_EQ(0x2010783, item12.mField.getField()); + EXPECT_EQ(Type::STRING, item12.mValue.getType()); + EXPECT_EQ("test1", item12.mValue.str_value); const FieldValue& item13 = event1.getValues()[13]; - EXPECT_EQ(0x2010784, item13.mField.getField()); - EXPECT_EQ(Type::FLOAT, item13.mValue.getType()); - EXPECT_EQ(2.2f, item13.mValue.float_value); + EXPECT_EQ(0x2010801, item13.mField.getField()); + EXPECT_EQ(Type::INT, item13.mValue.getType()); + EXPECT_EQ(111, item13.mValue.int_value); const FieldValue& item14 = event1.getValues()[14]; - EXPECT_EQ(0x2018801, item14.mField.getField()); - EXPECT_EQ(Type::INT, item14.mValue.getType()); - EXPECT_EQ(222, item14.mValue.int_value); + EXPECT_EQ(0x2010884, item14.mField.getField()); + EXPECT_EQ(Type::FLOAT, item14.mValue.getType()); + EXPECT_EQ(2.2f, item14.mValue.float_value); const FieldValue& item15 = event1.getValues()[15]; - EXPECT_EQ(0x2018884, item15.mField.getField()); - EXPECT_EQ(Type::FLOAT, item15.mValue.getType()); - EXPECT_EQ(1.1f, item15.mValue.float_value); + EXPECT_EQ(0x2018901, item15.mField.getField()); + EXPECT_EQ(Type::INT, item15.mValue.getType()); + EXPECT_EQ(222, item15.mValue.int_value); + + const FieldValue& item16 = event1.getValues()[16]; + EXPECT_EQ(0x2018984, item16.mField.getField()); + EXPECT_EQ(Type::FLOAT, item16.mValue.getType()); + EXPECT_EQ(1.1f, item16.mValue.float_value); } TEST(LogEventTest, TestLogParsing2) { @@ -292,6 +303,7 @@ TEST(LogEventTest, TestKeyValuePairsEvent) { EXPECT_EQ(83, event1.GetTagId()); EXPECT_EQ((int64_t)2000, event1.GetLogdTimestampNs()); EXPECT_EQ((int64_t)2001, event1.GetElapsedTimestampNs()); + EXPECT_EQ((int64_t)10001, event1.GetUid()); const auto& items = event1.getValues(); EXPECT_EQ((size_t)17, items.size()); @@ -383,6 +395,57 @@ TEST(LogEventTest, TestKeyValuePairsEvent) { } +TEST(LogEventTest, TestBinaryFieldAtom) { + Atom launcherAtom; + auto launcher_event = launcherAtom.mutable_launcher_event(); + launcher_event->set_action(stats::launcher::LauncherAction::LONGPRESS); + launcher_event->set_src_state(stats::launcher::LauncherState::OVERVIEW); + launcher_event->set_dst_state(stats::launcher::LauncherState::ALLAPPS); + + auto extension = launcher_event->mutable_extension(); + + auto src_target = extension->add_src_target(); + src_target->set_type(stats::launcher::LauncherTarget_Type_ITEM_TYPE); + src_target->set_item(stats::launcher::LauncherTarget_Item_FOLDER_ICON); + + auto dst_target = extension->add_dst_target(); + dst_target->set_type(stats::launcher::LauncherTarget_Type_ITEM_TYPE); + dst_target->set_item(stats::launcher::LauncherTarget_Item_WIDGET); + + string extension_str; + extension->SerializeToString(&extension_str); + + LogEvent event1(Atom::kLauncherEventFieldNumber, 1000); + + event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS); + event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW); + event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS); + event1.write(extension_str); + event1.init(); + + ProtoOutputStream proto; + event1.ToProto(proto); + + std::vector outData; + outData.resize(proto.size()); + size_t pos = 0; + auto iter = proto.data(); + while (iter.readBuffer() != NULL) { + size_t toRead = iter.currentToRead(); + std::memcpy(&(outData[pos]), iter.readBuffer(), toRead); + pos += toRead; + iter.rp()->move(toRead); + } + + std::string result_str(outData.begin(), outData.end()); + std::string orig_str; + launcherAtom.SerializeToString(&orig_str); + + EXPECT_EQ(orig_str, result_str); +} + + + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/tests/StatsLogProcessor_test.cpp b/cmds/statsd/tests/StatsLogProcessor_test.cpp index b6f635c6a0cbb72d76bb15f4ae7523053f7729d0..355df2986a0b8623b48de0e95dfb589c48808df1 100644 --- a/cmds/statsd/tests/StatsLogProcessor_test.cpp +++ b/cmds/statsd/tests/StatsLogProcessor_test.cpp @@ -153,7 +153,8 @@ TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) { // Setup simple config key corresponding to empty config. sp m = new UidMap(); sp pullerManager = new StatsPullerManager(); - m->updateMap(1, {1, 2}, {1, 2}, {String16("p1"), String16("p2")}); + m->updateMap(1, {1, 2}, {1, 2}, {String16("v1"), String16("v2")}, + {String16("p1"), String16("p2")}, {String16(""), String16("")}); sp anomalyAlarmMonitor; sp subscriberAlarmMonitor; int broadcastCount = 0; @@ -168,7 +169,7 @@ TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) { // Expect to get no metrics, but snapshot specified above in uidmap. vector bytes; - p.onDumpReport(key, 1, false, ADB_DUMP, &bytes); + p.onDumpReport(key, 1, false, true, ADB_DUMP, &bytes); ConfigMetricsReportList output; output.ParseFromArray(bytes.data(), bytes.size()); @@ -182,7 +183,8 @@ TEST(StatsLogProcessorTest, TestEmptyConfigHasNoUidMap) { // Setup simple config key corresponding to empty config. sp m = new UidMap(); sp pullerManager = new StatsPullerManager(); - m->updateMap(1, {1, 2}, {1, 2}, {String16("p1"), String16("p2")}); + m->updateMap(1, {1, 2}, {1, 2}, {String16("v1"), String16("v2")}, + {String16("p1"), String16("p2")}, {String16(""), String16("")}); sp anomalyAlarmMonitor; sp subscriberAlarmMonitor; int broadcastCount = 0; @@ -197,7 +199,7 @@ TEST(StatsLogProcessorTest, TestEmptyConfigHasNoUidMap) { // Expect to get no metrics, but snapshot specified above in uidmap. vector bytes; - p.onDumpReport(key, 1, false, ADB_DUMP, &bytes); + p.onDumpReport(key, 1, false, true, ADB_DUMP, &bytes); ConfigMetricsReportList output; output.ParseFromArray(bytes.data(), bytes.size()); @@ -227,7 +229,7 @@ TEST(StatsLogProcessorTest, TestReportIncludesSubConfig) { // Expect to get no metrics, but snapshot specified above in uidmap. vector bytes; - p.onDumpReport(key, 1, false, ADB_DUMP, &bytes); + p.onDumpReport(key, 1, false, true, ADB_DUMP, &bytes); ConfigMetricsReportList output; output.ParseFromArray(bytes.data(), bytes.size()); diff --git a/cmds/statsd/tests/UidMap_test.cpp b/cmds/statsd/tests/UidMap_test.cpp index 99082cc647f6643494a62f43db1bf00bd5a11bb4..f0d9cf188661611fac207e0eb1ac2f4f1e889b3c 100644 --- a/cmds/statsd/tests/UidMap_test.cpp +++ b/cmds/statsd/tests/UidMap_test.cpp @@ -71,14 +71,20 @@ TEST(UidMapTest, TestMatching) { vector uids; vector versions; vector apps; + vector versionStrings; + vector installers; uids.push_back(1000); uids.push_back(1000); + versionStrings.push_back(String16("v1")); + versionStrings.push_back(String16("v1")); + installers.push_back(String16("")); + installers.push_back(String16("")); apps.push_back(String16(kApp1.c_str())); apps.push_back(String16(kApp2.c_str())); versions.push_back(4); versions.push_back(5); - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); EXPECT_TRUE(m.hasApp(1000, kApp1)); EXPECT_TRUE(m.hasApp(1000, kApp2)); EXPECT_FALSE(m.hasApp(1000, "not.app")); @@ -97,14 +103,20 @@ TEST(UidMapTest, TestAddAndRemove) { vector uids; vector versions; vector apps; + vector versionStrings; + vector installers; uids.push_back(1000); uids.push_back(1000); + versionStrings.push_back(String16("v1")); + versionStrings.push_back(String16("v1")); + installers.push_back(String16("")); + installers.push_back(String16("")); apps.push_back(String16(kApp1.c_str())); apps.push_back(String16(kApp2.c_str())); versions.push_back(4); versions.push_back(5); - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); std::set name_set = m.getAppNamesFromUid(1000, true /* returnNormalized */); EXPECT_EQ(name_set.size(), 2u); @@ -112,7 +124,7 @@ TEST(UidMapTest, TestAddAndRemove) { EXPECT_TRUE(name_set.find(kApp2) != name_set.end()); // Update the app1 version. - m.updateApp(2, String16(kApp1.c_str()), 1000, 40); + m.updateApp(2, String16(kApp1.c_str()), 1000, 40, String16("v40"), String16("")); EXPECT_EQ(40, m.getAppVersion(1000, kApp1)); name_set = m.getAppNamesFromUid(1000, true /* returnNormalized */); @@ -138,14 +150,15 @@ TEST(UidMapTest, TestAddAndRemove) { TEST(UidMapTest, TestUpdateApp) { UidMap m; - m.updateMap(1, {1000, 1000}, {4, 5}, {String16(kApp1.c_str()), String16(kApp2.c_str())}); + m.updateMap(1, {1000, 1000}, {4, 5}, {String16("v4"), String16("v5")}, + {String16(kApp1.c_str()), String16(kApp2.c_str())}, {String16(""), String16("")}); std::set name_set = m.getAppNamesFromUid(1000, true /* returnNormalized */); EXPECT_EQ(name_set.size(), 2u); EXPECT_TRUE(name_set.find(kApp1) != name_set.end()); EXPECT_TRUE(name_set.find(kApp2) != name_set.end()); // Adds a new name for uid 1000. - m.updateApp(2, String16("NeW_aPP1_NAmE"), 1000, 40); + m.updateApp(2, String16("NeW_aPP1_NAmE"), 1000, 40, String16("v40"), String16("")); name_set = m.getAppNamesFromUid(1000, true /* returnNormalized */); EXPECT_EQ(name_set.size(), 3u); EXPECT_TRUE(name_set.find(kApp1) != name_set.end()); @@ -154,7 +167,7 @@ TEST(UidMapTest, TestUpdateApp) { EXPECT_TRUE(name_set.find("new_app1_name") != name_set.end()); // This name is also reused by another uid 2000. - m.updateApp(3, String16("NeW_aPP1_NAmE"), 2000, 1); + m.updateApp(3, String16("NeW_aPP1_NAmE"), 2000, 1, String16("v1"), String16("")); name_set = m.getAppNamesFromUid(2000, true /* returnNormalized */); EXPECT_EQ(name_set.size(), 1u); EXPECT_TRUE(name_set.find("NeW_aPP1_NAmE") == name_set.end()); @@ -185,21 +198,26 @@ TEST(UidMapTest, TestOutputIncludesAtLeastOneSnapshot) { vector uids; vector versions; vector apps; + vector versionStrings; + vector installers; uids.push_back(1000); apps.push_back(String16(kApp2.c_str())); + versionStrings.push_back(String16("v1")); + installers.push_back(String16("")); versions.push_back(5); - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); // Set the last timestamp for this config key to be newer. m.mLastUpdatePerConfigKey[config1] = 2; ProtoOutputStream proto; - m.appendUidMap(3, config1, nullptr, &proto); + m.appendUidMap(3, config1, nullptr, true, true, &proto); // Check there's still a uidmap attached this one. UidMapping results; protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); + EXPECT_EQ("v1", results.snapshots(0).package_info(0).version_string()); } TEST(UidMapTest, TestRemovedAppRetained) { @@ -209,15 +227,19 @@ TEST(UidMapTest, TestRemovedAppRetained) { m.OnConfigUpdated(config1); vector uids; vector versions; + vector versionStrings; + vector installers; vector apps; uids.push_back(1000); apps.push_back(String16(kApp2.c_str())); versions.push_back(5); - m.updateMap(1, uids, versions, apps); + versionStrings.push_back(String16("v5")); + installers.push_back(String16("")); + m.updateMap(1, uids, versions, versionStrings, apps, installers); m.removeApp(2, String16(kApp2.c_str()), 1000); ProtoOutputStream proto; - m.appendUidMap(3, config1, nullptr, &proto); + m.appendUidMap(3, config1, nullptr, true, true, &proto); // Snapshot should still contain this item as deleted. UidMapping results; @@ -233,30 +255,34 @@ TEST(UidMapTest, TestRemovedAppOverGuardrail) { m.OnConfigUpdated(config1); vector uids; vector versions; + vector versionStrings; + vector installers; vector apps; const int maxDeletedApps = StatsdStats::kMaxDeletedAppsInUidMap; for (int j = 0; j < maxDeletedApps + 10; j++) { uids.push_back(j); apps.push_back(String16(kApp1.c_str())); versions.push_back(j); + versionStrings.push_back(String16("v")); + installers.push_back(String16("")); } - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); // First, verify that we have the expected number of items. UidMapping results; ProtoOutputStream proto; - m.appendUidMap(3, config1, nullptr, &proto); + m.appendUidMap(3, config1, nullptr, true, true, &proto); protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(maxDeletedApps + 10, results.snapshots(0).package_info_size()); // Now remove all the apps. - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); for (int j = 0; j < maxDeletedApps + 10; j++) { m.removeApp(4, String16(kApp1.c_str()), j); } proto.clear(); - m.appendUidMap(5, config1, nullptr, &proto); + m.appendUidMap(5, config1, nullptr, true, true, &proto); // Snapshot drops the first nine items. protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(maxDeletedApps, results.snapshots(0).package_info_size()); @@ -272,6 +298,8 @@ TEST(UidMapTest, TestClearingOutput) { vector uids; vector versions; + vector versionStrings; + vector installers; vector apps; uids.push_back(1000); uids.push_back(1000); @@ -279,45 +307,49 @@ TEST(UidMapTest, TestClearingOutput) { apps.push_back(String16(kApp2.c_str())); versions.push_back(4); versions.push_back(5); - m.updateMap(1, uids, versions, apps); + versionStrings.push_back(String16("v4")); + versionStrings.push_back(String16("v5")); + installers.push_back(String16("")); + installers.push_back(String16("")); + m.updateMap(1, uids, versions, versionStrings, apps, installers); ProtoOutputStream proto; - m.appendUidMap(2, config1, nullptr, &proto); + m.appendUidMap(2, config1, nullptr, true, true, &proto); UidMapping results; protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); // We have to keep at least one snapshot in memory at all times. proto.clear(); - m.appendUidMap(2, config1, nullptr, &proto); + m.appendUidMap(2, config1, nullptr, true, true, &proto); protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); // Now add another configuration. m.OnConfigUpdated(config2); - m.updateApp(5, String16(kApp1.c_str()), 1000, 40); + m.updateApp(5, String16(kApp1.c_str()), 1000, 40, String16("v40"), String16("")); EXPECT_EQ(1U, m.mChanges.size()); proto.clear(); - m.appendUidMap(6, config1, nullptr, &proto); + m.appendUidMap(6, config1, nullptr, true, true, &proto); protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); EXPECT_EQ(1, results.changes_size()); EXPECT_EQ(1U, m.mChanges.size()); // Add another delta update. - m.updateApp(7, String16(kApp2.c_str()), 1001, 41); + m.updateApp(7, String16(kApp2.c_str()), 1001, 41, String16("v41"), String16("")); EXPECT_EQ(2U, m.mChanges.size()); // We still can't remove anything. proto.clear(); - m.appendUidMap(8, config1, nullptr, &proto); + m.appendUidMap(8, config1, nullptr, true, true, &proto); protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); EXPECT_EQ(1, results.changes_size()); EXPECT_EQ(2U, m.mChanges.size()); proto.clear(); - m.appendUidMap(9, config2, nullptr, &proto); + m.appendUidMap(9, config2, nullptr, true, true, &proto); protoOutputStreamToUidMapping(&proto, &results); EXPECT_EQ(1, results.snapshots_size()); EXPECT_EQ(2, results.changes_size()); @@ -335,19 +367,23 @@ TEST(UidMapTest, TestMemoryComputed) { vector uids; vector versions; vector apps; + vector versionStrings; + vector installers; uids.push_back(1000); apps.push_back(String16(kApp1.c_str())); versions.push_back(1); - m.updateMap(1, uids, versions, apps); + versionStrings.push_back(String16("v1")); + installers.push_back(String16("")); + m.updateMap(1, uids, versions, versionStrings, apps, installers); - m.updateApp(3, String16(kApp1.c_str()), 1000, 40); + m.updateApp(3, String16(kApp1.c_str()), 1000, 40, String16("v40"), String16("")); ProtoOutputStream proto; vector bytes; - m.appendUidMap(2, config1, nullptr, &proto); + m.appendUidMap(2, config1, nullptr, true, true, &proto); size_t prevBytes = m.mBytesUsed; - m.appendUidMap(4, config1, nullptr, &proto); + m.appendUidMap(4, config1, nullptr, true, true, &proto); EXPECT_TRUE(m.mBytesUsed < prevBytes); } @@ -361,21 +397,27 @@ TEST(UidMapTest, TestMemoryGuardrail) { size_t startBytes = m.mBytesUsed; vector uids; vector versions; + vector versionStrings; + vector installers; vector apps; for (int i = 0; i < 100; i++) { uids.push_back(1); buf = "EXTREMELY_LONG_STRING_FOR_APP_TO_WASTE_MEMORY." + to_string(i); apps.push_back(String16(buf.c_str())); versions.push_back(1); + versionStrings.push_back(String16("v1")); + installers.push_back(String16("")); } - m.updateMap(1, uids, versions, apps); + m.updateMap(1, uids, versions, versionStrings, apps, installers); - m.updateApp(3, String16("EXTREMELY_LONG_STRING_FOR_APP_TO_WASTE_MEMORY.0"), 1000, 2); + m.updateApp(3, String16("EXTREMELY_LONG_STRING_FOR_APP_TO_WASTE_MEMORY.0"), 1000, 2, + String16("v2"), String16("")); EXPECT_EQ(1U, m.mChanges.size()); // Now force deletion by limiting the memory to hold one delta change. - m.maxBytesOverride = 80; // Since the app string alone requires >45 characters. - m.updateApp(5, String16("EXTREMELY_LONG_STRING_FOR_APP_TO_WASTE_MEMORY.0"), 1000, 4); + m.maxBytesOverride = 120; // Since the app string alone requires >45 characters. + m.updateApp(5, String16("EXTREMELY_LONG_STRING_FOR_APP_TO_WASTE_MEMORY.0"), 1000, 4, + String16("v4"), String16("")); EXPECT_EQ(1U, m.mChanges.size()); } diff --git a/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp b/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp index a8fcc8163656c216be6946b979a0ed967396f31f..a9841c91ada28e0ba8d768ccd2bfb79159d01954 100644 --- a/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/Attribution_e2e_test.cpp @@ -69,8 +69,10 @@ TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid) { // Here it assumes that GMS core has two uids. processor->getUidMap()->updateMap( 1, {222, 444, 111, 333}, {1, 1, 2, 2}, + {String16("v1"), String16("v1"), String16("v2"), String16("v2")}, {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"), - String16("APP3")}); + String16("APP3")}, + {String16(""), String16(""), String16(""), String16("")}); // GMS core node is in the middle. std::vector attributions1 = {CreateAttribution(111, "App1"), @@ -144,8 +146,8 @@ TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid) { } ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -215,8 +217,10 @@ TEST(AttributionE2eTest, TestAttributionMatchAndSliceByChain) { // Here it assumes that GMS core has two uids. processor->getUidMap()->updateMap( 1, {222, 444, 111, 333}, {1, 1, 2, 2}, + {String16("v1"), String16("v1"), String16("v2"), String16("v2")}, {String16("com.android.gmscore"), String16("com.android.gmscore"), String16("app1"), - String16("APP3")}); + String16("APP3")}, + {String16(""), String16(""), String16(""), String16("")}); // GMS core node is in the middle. std::vector attributions1 = {CreateAttribution(111, "App1"), @@ -290,8 +294,8 @@ TEST(AttributionE2eTest, TestAttributionMatchAndSliceByChain) { } ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 4 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp index 75bd40f679465865bf7eaa247194cd3e95f59ed1..a8914da4b7fe7de6fb856309dd50a1a6e753884d 100644 --- a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp +++ b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp @@ -212,7 +212,7 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_AND_CombinationCondi ConfigMetricsReportList reports; vector buffer; processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, - ADB_DUMP, &buffer); + true, ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -548,7 +548,7 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_AND_CombinationConditi ConfigMetricsReportList reports; vector buffer; processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, - ADB_DUMP, &buffer); + true, ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -798,7 +798,7 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_AND_Combination ConfigMetricsReportList reports; vector buffer; processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, - ADB_DUMP, &buffer); + true, ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp index c5a8a2eba4ae5bfce1445c9dd10321cbf7bd2d35..621b6ed6ddbf5e5ddb1b6b658defac406f15c8bb 100644 --- a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp +++ b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp @@ -130,8 +130,8 @@ TEST(DimensionInConditionE2eTest, TestCreateCountMetric_NoLink_OR_CombinationCon ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -346,8 +346,8 @@ TEST(DimensionInConditionE2eTest, TestCreateCountMetric_Link_OR_CombinationCondi ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -530,8 +530,8 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_OR_CombinationCondit ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -732,8 +732,8 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_OR_CombinationConditio ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp index 5bcc9ee8513da021283224368a125fa4d79f55fe..9f8acaf18422e6c043676403561d114e1ffb0672 100644 --- a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp +++ b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp @@ -143,7 +143,7 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_SimpleCondition) { ConfigMetricsReportList reports; vector buffer; processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, - ADB_DUMP, &buffer); + true, ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -438,7 +438,7 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_SimpleCondition) { ConfigMetricsReportList reports; vector buffer; processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, - ADB_DUMP, &buffer); + true, ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -658,8 +658,8 @@ TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_SimpleCondition ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp index d7b9c119b71b28bad705e591770a5fefba474110..2d090e02a42ad4fc320f2e2f6730de0bebef5677 100644 --- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp +++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp @@ -123,8 +123,8 @@ TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvents) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -246,8 +246,8 @@ TEST(GaugeMetricE2eTest, TestConditionChangeToTrueSamplePulledEvents) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, configAddedTimeNs + 8 * bucketSizeNs + 10, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, configAddedTimeNs + 8 * bucketSizeNs + 10, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -350,8 +350,8 @@ TEST(GaugeMetricE2eTest, TestRandomSamplePulledEvent_LateAlarm) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp index 5c1ef01dd576306635fecff6759966acea3c130d..71afedfa6c8f8fbf76a02ffd54c6d0e82821f29b 100644 --- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp +++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp @@ -149,8 +149,8 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { } ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 3 * bucketSizeNs, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 3 * bucketSizeNs, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp b/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp index 0f13a4ac1254beb86ce104816660c9c8f9350175..29e86f3f945683ffa48b61aaf21d8bdb3d2c1efe 100644 --- a/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/MetricActivation_e2e_test.cpp @@ -167,8 +167,8 @@ TEST(MetricActivationE2eTest, TestCountMetric) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + NS_PER_SEC * 60 * 15 + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp b/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp index cc8894bdbca6563a01471e9ec6cc60d2dc898f2e..9349c857c5b3c25c564db38bd976a210fc0a058f 100644 --- a/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/MetricConditionLink_e2e_test.cpp @@ -199,8 +199,8 @@ TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks1) { } ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -318,8 +318,8 @@ TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks2) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp index 67acd61541767043bc3d85fa9a0080cd0885b583..2b0285b37473708f02c6e55bcd6313a1af6874af 100644 --- a/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/PartialBucket_e2e_test.cpp @@ -46,7 +46,7 @@ ConfigMetricsReport GetReports(sp processor, int64_t timestam IPCThreadState* ipc = IPCThreadState::self(); ConfigKey configKey(ipc->getCallingUid(), kConfigKey); processor->onDumpReport(configKey, timestamp, include_current /* include_current_bucket*/, - ADB_DUMP, &output); + true /* erase_data */, ADB_DUMP, &output); ConfigMetricsReportList reports; reports.ParseFromArray(output.data(), output.size()); EXPECT_EQ(1, reports.reports_size()); @@ -132,7 +132,8 @@ TEST(PartialBucketE2eTest, TestCountMetricNoSplitOnNewApp) { service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get()); // This is a new installation, so there shouldn't be a split (should be same as the without // split case). - service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"), + String16("")); // Goes into the second bucket. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get()); @@ -145,11 +146,13 @@ TEST(PartialBucketE2eTest, TestCountMetricSplitOnUpgrade) { SendConfig(service, MakeConfig()); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. - service.mUidMap->updateMap(start, {1}, {1}, {String16(kApp1.c_str())}); + service.mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())}, + {String16("")}); // Force the uidmap to update at timestamp 2. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get()); - service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(start + 2, String16(kApp1.c_str()), 1, 2, String16("v2"), + String16("")); // Goes into the second bucket. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 3).get()); @@ -168,7 +171,8 @@ TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval) { SendConfig(service, MakeConfig()); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. - service.mUidMap->updateMap(start, {1}, {1}, {String16(kApp1.c_str())}); + service.mUidMap->updateMap(start, {1}, {1}, {String16("v1")}, {String16(kApp1.c_str())}, + {String16("")}); // Force the uidmap to update at timestamp 2. service.mProcessor->OnLogEvent(CreateAppCrashEvent(100, start + 1).get()); @@ -189,13 +193,14 @@ TEST(PartialBucketE2eTest, TestCountMetricSplitOnRemoval) { TEST(PartialBucketE2eTest, TestValueMetricWithoutMinPartialBucket) { StatsService service(nullptr); // Partial buckets don't occur when app is first installed. - service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); + service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16("")); SendConfig(service, MakeValueMetricConfig(0)); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); - service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2, + String16("v2"), String16("")); ConfigMetricsReport report = GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true); @@ -206,14 +211,15 @@ TEST(PartialBucketE2eTest, TestValueMetricWithoutMinPartialBucket) { TEST(PartialBucketE2eTest, TestValueMetricWithMinPartialBucket) { StatsService service(nullptr); // Partial buckets don't occur when app is first installed. - service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); + service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16("")); SendConfig(service, MakeValueMetricConfig(60 * NS_PER_SEC /* One minute */)); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2; service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); - service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"), + String16("")); ConfigMetricsReport report = GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true); @@ -229,13 +235,14 @@ TEST(PartialBucketE2eTest, TestValueMetricWithMinPartialBucket) { TEST(PartialBucketE2eTest, TestGaugeMetricWithoutMinPartialBucket) { StatsService service(nullptr); // Partial buckets don't occur when app is first installed. - service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); + service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16("")); SendConfig(service, MakeGaugeMetricConfig(0)); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); - service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(5 * 60 * NS_PER_SEC + start + 2, String16(kApp1.c_str()), 1, 2, + String16("v2"), String16("")); ConfigMetricsReport report = GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100, true); @@ -246,14 +253,15 @@ TEST(PartialBucketE2eTest, TestGaugeMetricWithoutMinPartialBucket) { TEST(PartialBucketE2eTest, TestGaugeMetricWithMinPartialBucket) { StatsService service(nullptr); // Partial buckets don't occur when app is first installed. - service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1); + service.mUidMap->updateApp(1, String16(kApp1.c_str()), 1, 1, String16("v1"), String16("")); SendConfig(service, MakeGaugeMetricConfig(60 * NS_PER_SEC /* One minute */)); int64_t start = getElapsedRealtimeNs(); // This is the start-time the metrics producers are // initialized with. const int64_t endSkipped = 5 * 60 * NS_PER_SEC + start + 2; service.mProcessor->informPullAlarmFired(5 * 60 * NS_PER_SEC + start); - service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2); + service.mUidMap->updateApp(endSkipped, String16(kApp1.c_str()), 1, 2, String16("v2"), + String16("")); ConfigMetricsReport report = GetReports(service.mProcessor, 5 * 60 * NS_PER_SEC + start + 100 * NS_PER_SEC, true); diff --git a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp index f2e8f58fe7638778eb1628419dd3708883c9e72c..abf1ab176ea71ca167b5190f4c4682fa02e56c6a 100644 --- a/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/ValueMetric_pull_e2e_test.cpp @@ -49,6 +49,7 @@ StatsdConfig CreateStatsdConfig() { CreateDimensions(android::util::TEMPERATURE, {2/* sensor name field */ }); valueMetric->set_bucket(FIVE_MINUTES); valueMetric->set_use_absolute_value_on_reset(true); + valueMetric->set_skip_zero_diff_output(false); return config; } @@ -117,8 +118,8 @@ TEST(ValueMetricE2eTest, TestPulledEvents) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, configAddedTimeNs + 7 * bucketSizeNs + 10, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -141,23 +142,23 @@ TEST(ValueMetricE2eTest, TestPulledEvents) { EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(0).has_value_long()); + EXPECT_EQ(1, data.bucket_info(0).values_size()); EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(1).has_value_long()); + EXPECT_EQ(1, data.bucket_info(1).values_size()); EXPECT_EQ(baseTimeNs + 4 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 5 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(2).has_value_long()); + EXPECT_EQ(1, data.bucket_info(2).values_size()); EXPECT_EQ(baseTimeNs + 6 * bucketSizeNs, data.bucket_info(3).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(3).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(3).has_value_long()); + EXPECT_EQ(1, data.bucket_info(3).values_size()); EXPECT_EQ(baseTimeNs + 7 * bucketSizeNs, data.bucket_info(4).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(4).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(4).has_value_long()); + EXPECT_EQ(1, data.bucket_info(4).values_size()); } TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) { @@ -224,8 +225,8 @@ TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) { ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, configAddedTimeNs + 9 * bucketSizeNs + 10, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, configAddedTimeNs + 9 * bucketSizeNs + 10, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -248,15 +249,15 @@ TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm) { EXPECT_EQ(baseTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(0).has_value_long()); + EXPECT_EQ(1, data.bucket_info(0).values_size()); EXPECT_EQ(baseTimeNs + 8 * bucketSizeNs, data.bucket_info(1).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(1).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(1).has_value_long()); + EXPECT_EQ(1, data.bucket_info(1).values_size()); EXPECT_EQ(baseTimeNs + 9 * bucketSizeNs, data.bucket_info(2).start_bucket_elapsed_nanos()); EXPECT_EQ(baseTimeNs + 10 * bucketSizeNs, data.bucket_info(2).end_bucket_elapsed_nanos()); - EXPECT_TRUE(data.bucket_info(2).has_value_long()); + EXPECT_EQ(1, data.bucket_info(2).values_size()); } #else diff --git a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp index b9d0c62cf596c917a91a2ebc04d1576466954e11..6d1317cb5dee4205d1f4897c35a2fe472e76af88 100644 --- a/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp +++ b/cmds/statsd/tests/e2e/WakelockDuration_e2e_test.cpp @@ -127,8 +127,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration1) FeedEvents(config, processor); vector buffer; ConfigMetricsReportList reports; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -164,8 +164,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration2) FeedEvents(config, processor); vector buffer; ConfigMetricsReportList reports; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -215,8 +215,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForSumDuration3) processor->OnLogEvent(event.get()); } - processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -248,8 +248,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration1) FeedEvents(config, processor); ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs - 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); @@ -277,8 +277,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration2) FeedEvents(config, processor); ConfigMetricsReportList reports; vector buffer; - processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 2 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); @@ -323,8 +323,8 @@ TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensionsForMaxDuration3) processor->OnLogEvent(event.get()); } - processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, ADB_DUMP, - &buffer); + processor->onDumpReport(cfgKey, bucketStartTimeNs + 6 * bucketSizeNs + 1, false, true, + ADB_DUMP, &buffer); EXPECT_TRUE(buffer.size() > 0); EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size())); backfillDimensionPath(&reports); diff --git a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp index 967ef3c5af6375930268d297e5e9d76c68233caa..6069516e96660e6d705c920bdb2203e59ba4cffe 100644 --- a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp +++ b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp @@ -126,7 +126,7 @@ TEST(StatsdStatsTest, TestSubStats) { stats.noteBroadcastSent(key); // data drop -> 1 - stats.noteDataDropped(key); + stats.noteDataDropped(key, 123); // dump report -> 3 stats.noteMetricsReportSent(key, 0); @@ -142,6 +142,8 @@ TEST(StatsdStatsTest, TestSubStats) { const auto& configReport = report.config_stats(0); EXPECT_EQ(2, configReport.broadcast_sent_time_sec_size()); EXPECT_EQ(1, configReport.data_drop_time_sec_size()); + EXPECT_EQ(1, configReport.data_drop_bytes_size()); + EXPECT_EQ(123, configReport.data_drop_bytes(0)); EXPECT_EQ(3, configReport.dump_report_time_sec_size()); EXPECT_EQ(3, configReport.dump_report_data_size_size()); EXPECT_EQ(1, configReport.annotation_size()); @@ -242,6 +244,39 @@ TEST(StatsdStatsTest, TestAtomLog) { EXPECT_TRUE(sensorAtomGood); } +TEST(StatsdStatsTest, TestPullAtomStats) { + StatsdStats stats; + + stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 3333L); + stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 2222L); + stats.updateMinPullIntervalSec(android::util::DISK_SPACE, 4444L); + + stats.notePull(android::util::DISK_SPACE); + stats.notePullTime(android::util::DISK_SPACE, 1111L); + stats.notePullDelay(android::util::DISK_SPACE, 1111L); + stats.notePull(android::util::DISK_SPACE); + stats.notePullTime(android::util::DISK_SPACE, 3333L); + stats.notePullDelay(android::util::DISK_SPACE, 3335L); + stats.notePull(android::util::DISK_SPACE); + stats.notePullFromCache(android::util::DISK_SPACE); + + vector output; + stats.dumpStats(&output, false); + StatsdStatsReport report; + bool good = report.ParseFromArray(&output[0], output.size()); + EXPECT_TRUE(good); + + EXPECT_EQ(1, report.pulled_atom_stats_size()); + + EXPECT_EQ(android::util::DISK_SPACE, report.pulled_atom_stats(0).atom_id()); + EXPECT_EQ(3, report.pulled_atom_stats(0).total_pull()); + EXPECT_EQ(1, report.pulled_atom_stats(0).total_pull_from_cache()); + EXPECT_EQ(2222L, report.pulled_atom_stats(0).min_pull_interval_sec()); + EXPECT_EQ(2222L, report.pulled_atom_stats(0).average_pull_time_nanos()); + EXPECT_EQ(3333L, report.pulled_atom_stats(0).max_pull_time_nanos()); + EXPECT_EQ(2223L, report.pulled_atom_stats(0).average_pull_delay_nanos()); + EXPECT_EQ(3335L, report.pulled_atom_stats(0).max_pull_delay_nanos()); +} TEST(StatsdStatsTest, TestAnomalyMonitor) { StatsdStats stats; @@ -275,7 +310,7 @@ TEST(StatsdStatsTest, TestTimestampThreshold) { int32_t newTimestamp = 10000; // now it should trigger removing oldest timestamp - stats.noteDataDropped(key, 10000); + stats.noteDataDropped(key, 123, 10000); stats.noteBroadcastSent(key, 10000); stats.noteMetricsReportSent(key, 0, 10000); @@ -295,6 +330,7 @@ TEST(StatsdStatsTest, TestTimestampThreshold) { // the last timestamp is the newest timestamp. EXPECT_EQ(newTimestamp, configStats->broadcast_sent_time_sec.back()); EXPECT_EQ(newTimestamp, configStats->data_drop_time_sec.back()); + EXPECT_EQ(123, configStats->data_drop_bytes.back()); EXPECT_EQ(newTimestamp, configStats->dump_report_stats.back().first); } diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp index 60bd4a7e07d98b533b5be77a83589c7de50bc6a5..737408d3591d219633554070f8bece55d6ec230a 100644 --- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp @@ -605,15 +605,6 @@ TEST(GaugeMetricProducerTest, TestPullOnTrigger) { sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Invoke([](int tagId, int64_t timeNs, - vector>* data) { - data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 3); - event->write(3); - event->init(); - data->push_back(event); - return true; - })) .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); @@ -631,7 +622,8 @@ TEST(GaugeMetricProducerTest, TestPullOnTrigger) { event->init(); data->push_back(event); return true; - })); + })) + .WillOnce(Return(true)); int triggerId = 5; GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, @@ -640,43 +632,28 @@ TEST(GaugeMetricProducerTest, TestPullOnTrigger) { pullerManager); vector> allData; - allData.clear(); - EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); + EXPECT_EQ(0UL, gaugeProducer.mCurrentSlicedBucket->size()); LogEvent trigger(triggerId, bucketStartTimeNs + 10); trigger.init(); gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); - EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); + EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); trigger.setElapsedTimestampNs(bucketStartTimeNs + 20); gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); - EXPECT_EQ(3UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); - - allData.clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); - event->write(10); - event->init(); - allData.push_back(event); + EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); + trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1); + gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); - gaugeProducer.onDataPulled(allData); - EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); - auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin(); - EXPECT_EQ(INT, it->mValue.getType()); - EXPECT_EQ(10, it->mValue.int_value); EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size()); - EXPECT_EQ(3UL, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.size()); - EXPECT_EQ(3, gaugeProducer.mPastBuckets.begin() - ->second.back() - .mGaugeAtoms[0] - .mFields->begin() - ->mValue.int_value); + EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.begin()->second.back().mGaugeAtoms.size()); EXPECT_EQ(4, gaugeProducer.mPastBuckets.begin() ->second.back() - .mGaugeAtoms[1] + .mGaugeAtoms[0] .mFields->begin() ->mValue.int_value); EXPECT_EQ(5, gaugeProducer.mPastBuckets.begin() ->second.back() - .mGaugeAtoms[2] + .mGaugeAtoms[1] .mFields->begin() ->mValue.int_value); } @@ -731,7 +708,8 @@ TEST(GaugeMetricProducerTest, TestRemoveDimensionInOutput) { event->init(); data->push_back(event); return true; - })); + })) + .WillOnce(Return(true)); int triggerId = 5; GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, @@ -740,30 +718,21 @@ TEST(GaugeMetricProducerTest, TestRemoveDimensionInOutput) { pullerManager); vector> allData; - allData.clear(); - EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); - LogEvent trigger(triggerId, bucketStartTimeNs + 10); + LogEvent trigger(triggerId, bucketStartTimeNs + 3); trigger.init(); gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); + EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); + trigger.setElapsedTimestampNs(bucketStartTimeNs + 10); + gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); trigger.setElapsedTimestampNs(bucketStartTimeNs + 20); gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); EXPECT_EQ(2UL, gaugeProducer.mCurrentSlicedBucket->begin()->second.size()); + trigger.setElapsedTimestampNs(bucket2StartTimeNs + 1); + gaugeProducer.onMatchedLogEvent(1 /*log matcher index*/, trigger); - allData.clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); - event->write(4); - event->write(11); - event->init(); - allData.push_back(event); - - gaugeProducer.onDataPulled(allData); - EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); - auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin(); - EXPECT_EQ(INT, it->mValue.getType()); - EXPECT_EQ(11, it->mValue.int_value); EXPECT_EQ(2UL, gaugeProducer.mPastBuckets.size()); auto bucketIt = gaugeProducer.mPastBuckets.begin(); EXPECT_EQ(1UL, bucketIt->second.back().mGaugeAtoms.size()); diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp index 57aab971eaaa5b45f549356bcf555ec4146e6c59..44aa00b3046cb428a28a520643989c0a851ed206 100644 --- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "src/matchers/SimpleLogMatchingTracker.h" #include "src/metrics/ValueMetricProducer.h" #include "src/stats_log_util.h" #include "metrics_test_helper.h" @@ -40,6 +41,8 @@ namespace statsd { const ConfigKey kConfigKey(0, 12345); const int tagId = 1; const int64_t metricId = 123; +const int64_t atomMatcherId = 678; +const int logEventMatcherIndex = 0; const int64_t bucketStartTimeNs = 10000000000; const int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL; const int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs; @@ -47,7 +50,41 @@ const int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs; const int64_t bucket4StartTimeNs = bucketStartTimeNs + 3 * bucketSizeNs; const int64_t bucket5StartTimeNs = bucketStartTimeNs + 4 * bucketSizeNs; const int64_t bucket6StartTimeNs = bucketStartTimeNs + 5 * bucketSizeNs; -const int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC; +double epsilon = 0.001; + +/* + * Tests that the first bucket works correctly + */ +TEST(ValueMetricProducerTest, TestCalcPreviousBucketEndTime) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + + int64_t startTimeBase = 11; + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp wizard = new NaggyMock(); + sp pullerManager = new StrictMock(); + + // statsd started long ago. + // The metric starts in the middle of the bucket + ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, + logEventMatcherIndex, eventMatcherWizard, -1, startTimeBase, + 22, pullerManager); + + EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10)); + EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10)); + EXPECT_EQ(60 * NS_PER_SEC + startTimeBase, + valueProducer.calcPreviousBucketEndTime(2 * 60 * NS_PER_SEC)); + EXPECT_EQ(2 * 60 * NS_PER_SEC + startTimeBase, + valueProducer.calcPreviousBucketEndTime(3 * 60 * NS_PER_SEC)); +} /* * Tests that the first bucket works correctly @@ -59,13 +96,20 @@ TEST(ValueMetricProducerTest, TestFirstBucket) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); // statsd started long ago. // The metric starts in the middle of the bucket ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - -1, 5, 600 * NS_PER_SEC + NS_PER_SEC/2, pullerManager); + logEventMatcherIndex, eventMatcherWizard, -1, 5, + 600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager); EXPECT_EQ(600500000000, valueProducer.mCurrentBucketStartTimeNs); EXPECT_EQ(10, valueProducer.mCurrentBucketNum); @@ -82,6 +126,12 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); @@ -90,7 +140,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucketStartTimeNs); event->write(tagId); event->write(3); event->init(); @@ -99,7 +149,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { })); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); + logEventMatcherIndex, eventMatcherWizard, tagId, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); vector> allData; allData.clear(); @@ -112,14 +163,13 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; - // startUpdated:true sum:0 start:11 - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(11, curInterval.start.long_value); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(8, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(8, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); allData.clear(); event = make_shared(tagId, bucket3StartTimeNs + 1); @@ -130,13 +180,15 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // tartUpdated:false sum:12 - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(23, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(12, curInterval.value.long_value); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(8, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); allData.clear(); event = make_shared(tagId, bucket4StartTimeNs + 1); @@ -146,13 +198,111 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { allData.push_back(event); valueProducer.onDataPulled(allData); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // startUpdated:false sum:12 - EXPECT_EQ(true, curInterval.startUpdated); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(36, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(13, curInterval.value.long_value); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); +} + +/* + * Tests pulled atoms with filtering + */ +TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + auto keyValue = atomMatcher.add_field_value_matcher(); + keyValue->set_field(1); + keyValue->set_eq_int(3); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp wizard = new NaggyMock(); + sp pullerManager = new StrictMock(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucketStartTimeNs); + event->write(3); + event->write(3); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, + logEventMatcherIndex, eventMatcherWizard, tagId, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); + + vector> allData; + allData.clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); + event->write(3); + event->write(11); + event->init(); + allData.push_back(event); + + valueProducer.onDataPulled(allData); + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(8, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + + allData.clear(); + event = make_shared(tagId, bucket3StartTimeNs + 1); + event->write(4); + event->write(23); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); + // no events caused flush of bucket + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(8, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + + allData.clear(); + event = make_shared(tagId, bucket4StartTimeNs + 1); + event->write(3); + event->write(36); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + + // the base was reset + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(36, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(3UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(13, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(8, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } /* @@ -166,14 +316,21 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_use_absolute_value_on_reset(true); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _, _)).WillOnce(Return(false)); + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)).WillOnce(Return(true)); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); + logEventMatcherIndex, eventMatcherWizard, tagId, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); vector> allData; allData.clear(); @@ -186,11 +343,11 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; - EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(11, curInterval.start.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); allData.clear(); @@ -202,12 +359,12 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(10, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(10, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); allData.clear(); event = make_shared(tagId, bucket4StartTimeNs + 1); @@ -217,12 +374,14 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { allData.push_back(event); valueProducer.onDataPulled(allData); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(36, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(26, curInterval.value.long_value); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(26, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } /* @@ -235,6 +394,12 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); @@ -242,7 +407,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { EXPECT_CALL(*pullerManager, Pull(tagId, _, _)).WillOnce(Return(false)); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); + logEventMatcherIndex, eventMatcherWizard, tagId, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); vector> allData; allData.clear(); @@ -255,11 +421,11 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; - EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(11, curInterval.start.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); allData.clear(); @@ -271,8 +437,9 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(10, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); @@ -284,12 +451,12 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { allData.push_back(event); valueProducer.onDataPulled(allData); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(26, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(36, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(26, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); } /* @@ -303,27 +470,22 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_condition(StringToId("SCREEN_ON")); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - // should not take effect - .WillOnce(Invoke([](int tagId, int64_t timeNs, - vector>* data) { - data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); - event->write(tagId); - event->write(3); - event->init(); - data->push_back(event); - return true; - })) .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 8); event->write(tagId); event->write(100); event->init(); @@ -333,7 +495,7 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); event->write(tagId); event->write(120); event->init(); @@ -341,16 +503,17 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { return true; })); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // startUpdated:false sum:0 start:100 - EXPECT_EQ(100, curInterval.start.long_value); - EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(100, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); @@ -365,21 +528,21 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // startUpdated:false sum:0 start:110 - EXPECT_EQ(110, curInterval.start.long_value); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(110, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(10, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // startUpdated:false sum:0 start:110 + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(10, curInterval.value.long_value); - EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(false, curInterval.hasBase); } TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) { @@ -389,10 +552,17 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -401,9 +571,9 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - valueProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1); + valueProducer.notifyAppUpgrade(bucketStartTimeNs + 150, "ANY.APP", 1, 1); EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); - EXPECT_EQ(eventUpgradeTimeNs, valueProducer.mCurrentBucketStartTimeNs); + EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs); shared_ptr event2 = make_shared(tagId, bucketStartTimeNs + 59 * NS_PER_SEC); event2->write(1); @@ -411,7 +581,7 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade) { event2->init(); valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2); EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); - EXPECT_EQ(eventUpgradeTimeNs, valueProducer.mCurrentBucketStartTimeNs); + EXPECT_EQ(bucketStartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs); // Next value should create a new bucket. shared_ptr event3 = make_shared(tagId, bucketStartTimeNs + 65 * NS_PER_SEC); @@ -430,28 +600,35 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Return(false)) + .WillOnce(Return(true)) .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 149); event->write(tagId); event->write(120); event->init(); data->push_back(event); return true; })); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, tagId, bucketStartTimeNs, + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); vector> allData; allData.clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 1); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); event->write(tagId); event->write(100); event->init(); @@ -460,21 +637,21 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) { valueProducer.onDataPulled(allData); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - valueProducer.notifyAppUpgrade(eventUpgradeTimeNs, "ANY.APP", 1, 1); + valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1); EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); - EXPECT_EQ(eventUpgradeTimeNs, valueProducer.mCurrentBucketStartTimeNs); - EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mValueLong); + EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs); + EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value); allData.clear(); - event = make_shared(tagId, bucket2StartTimeNs + 1); + event = make_shared(tagId, bucket3StartTimeNs + 1); event->write(tagId); event->write(150); event->init(); allData.push_back(event); valueProducer.onDataPulled(allData); - EXPECT_EQ(2UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); - EXPECT_EQ(bucket2StartTimeNs, valueProducer.mCurrentBucketStartTimeNs); - EXPECT_EQ(30L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][1].mValueLong); + EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); + EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs); + EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value); } TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) { @@ -485,16 +662,21 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_condition(StringToId("SCREEN_ON")); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Return(false)) .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 1); event->write(tagId); event->write(100); event->init(); @@ -504,14 +686,15 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs - 100); event->write(tagId); event->write(120); event->init(); data->push_back(event); return true; })); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); valueProducer.onConditionChanged(true, bucketStartTimeNs + 1); @@ -523,7 +706,7 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgradeWhileConditionFalse) { EXPECT_EQ(bucket2StartTimeNs-50, valueProducer.mCurrentBucketStartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); EXPECT_EQ(bucketStartTimeNs, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mBucketStartNs); - EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].mValueLong); + EXPECT_EQ(20L, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY][0].values[0].long_value); EXPECT_FALSE(valueProducer.mCondition); } @@ -534,11 +717,18 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -551,7 +741,7 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -559,13 +749,13 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(30, curInterval.value.long_value); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(30, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(30, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { @@ -575,11 +765,18 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -587,9 +784,7 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { event1->init(); valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); // has 1 slice - EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size()); valueProducer.onConditionChangedLocked(true, bucketStartTimeNs + 15); shared_ptr event2 = make_shared(tagId, bucketStartTimeNs + 20); @@ -600,7 +795,8 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(20, curInterval.value.long_value); shared_ptr event3 = make_shared(tagId, bucketStartTimeNs + 30); @@ -611,7 +807,7 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(50, curInterval.value.long_value); valueProducer.onConditionChangedLocked(false, bucketStartTimeNs + 35); @@ -623,13 +819,13 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(50, curInterval.value.long_value); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(50, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(50, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } TEST(ValueMetricProducerTest, TestAnomalyDetection) { @@ -648,11 +844,17 @@ TEST(ValueMetricProducerTest, TestAnomalyDetection) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - -1 /*not pulled*/, bucketStartTimeNs, bucketStartTimeNs, - pullerManager); + logEventMatcherIndex, eventMatcherWizard, -1 /*not pulled*/, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); sp anomalyTracker = valueProducer.addAnomalyTracker(alert, alarmMonitor); @@ -723,14 +925,21 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { metric.mutable_value_field()->set_field(tagId); metric.mutable_value_field()->add_child()->set_field(2); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _, _)).WillOnce(Return(false)); + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)).WillOnce(Return(true)); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, - tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); + logEventMatcherIndex, eventMatcherWizard, tagId, + bucketStartTimeNs, bucketStartTimeNs, pullerManager); vector> allData; // pull 1 @@ -744,12 +953,12 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // startUpdated:true sum:0 start:11 - EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(11, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(11, curInterval.start.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // pull 2 at correct time @@ -762,13 +971,13 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { valueProducer.onDataPulled(allData); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // tartUpdated:false sum:12 - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); - EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(23, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(12, curInterval.value.long_value); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // pull 3 come late. // The previous bucket gets closed with error. (Has start value 23, no ending) @@ -782,14 +991,14 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { allData.push_back(event); valueProducer.onDataPulled(allData); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // startUpdated:false sum:12 - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(36, curInterval.start.long_value); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(36, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } /* @@ -804,18 +1013,23 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_condition(StringToId("SCREEN_ON")); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Return(false)) // condition becomes true .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 8); event->write(tagId); event->write(100); event->init(); @@ -826,7 +1040,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 20); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); event->write(tagId); event->write(120); event->init(); @@ -834,24 +1048,25 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { return true; })); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // startUpdated:false sum:0 start:100 - EXPECT_EQ(100, curInterval.start.long_value); - EXPECT_EQ(true, curInterval.startUpdated); + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(100, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // pull on bucket boundary come late, condition change happens before it valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // Now the alarm is delivered. @@ -865,9 +1080,10 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { allData.push_back(event); valueProducer.onDataPulled(allData); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); } @@ -883,18 +1099,23 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_condition(StringToId("SCREEN_ON")); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillRepeatedly(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Return(false)) // condition becomes true .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 8); event->write(tagId); event->write(100); event->init(); @@ -905,7 +1126,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 20); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); event->write(tagId); event->write(120); event->init(); @@ -916,7 +1137,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { .WillOnce(Invoke([](int tagId, int64_t timeNs, vector>* data) { data->clear(); - shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 30); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 25); event->write(tagId); event->write(130); event->init(); @@ -924,32 +1145,35 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { return true; })); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager); valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // startUpdated:false sum:0 start:100 - EXPECT_EQ(100, curInterval.start.long_value); - EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(100, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // pull on bucket boundary come late, condition change happens before it valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // condition changed to true again, before the pull alarm is delivered valueProducer.onConditionChanged(true, bucket2StartTimeNs + 25); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(130, curInterval.start.long_value); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(130, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); // Now the alarm is delivered, but it is considered late, it has no effect @@ -962,90 +1186,11 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { allData.push_back(event); valueProducer.onDataPulled(allData); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(130, curInterval.start.long_value); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); -} - -/* - * Test pulled event with non sliced condition. The pull on boundary come late because the puller is - * very slow. - */ -TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition3) { - ValueMetric metric; - metric.set_id(metricId); - metric.set_bucket(ONE_MINUTE); - metric.mutable_value_field()->set_field(tagId); - metric.mutable_value_field()->add_child()->set_field(2); - metric.set_condition(StringToId("SCREEN_ON")); - - sp wizard = new NaggyMock(); - sp pullerManager = new StrictMock(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); - - EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) - .WillOnce(Return(false)) - // condition becomes true - .WillOnce(Invoke([](int tagId, int64_t timeNs, - vector>* data) { - data->clear(); - shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); - event->write(tagId); - event->write(100); - event->init(); - data->push_back(event); - return true; - })) - // condition becomes false - .WillOnce(Invoke([](int tagId, int64_t timeNs, - vector>* data) { - data->clear(); - shared_ptr event = make_shared(tagId, bucket3StartTimeNs + 20); - event->write(tagId); - event->write(120); - event->init(); - data->push_back(event); - return true; - })); - - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); - valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); - - // has one slice - EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - // startUpdated:false sum:0 start:100 - EXPECT_EQ(100, curInterval.start.long_value); - EXPECT_EQ(true, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); - - // pull on bucket boundary come late, condition change happens before it. - // But puller is very slow in this one, so the data come after bucket finish - valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); - EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); - - // Alarm is delivered in time, but the pull is very slow, and pullers are called in order, - // so this one comes even later - vector> allData; - allData.clear(); - shared_ptr event = make_shared(tagId, bucket3StartTimeNs + 30); - event->write(1); - event->write(110); - event->init(); - allData.push_back(event); - valueProducer.onDataPulled(allData); - - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(false, curInterval.startUpdated); - EXPECT_EQ(false, curInterval.hasValue); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(130, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); } @@ -1057,11 +1202,18 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMin) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_aggregation_type(ValueMetric::MIN); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -1074,7 +1226,7 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMin) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1082,13 +1234,13 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMin) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(10, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } TEST(ValueMetricProducerTest, TestPushedAggregateMax) { @@ -1099,11 +1251,18 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMax) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_aggregation_type(ValueMetric::MAX); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -1116,7 +1275,7 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMax) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1124,13 +1283,13 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMax) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(20, curInterval.value.long_value); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(20, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } TEST(ValueMetricProducerTest, TestPushedAggregateAvg) { @@ -1141,11 +1300,18 @@ TEST(ValueMetricProducerTest, TestPushedAggregateAvg) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_aggregation_type(ValueMetric::AVG); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -1159,7 +1325,7 @@ TEST(ValueMetricProducerTest, TestPushedAggregateAvg) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval; - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(1, curInterval.sampleSize); @@ -1168,14 +1334,14 @@ TEST(ValueMetricProducerTest, TestPushedAggregateAvg) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(25, curInterval.value.long_value); EXPECT_EQ(2, curInterval.sampleSize); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(12.5, valueProducer.mPastBuckets.begin()->second.back().mValueDouble); + EXPECT_TRUE(std::abs(valueProducer.mPastBuckets.begin()->second.back().values[0].double_value - 12.5) < epsilon); } TEST(ValueMetricProducerTest, TestPushedAggregateSum) { @@ -1186,11 +1352,18 @@ TEST(ValueMetricProducerTest, TestPushedAggregateSum) { metric.mutable_value_field()->add_child()->set_field(2); metric.set_aggregation_type(ValueMetric::SUM); + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); event1->write(1); @@ -1203,7 +1376,7 @@ TEST(ValueMetricProducerTest, TestPushedAggregateSum) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1211,73 +1384,88 @@ TEST(ValueMetricProducerTest, TestPushedAggregateSum) { // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(25, curInterval.value.long_value); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(25, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(25, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } -TEST(ValueMetricProducerTest, TestPushedAggregateSumSliced) { - string slicedConditionName = "UID"; - const int conditionTagId = 2; +TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) { ValueMetric metric; metric.set_id(metricId); metric.set_bucket(ONE_MINUTE); metric.mutable_value_field()->set_field(tagId); - metric.mutable_value_field()->add_child()->set_field(1); - metric.set_aggregation_type(ValueMetric::SUM); - - metric.set_condition(StringToId(slicedConditionName)); - MetricConditionLink* link = metric.add_links(); - link->set_condition(StringToId(slicedConditionName)); - buildSimpleAtomFieldMatcher(tagId, 2, link->mutable_fields_in_what()); - buildSimpleAtomFieldMatcher(conditionTagId, 2, link->mutable_fields_in_condition()); - - LogEvent event1(tagId, bucketStartTimeNs + 10); - event1.write(10); // value - event1.write("111"); // uid - event1.init(); - ConditionKey key1; - key1[StringToId(slicedConditionName)] = - {getMockedDimensionKey(conditionTagId, 2, "111")}; - - LogEvent event2(tagId, bucketStartTimeNs + 20); - event2.write(15); - event2.write("222"); - event2.init(); - ConditionKey key2; - key2[StringToId(slicedConditionName)] = - {getMockedDimensionKey(conditionTagId, 2, "222")}; - + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_aggregation_type(ValueMetric::MIN); + metric.set_use_diff(true); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); sp wizard = new NaggyMock(); - EXPECT_CALL(*wizard, query(_, key1, _, _, _, _)).WillOnce(Return(ConditionState::kFalse)); - EXPECT_CALL(*wizard, query(_, key2, _, _, _, _)).WillOnce(Return(ConditionState::kTrue)); - sp pullerManager = new StrictMock(); - ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, -1, bucketStartTimeNs, - bucketStartTimeNs, pullerManager); - - valueProducer.onMatchedLogEvent(1 /*log matcher index*/, event1); + ValueMetricProducer valueProducer(kConfigKey, metric, -1, wizard, logEventMatcherIndex, + eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs, + pullerManager); + shared_ptr event1 = make_shared(tagId, bucketStartTimeNs + 10); + event1->write(1); + event1->write(10); + event1->init(); + shared_ptr event2 = make_shared(tagId, bucketStartTimeNs + 15); + event2->write(1); + event2->write(15); + event2->init(); + valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event1); + // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(10, curInterval.base.long_value); EXPECT_EQ(false, curInterval.hasValue); - valueProducer.onMatchedLogEvent(1 /*log matcher index*/, event2); + valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event2); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); - curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; - EXPECT_EQ(15, curInterval.value.long_value); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasValue); + EXPECT_EQ(5, curInterval.value.long_value); + + // no change in data. + shared_ptr event3 = make_shared(tagId, bucket2StartTimeNs + 10); + event3->write(1); + event3->write(15); + event3->init(); + valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event3); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(15, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); + + shared_ptr event4 = make_shared(tagId, bucket2StartTimeNs + 15); + event4->write(1); + event4->write(15); + event4->init(); + valueProducer.onMatchedLogEvent(1 /*log matcher index*/, *event4); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(15, curInterval.base.long_value); + EXPECT_EQ(true, curInterval.hasValue); valueProducer.flushIfNeededLocked(bucket3StartTimeNs); EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); - EXPECT_EQ(15, valueProducer.mPastBuckets.begin()->second.back().mValueLong); + EXPECT_EQ(5, valueProducer.mPastBuckets.begin()->second.back().values[0].long_value); } } // namespace statsd diff --git a/cmds/statsd/tools/dogfood/Android.bp b/cmds/statsd/tools/dogfood/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..bb494a6025af9a2bb46b5a2dd414f640797fae3e --- /dev/null +++ b/cmds/statsd/tools/dogfood/Android.bp @@ -0,0 +1,37 @@ +// 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. +// +// + +android_app { + name: "StatsdDogfood", + platform_apis: true, + + srcs: ["src/**/*.java"], + + resource_dirs: ["res"], + static_libs: [ + "platformprotoslite", + "statsdprotolite", + ], + + privileged: true, + dex_preopt: { + enabled: false, + }, + certificate: "platform", + optimize: { + enabled: false, + }, +} diff --git a/cmds/statsd/tools/loadtest/Android.bp b/cmds/statsd/tools/loadtest/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..bf87fc51dce1ea1e4ad3b46f13a84d2181a5687e --- /dev/null +++ b/cmds/statsd/tools/loadtest/Android.bp @@ -0,0 +1,37 @@ +// 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. +// +// + +android_app { + name: "StatsdLoadtest", + platform_apis: true, + + srcs: ["src/**/*.java"], + + resource_dirs: ["res"], + static_libs: [ + "platformprotoslite", + "statsdprotolite", + ], + + certificate: "platform", + privileged: true, + dex_preopt: { + enabled: false, + }, + optimize: { + enabled: false, + }, +} diff --git a/cmds/statsd/tools/statsd-testdrive/src/com/android/statsd/testdrive/TestDrive.java b/cmds/statsd/tools/statsd-testdrive/src/com/android/statsd/testdrive/TestDrive.java index ae3e5a1b1dfa1dc557a141b473fa5731d9f6cc42..cc4e386bfdf0a856863312cee4c2088dd48eef4a 100644 --- a/cmds/statsd/tools/statsd-testdrive/src/com/android/statsd/testdrive/TestDrive.java +++ b/cmds/statsd/tools/statsd-testdrive/src/com/android/statsd/testdrive/TestDrive.java @@ -31,7 +31,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; import java.util.logging.Level; +import java.util.logging.LogRecord; import java.util.logging.Logger; public class TestDrive { @@ -68,6 +71,12 @@ public class TestDrive { mIsPushedAtom = atomId < PULL_ATOM_START; TestDrive testDrive = new TestDrive(); + TestDriveFormatter formatter = new TestDriveFormatter(); + ConsoleHandler handler = new ConsoleHandler(); + handler.setFormatter(formatter); + logger.addHandler(handler); + logger.setUseParentHandlers(false); + try { StatsdConfig config = testDrive.createConfig(atomId); if (config == null) { @@ -79,7 +88,8 @@ public class TestDrive { logger.info(config.toString()); if (mIsPushedAtom) { logger.info( - "Now please play with the device to trigger the event. All events should be dumped after 1 min ..."); + "Now please play with the device to trigger the event. All events should " + + "be dumped after 1 min ..."); Thread.sleep(60_000); } else { // wait for 2 min @@ -140,7 +150,7 @@ public class TestDrive { // Check result if (process.waitFor() == 0) { - logger.info("Success!"); + logger.fine("Success!"); } else { // Abnormal termination: Log command parameters and output and throw ExecutionException logger.log(Level.SEVERE, out.toString()); @@ -235,8 +245,8 @@ public class TestDrive { ConfigMetricsReport report = reportList.getReports(reportList.getReportsCount() - 1); // Really should be only one metric. if (report.getMetricsCount() != 1) { - logger.log(Level.SEVERE, "Only one report metric expected, got " - + report.getMetricsCount()); + logger.log(Level.SEVERE, + "Only one report metric expected, got " + report.getMetricsCount()); return; } @@ -283,4 +293,10 @@ public class TestDrive { + "allowed_log_source: \"AID_BLUETOOTH\"\n" + "\n" + "hash_strings_in_metric_report: false"; + + public static class TestDriveFormatter extends Formatter { + public String format(LogRecord record) { + return record.getMessage() + "\n"; + } + } } diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt index be9ccec7ec862b9b733baaeb0f9483983cd5ced1..e5764f043b0e6af7e4f78f1a62cb4d796060e9c8 100644 --- a/config/boot-image-profile.txt +++ b/config/boot-image-profile.txt @@ -2184,6 +2184,56 @@ HPLandroid/graphics/drawable/VectorDrawable$VPath$1;->set(Ljava/lang/Object;Ljav HPLandroid/graphics/drawable/VectorDrawable$VPath;->setPathData(Landroid/util/PathParser$PathData;)V HPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getProperty(Ljava/lang/String;)Landroid/util/Property; HPLandroid/graphics/drawable/VectorDrawable;->getOpticalInsets()Landroid/graphics/Insets; +HPLandroid/graphics/text/LineBreaker;->(III[ILandroid/graphics/text/LineBreaker$1;)V +HPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result; +HPLandroid/graphics/text/LineBreaker;->access$100()J +HPLandroid/graphics/text/LineBreaker;->access$200(J)I +HPLandroid/graphics/text/LineBreaker;->access$300(JI)I +HPLandroid/graphics/text/LineBreaker;->access$400(JI)F +HPLandroid/graphics/text/LineBreaker;->access$500(JI)F +HPLandroid/graphics/text/LineBreaker;->access$600(JI)F +HPLandroid/graphics/text/LineBreaker;->access$700(JI)I +HPLandroid/graphics/text/LineBreaker$Builder;->()V +HPLandroid/graphics/text/LineBreaker$Builder;->setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder; +HPLandroid/graphics/text/LineBreaker$Builder;->setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder; +HPLandroid/graphics/text/LineBreaker$Builder;->setJustified(I)Landroid/graphics/text/LineBreaker$Builder; +HPLandroid/graphics/text/LineBreaker$Builder;->setIndents([I)Landroid/graphics/text/LineBreaker$Builder; +HPLandroid/graphics/text/LineBreaker$Builder;->build()Landroid/graphics/text/LineBreaker; +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->()V +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([II)V +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getWidth()F +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getFirstWidth()F +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getFirstWidthLineCount()I +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getTabStops()[I +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->getDefaultTabStop()I +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$800(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$900(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1000(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)F +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1100(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)[I +HPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->access$1200(Landroid/graphics/text/LineBreaker$ParagraphConstraints;)I +HPLandroid/graphics/text/LineBreaker$Result;->(JLandroid/graphics/text/LineBreaker$1;)V +HPLandroid/graphics/text/LineBreaker$Result;->getLineCount()I +HPLandroid/graphics/text/LineBreaker$Result;->getLineBreakOffset(I)I +HPLandroid/graphics/text/LineBreaker$Result;->getLineWidth(I)F +HPLandroid/graphics/text/LineBreaker$Result;->getLineAscent(I)F +HPLandroid/graphics/text/LineBreaker$Result;->getLineDescent(I)F +HPLandroid/graphics/text/LineBreaker$Result;->hasLineTab(I)Z +HPLandroid/graphics/text/LineBreaker$Result;->getLineHyphenEdit(I)I +HPLandroid/graphics/text/MeasuredText;->(J[CLandroid/graphics/text/MeasuredText$1;)V +HPLandroid/graphics/text/MeasuredText;->getChars()[C +HPLandroid/graphics/text/MeasuredText;->getWidth(II)F +HPLandroid/graphics/text/MeasuredText;->getMemoryUsage()I +HPLandroid/graphics/text/MeasuredText;->getBounds(IILandroid/graphics/Rect;)V +HPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F +HPLandroid/graphics/text/MeasuredText;->getNativePtr()J +HPLandroid/graphics/text/MeasuredText$Builder;->([C)V +HPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder; +HPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder; +HPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder; +HPLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder; +HPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText; HPLandroid/hardware/Camera$AutoFocusCallback;->onAutoFocus(ZLandroid/hardware/Camera;)V HPLandroid/hardware/Camera$EventHandler;->handleMessage(Landroid/os/Message;)V HPLandroid/hardware/Camera$Parameters;->getFlashMode()Ljava/lang/String; @@ -6414,6 +6464,38 @@ HPLandroid/util/proto/EncodedBuffer;->startEditing()V HPLandroid/util/proto/EncodedBuffer;->writeFromThisBuffer(II)V HPLandroid/util/proto/EncodedBuffer;->writeRawBuffer([BII)V HPLandroid/util/proto/EncodedBuffer;->writeRawFixed64(J)V +HPLandroid/util/proto/ProtoInputStream;->(Ljava/io/InputStream;I)V +HPLandroid/util/proto/ProtoInputStream;->(Ljava/io/InputStream;)V +HPLandroid/util/proto/ProtoInputStream;->([B)V +HPLandroid/util/proto/ProtoInputStream;->getFieldNumber()I +HPLandroid/util/proto/ProtoInputStream;->getWireType()I +HPLandroid/util/proto/ProtoInputStream;->getOffset()I +HPLandroid/util/proto/ProtoInputStream;->nextField()I +HPLandroid/util/proto/ProtoInputStream;->isNextField(J)Z +HPLandroid/util/proto/ProtoInputStream;->readDouble(J)D +HPLandroid/util/proto/ProtoInputStream;->readFloat(J)F +HPLandroid/util/proto/ProtoInputStream;->readInt(J)I +HPLandroid/util/proto/ProtoInputStream;->readLong(J)J +HPLandroid/util/proto/ProtoInputStream;->readBoolean(J)Z +HPLandroid/util/proto/ProtoInputStream;->readString(J)Ljava/lang/String; +HPLandroid/util/proto/ProtoInputStream;->readBytes(J)[B +HPLandroid/util/proto/ProtoInputStream;->start(J)J +HPLandroid/util/proto/ProtoInputStream;->end(J)V +HPLandroid/util/proto/ProtoInputStream;->readTag()V +HPLandroid/util/proto/ProtoInputStream;->decodeZigZag32(I)I +HPLandroid/util/proto/ProtoInputStream;->decodeZigZag64(J)J +HPLandroid/util/proto/ProtoInputStream;->readVarint()J +HPLandroid/util/proto/ProtoInputStream;->readFixed32()I +HPLandroid/util/proto/ProtoInputStream;->readFixed64()J +HPLandroid/util/proto/ProtoInputStream;->readRawBytes(I)[B +HPLandroid/util/proto/ProtoInputStream;->readRawString(I)Ljava/lang/String; +HPLandroid/util/proto/ProtoInputStream;->fillBuffer()V +HPLandroid/util/proto/ProtoInputStream;->skip()V +HPLandroid/util/proto/ProtoInputStream;->incOffset(I)V +HPLandroid/util/proto/ProtoInputStream;->checkPacked(J)V +HPLandroid/util/proto/ProtoInputStream;->assertFieldNumber(J)V +HPLandroid/util/proto/ProtoInputStream;->assertWireType(I)V +HPLandroid/util/proto/ProtoInputStream;->assertFreshData()V HPLandroid/util/proto/ProtoOutputStream;->(Ljava/io/FileDescriptor;)V HPLandroid/util/proto/ProtoOutputStream;->(Ljava/io/OutputStream;)V HPLandroid/util/proto/ProtoOutputStream;->compactIfNecessary()V @@ -13113,7 +13195,7 @@ HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionCancelled()V HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionFinished()V HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionStarting(Landroid/util/SparseIntArray;J)V HSPLandroid/app/ActivityManagerInternal;->notifyDockedStackMinimizedChanged(Z)V -HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;)V +HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;I)V HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardTrustedChanged()V HSPLandroid/app/ActivityManagerInternal;->notifyNetworkPolicyRulesUpdated(IJ)V HSPLandroid/app/ActivityManagerInternal;->onLocalVoiceInteractionStarted(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)V @@ -24131,7 +24213,90 @@ HSPLandroid/icu/util/CharsTrie;->jumpByDelta(Ljava/lang/CharSequence;I)I HSPLandroid/icu/util/CharsTrie;->next(I)Landroid/icu/util/BytesTrie$Result; HSPLandroid/icu/util/CharsTrie;->nextImpl(II)Landroid/icu/util/BytesTrie$Result; HSPLandroid/icu/util/CharsTrie;->readValue(Ljava/lang/CharSequence;II)I -HSPLandroid/icu/util/Currency$1;->()V +HSPLandroid/icu/util/CodePointTrie$Small8;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Small8; +HSPLandroid/icu/util/CodePointTrie$Small32;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Small32; +HSPLandroid/icu/util/CodePointTrie$Small16;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Small16; +HSPLandroid/icu/util/CodePointTrie$Fast8;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Fast8; +HSPLandroid/icu/util/CodePointTrie$Fast8;->bmpGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I +HSPLandroid/icu/util/CodePointTrie$Fast8;->suppGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast32;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Fast32; +HSPLandroid/icu/util/CodePointTrie$Fast32;->bmpGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast32;->get(I)I +HSPLandroid/icu/util/CodePointTrie$Fast32;->suppGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast16;->fromBinary(Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Fast16; +HSPLandroid/icu/util/CodePointTrie$Fast16;->bmpGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast16;->get(I)I +HSPLandroid/icu/util/CodePointTrie$Fast16;->suppGet(I)I +HSPLandroid/icu/util/CodePointTrie$Small;->fromBinary(Landroid/icu/util/CodePointTrie$ValueWidth;Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Small; +HSPLandroid/icu/util/CodePointTrie$Small;->cpIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Small;->getType()Landroid/icu/util/CodePointTrie$Type; +HSPLandroid/icu/util/CodePointTrie$Small;->stringIterator(Ljava/lang/CharSequence;I)Landroid/icu/util/CodePointMap$StringIterator; +HSPLandroid/icu/util/CodePointTrie$Fast;->fromBinary(Landroid/icu/util/CodePointTrie$ValueWidth;Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie$Fast; +HSPLandroid/icu/util/CodePointTrie$Fast;->bmpGet(I)I +HSPLandroid/icu/util/CodePointTrie$Fast;->cpIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Fast;->getType()Landroid/icu/util/CodePointTrie$Type; +HSPLandroid/icu/util/CodePointTrie$Fast;->stringIterator(Ljava/lang/CharSequence;I)Landroid/icu/util/CodePointMap$StringIterator; +HSPLandroid/icu/util/CodePointTrie$Fast;->suppGet(I)I +HSPLandroid/icu/util/CodePointTrie$Data8;->getDataLength()I +HSPLandroid/icu/util/CodePointTrie$Data8;->getFromIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Data8;->getValueWidth()Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$Data8;->write(Ljava/io/DataOutputStream;)I +HSPLandroid/icu/util/CodePointTrie$Data32;->getDataLength()I +HSPLandroid/icu/util/CodePointTrie$Data32;->getFromIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Data32;->getValueWidth()Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$Data32;->write(Ljava/io/DataOutputStream;)I +HSPLandroid/icu/util/CodePointTrie$Data16;->getDataLength()I +HSPLandroid/icu/util/CodePointTrie$Data16;->getFromIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Data16;->getValueWidth()Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$Data16;->write(Ljava/io/DataOutputStream;)I +HSPLandroid/icu/util/CodePointTrie$Data;->getDataLength()I +HSPLandroid/icu/util/CodePointTrie$Data;->getFromIndex(I)I +HSPLandroid/icu/util/CodePointTrie$Data;->getValueWidth()Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$Data;->write(Ljava/io/DataOutputStream;)I +HSPLandroid/icu/util/CodePointTrie$ValueWidth;->valueOf(Ljava/lang/String;)Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$ValueWidth;->values()[Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie$Type;->valueOf(Ljava/lang/String;)Landroid/icu/util/CodePointTrie$Type; +HSPLandroid/icu/util/CodePointTrie$Type;->values()[Landroid/icu/util/CodePointTrie$Type; +HSPLandroid/icu/util/CodePointTrie;->fromBinary(Landroid/icu/util/CodePointTrie$Type;Landroid/icu/util/CodePointTrie$ValueWidth;Ljava/nio/ByteBuffer;)Landroid/icu/util/CodePointTrie; +HSPLandroid/icu/util/CodePointTrie;->internalSmallIndex(Landroid/icu/util/CodePointTrie$Type;I)I +HSPLandroid/icu/util/CodePointTrie;->maybeFilterValue(IIILandroid/icu/util/CodePointMap$ValueFilter;)I +HSPLandroid/icu/util/CodePointTrie;->asciiGet(I)I +HSPLandroid/icu/util/CodePointTrie;->cpIndex(I)I +HSPLandroid/icu/util/CodePointTrie;->fastIndex(I)I +HSPLandroid/icu/util/CodePointTrie;->get(I)I +HSPLandroid/icu/util/CodePointTrie;->getRange(ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z +HSPLandroid/icu/util/CodePointTrie;->getType()Landroid/icu/util/CodePointTrie$Type; +HSPLandroid/icu/util/CodePointTrie;->getValueWidth()Landroid/icu/util/CodePointTrie$ValueWidth; +HSPLandroid/icu/util/CodePointTrie;->smallIndex(Landroid/icu/util/CodePointTrie$Type;I)I +HSPLandroid/icu/util/CodePointTrie;->toBinary(Ljava/io/OutputStream;)I +HSPLandroid/icu/util/CodePointMap$StringIterator;->getCodePoint()I +HSPLandroid/icu/util/CodePointMap$StringIterator;->getIndex()I +HSPLandroid/icu/util/CodePointMap$StringIterator;->getValue()I +HSPLandroid/icu/util/CodePointMap$StringIterator;->next()Z +HSPLandroid/icu/util/CodePointMap$StringIterator;->previous()Z +HSPLandroid/icu/util/CodePointMap$StringIterator;->reset(Ljava/lang/CharSequence;I)V +HSPLandroid/icu/util/CodePointMap$RangeIterator;->hasNext()Z +HSPLandroid/icu/util/CodePointMap$RangeIterator;->next()Landroid/icu/util/CodePointMap$Range; +HSPLandroid/icu/util/CodePointMap$RangeIterator;->next()Ljava/lang/Object; +HSPLandroid/icu/util/CodePointMap$RangeIterator;->remove()V +HSPLandroid/icu/util/CodePointMap$Range;->access$000(Landroid/icu/util/CodePointMap$Range;)I +HSPLandroid/icu/util/CodePointMap$Range;->access$002(Landroid/icu/util/CodePointMap$Range;I)I +HSPLandroid/icu/util/CodePointMap$Range;->access$100(Landroid/icu/util/CodePointMap$Range;)I +HSPLandroid/icu/util/CodePointMap$Range;->access$102(Landroid/icu/util/CodePointMap$Range;I)I +HSPLandroid/icu/util/CodePointMap$Range;->access$202(Landroid/icu/util/CodePointMap$Range;I)I +HSPLandroid/icu/util/CodePointMap$Range;->getEnd()I +HSPLandroid/icu/util/CodePointMap$Range;->getStart()I +HSPLandroid/icu/util/CodePointMap$Range;->getValue()I +HSPLandroid/icu/util/CodePointMap$Range;->set(III)V +HSPLandroid/icu/util/CodePointMap$ValueFilter;->apply(I)I +HSPLandroid/icu/util/CodePointMap$RangeOption;->valueOf(Ljava/lang/String;)Landroid/icu/util/CodePointMap$RangeOption; +HSPLandroid/icu/util/CodePointMap$RangeOption;->values()[Landroid/icu/util/CodePointMap$RangeOption; +HSPLandroid/icu/util/CodePointMap;->get(I)I +HSPLandroid/icu/util/CodePointMap;->getRange(ILandroid/icu/util/CodePointMap$RangeOption;ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z +HSPLandroid/icu/util/CodePointMap;->getRange(ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z +HSPLandroid/icu/util/CodePointMap;->iterator()Ljava/util/Iterator; +HSPLandroid/icu/util/CodePointMap;->stringIterator(Ljava/lang/CharSequence;I)Landroid/icu/util/CodePointMap$StringIterator;HSPLandroid/icu/util/Currency$1;->()V HSPLandroid/icu/util/Currency$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroid/icu/util/Currency$1;->createInstance(Ljava/lang/String;Ljava/lang/Void;)Landroid/icu/util/Currency; HSPLandroid/icu/util/Currency$CurrencyUsage;->(Ljava/lang/String;I)V @@ -24177,6 +24342,61 @@ HSPLandroid/icu/util/MeasureUnit;->addUnit(Ljava/lang/String;Ljava/lang/String;L HSPLandroid/icu/util/MeasureUnit;->equals(Ljava/lang/Object;)Z HSPLandroid/icu/util/MeasureUnit;->hashCode()I HSPLandroid/icu/util/MeasureUnit;->internalGetInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/MeasureUnit; +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->addEntry([I[CIII)V +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findEntry([III)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findEntry([I[C[I[CII)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->makeHashCode(I)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->makeHashCode([CI)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->makeHashCode([II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->modulo(II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->nextIndex(II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->extend([CIII)V +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->extend([IIII)V +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findAllSameBlock([II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findBlock([C[CI)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findBlock([C[II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->findBlock([I[II)I +HSPLandroid/icu/util/MutableCodePointTrie$MixedBlocks;->init(II)V +HSPLandroid/icu/util/MutableCodePointTrie$AllSameBlocks;->add(III)V +HSPLandroid/icu/util/MutableCodePointTrie$AllSameBlocks;->findMostUsed()I +HSPLandroid/icu/util/MutableCodePointTrie$AllSameBlocks;->findOrAdd(III)I +HSPLandroid/icu/util/MutableCodePointTrie;->access$000([II[III)Z +HSPLandroid/icu/util/MutableCodePointTrie;->access$100([CI[III)Z +HSPLandroid/icu/util/MutableCodePointTrie;->access$200([CI[CII)Z +HSPLandroid/icu/util/MutableCodePointTrie;->access$300([IIII)Z +HSPLandroid/icu/util/MutableCodePointTrie;->allValuesSameAs([IIII)Z +HSPLandroid/icu/util/MutableCodePointTrie;->allocDataBlock(I)I +HSPLandroid/icu/util/MutableCodePointTrie;->build(Landroid/icu/util/CodePointTrie$Type;Landroid/icu/util/CodePointTrie$ValueWidth;)Landroid/icu/util/CodePointTrie; +HSPLandroid/icu/util/MutableCodePointTrie;->clear()V +HSPLandroid/icu/util/MutableCodePointTrie;->compactData(I[IILandroid/icu/util/MutableCodePointTrie$MixedBlocks;)I +HSPLandroid/icu/util/MutableCodePointTrie;->compactIndex(ILandroid/icu/util/MutableCodePointTrie$MixedBlocks;)I +HSPLandroid/icu/util/MutableCodePointTrie;->compactTrie(I)I +HSPLandroid/icu/util/MutableCodePointTrie;->compactWholeDataBlocks(ILandroid/icu/util/MutableCodePointTrie$AllSameBlocks;)I +HSPLandroid/icu/util/MutableCodePointTrie;->ensureHighStart(I)V +HSPLandroid/icu/util/MutableCodePointTrie;->equalBlocks([CI[CII)Z +HSPLandroid/icu/util/MutableCodePointTrie;->equalBlocks([CI[III)Z +HSPLandroid/icu/util/MutableCodePointTrie;->equalBlocks([II[III)Z +HSPLandroid/icu/util/MutableCodePointTrie;->fillBlock(IIII)V +HSPLandroid/icu/util/MutableCodePointTrie;->findAllSameBlock([IIIII)I +HSPLandroid/icu/util/MutableCodePointTrie;->findHighStart()I +HSPLandroid/icu/util/MutableCodePointTrie;->findSameBlock([CII[CII)I +HSPLandroid/icu/util/MutableCodePointTrie;->fromCodePointMap(Landroid/icu/util/CodePointMap;)Landroid/icu/util/MutableCodePointTrie; +HSPLandroid/icu/util/MutableCodePointTrie;->getAllSameOverlap([IIII)I +HSPLandroid/icu/util/MutableCodePointTrie;->getDataBlock(I)I +HSPLandroid/icu/util/MutableCodePointTrie;->getOverlap([CI[CII)I +HSPLandroid/icu/util/MutableCodePointTrie;->getOverlap([CI[III)I +HSPLandroid/icu/util/MutableCodePointTrie;->getOverlap([II[III)I +HSPLandroid/icu/util/MutableCodePointTrie;->isStartOfSomeFastBlock(I[II)Z +HSPLandroid/icu/util/MutableCodePointTrie;->maskValues(I)V +HSPLandroid/icu/util/MutableCodePointTrie;->maybeFilterValue(IIILandroid/icu/util/CodePointMap$ValueFilter;)I +HSPLandroid/icu/util/MutableCodePointTrie;->writeBlock(II)V +HSPLandroid/icu/util/MutableCodePointTrie;->buildImmutable(Landroid/icu/util/CodePointTrie$Type;Landroid/icu/util/CodePointTrie$ValueWidth;)Landroid/icu/util/CodePointTrie; +HSPLandroid/icu/util/MutableCodePointTrie;->clone()Landroid/icu/util/MutableCodePointTrie; +HSPLandroid/icu/util/MutableCodePointTrie;->clone()Ljava/lang/Object; +HSPLandroid/icu/util/MutableCodePointTrie;->get(I)I +HSPLandroid/icu/util/MutableCodePointTrie;->getRange(ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z +HSPLandroid/icu/util/MutableCodePointTrie;->set(II)V +HSPLandroid/icu/util/MutableCodePointTrie;->setRange(III)V HSPLandroid/icu/util/SimpleTimeZone;->(ILjava/lang/String;IIIIIIIIIII)V HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object; HSPLandroid/icu/util/SimpleTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone; @@ -31218,9 +31438,10 @@ HSPLandroid/text/Layout;->replaceWith(Ljava/lang/CharSequence;Landroid/text/Text HSPLandroid/text/Layout;->setJustificationMode(I)V HSPLandroid/text/Layout;->shouldClampCursor(I)Z HSPLandroid/text/MeasuredParagraph;->()V -HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;IIJ)V -HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IIJ)V -HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IIJ)V +HPLandroid/text/MeasuredParagraph;->getMeasuredText()Landroid/graphics/text/MeasuredText; +HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;IILandroid/graphics/text/MeasuredText$Builder;)V +HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/graphics/text/MeasuredText$Builder;)V +HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/graphics/text/MeasuredText$Builder;)V HSPLandroid/text/MeasuredParagraph;->breakText(IZF)I HSPLandroid/text/MeasuredParagraph;->buildForBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph; HSPLandroid/text/MeasuredParagraph;->buildForMeasurement(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph; @@ -31255,6 +31476,7 @@ HSPLandroid/text/PackedObjectVector;->moveRowGapTo(I)V HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V HSPLandroid/text/PackedObjectVector;->size()I HSPLandroid/text/PrecomputedText$Params;->(Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;II)V +HPLandroid/text/PrecomputedText;->getCharWidthAt(I)F HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo; HSPLandroid/text/Selection$END;->(Landroid/text/Selection$1;)V HSPLandroid/text/Selection$MEMORY;->(Landroid/text/Selection$1;)V @@ -32718,15 +32940,8 @@ HSPLandroid/view/IWindowManager;->isViewServerRunning()Z HSPLandroid/view/IWindowManager;->isWindowTraceEnabled()Z HSPLandroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V HSPLandroid/view/IWindowManager;->openSession(Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)Landroid/view/IWindowSession; -HSPLandroid/view/IWindowManager;->overridePendingAppTransition(Ljava/lang/String;IILandroid/os/IRemoteCallback;)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionAspectScaledThumb(Landroid/graphics/GraphicBuffer;IIIILandroid/os/IRemoteCallback;Z)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionClipReveal(IIII)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionInPlace(Ljava/lang/String;I)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumb([Landroid/view/AppTransitionAnimationSpec;Landroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;Z)V HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V HSPLandroid/view/IWindowManager;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionScaleUp(IIII)V -HSPLandroid/view/IWindowManager;->overridePendingAppTransitionThumb(Landroid/graphics/GraphicBuffer;IILandroid/os/IRemoteCallback;Z)V HSPLandroid/view/IWindowManager;->prepareAppTransition(IZ)V HSPLandroid/view/IWindowManager;->reenableKeyguard(Landroid/os/IBinder;)V HSPLandroid/view/IWindowManager;->refreshScreenCaptureDisabled(I)V @@ -58580,6 +58795,7 @@ Landroid/util/apk/WrappedX509Certificate; Landroid/util/apk/ZipUtils; Landroid/util/jar/StrictJarFile; Landroid/util/proto/EncodedBuffer; +Landroid/util/proto/ProtoInputStream; Landroid/util/proto/ProtoOutputStream; Landroid/view/-$$Lambda$FocusFinder$FocusSorter$h0f2ZYL6peSaaEeCCkAoYs_YZvU; Landroid/view/-$$Lambda$FocusFinder$FocusSorter$kW7K1t9q7Y62V38r-7g6xRzqqq8; diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index 857c390450857c385f85798351aad8d38fc8b130..3a1b69c034b644bd443b1561f28eaf3d29ceade7 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -1,4 +1,6 @@ Landroid/accessibilityservice/IAccessibilityServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accessibilityservice/IAccessibilityServiceConnection; +Landroid/accounts/AccountManager$AmsTask;->(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;)V +Landroid/accounts/AccountManager$Future2Task;->(Landroid/accounts/AccountManager;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;)V Landroid/accounts/IAccountAuthenticator$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/accounts/IAccountAuthenticator$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/accounts/IAccountAuthenticator$Stub;->()V @@ -30,6 +32,7 @@ Landroid/accounts/IAccountManagerResponse;->onResult(Landroid/os/Bundle;)V Landroid/app/ActivityManagerNative;->()V Landroid/app/ActivityThread$AppBindData;->()V Landroid/app/ActivityThread$CreateServiceData;->()V +Landroid/app/ActivityThread$H;->(Landroid/app/ActivityThread;)V Landroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager; Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I @@ -212,6 +215,7 @@ Landroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V Landroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V Landroid/app/PackageDeleteObserver;->()V Landroid/app/PackageInstallObserver;->()V +Landroid/app/ReceiverRestrictedContext;->(Landroid/content/Context;)V Landroid/app/ResourcesManager$ActivityResources;->()V Landroid/app/ResourcesManager;->()V Landroid/app/TaskStackListener;->()V @@ -262,6 +266,7 @@ Landroid/bluetooth/IBluetoothManager;->unregisterStateChangeCallback(Landroid/bl Landroid/bluetooth/IBluetoothManagerCallback$Stub;->()V Landroid/bluetooth/IBluetoothPbap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPbap; Landroid/bluetooth/IBluetoothStateChangeCallback$Stub;->()V +Landroid/content/ContentProviderProxy;->mRemote:Landroid/os/IBinder; Landroid/content/IClipboard$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; Landroid/content/IContentService$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -415,9 +420,14 @@ Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Lan Landroid/content/res/ConfigurationBoundResourceCache;->()V Landroid/content/res/DrawableCache;->()V Landroid/content/UndoManager;->()V +Landroid/database/BulkCursorProxy;->mRemote:Landroid/os/IBinder; Landroid/database/IContentObserver$Stub;->()V Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver; Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V +Landroid/database/sqlite/SQLiteConnectionPool;->$assertionsDisabled:Z +Landroid/database/sqlite/SQLiteDatabase;->$assertionsDisabled:Z +Landroid/filterfw/GraphEnvironment;->addReferences([Ljava/lang/Object;)V +Landroid/hardware/camera2/utils/HashCodeHelpers;->hashCode([I)I Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager; Landroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo; Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -431,37 +441,8 @@ Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->()V Landroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService; Landroid/hardware/usb/IUsbManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager; -Landroid/icu/impl/CurrencyData;->()V -Landroid/icu/text/ArabicShaping;->(I)V -Landroid/icu/text/ArabicShaping;->isAlefMaksouraChar(C)Z -Landroid/icu/text/ArabicShaping;->isSeenTailFamilyChar(C)I -Landroid/icu/text/ArabicShaping;->isTailChar(C)Z -Landroid/icu/text/ArabicShaping;->isYehHamzaChar(C)Z -Landroid/icu/text/ArabicShaping;->shape(Ljava/lang/String;)Ljava/lang/String; -Landroid/icu/text/DateFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; -Landroid/icu/text/DateIntervalFormat;->()V -Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;->()V -Landroid/icu/text/DecimalFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; -Landroid/icu/text/RuleBasedCollator;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; -Landroid/icu/text/SpoofChecker$ScriptSet;->()V -Landroid/icu/text/SpoofChecker$ScriptSet;->and(I)V -Landroid/icu/text/SpoofChecker$ScriptSet;->isFull()Z -Landroid/icu/text/SpoofChecker$ScriptSet;->setAll()V -Landroid/icu/text/TimeZoneNames$DefaultTimeZoneNames$FactoryImpl;->()V -Landroid/icu/text/Transliterator;->createFromRules(Ljava/lang/String;Ljava/lang/String;I)Landroid/icu/text/Transliterator; -Landroid/icu/text/Transliterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/Transliterator; -Landroid/icu/text/Transliterator;->getInstance(Ljava/lang/String;I)Landroid/icu/text/Transliterator; -Landroid/icu/text/Transliterator;->transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Ljava/lang/String;)V -Landroid/icu/text/Transliterator;->transliterate(Ljava/lang/String;)Ljava/lang/String; -Landroid/icu/text/UFormat;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; -Landroid/icu/util/Calendar;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; -Landroid/icu/util/PersianCalendar;->(Ljava/util/Locale;)V -Landroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle; -Landroid/icu/util/UResourceBundle;->getKey()Ljava/lang/String; -Landroid/icu/util/UResourceBundle;->getString()Ljava/lang/String; -Landroid/icu/util/UResourceBundle;->getType()I -Landroid/icu/util/UResourceBundleIterator;->hasNext()Z -Landroid/icu/util/UResourceBundleIterator;->next()Landroid/icu/util/UResourceBundle; +Landroid/inputmethodservice/IInputMethodSessionWrapper;->mCaller:Lcom/android/internal/os/HandlerCaller; +Landroid/inputmethodservice/IInputMethodWrapper;->mCaller:Lcom/android/internal/os/HandlerCaller; Landroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryDetector; Landroid/location/ICountryListener$Stub;->()V Landroid/location/IGeocodeProvider$Stub;->()V @@ -479,9 +460,11 @@ Landroid/location/ILocationManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager; Landroid/location/ILocationManager$Stub;->TRANSACTION_getAllProviders:I Landroid/location/ILocationManager;->getAllProviders()Ljava/util/List; +Landroid/location/LocationManager$ListenerTransport;->(Landroid/location/LocationManager;Landroid/location/LocationListener;Landroid/os/Looper;)V Landroid/Manifest$permission;->CAPTURE_SECURE_VIDEO_OUTPUT:Ljava/lang/String; Landroid/Manifest$permission;->CAPTURE_VIDEO_OUTPUT:Ljava/lang/String; Landroid/Manifest$permission;->READ_FRAME_BUFFER:Ljava/lang/String; +Landroid/media/effect/SingleFilterEffect;->(Landroid/media/effect/EffectContext;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V Landroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V Landroid/media/IAudioRoutesObserver$Stub;->()V Landroid/media/IAudioService$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -500,6 +483,7 @@ Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisp Landroid/media/IRingtonePlayer;->play(Landroid/os/IBinder;Landroid/net/Uri;Landroid/media/AudioAttributes;FZ)V Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController; Landroid/media/MediaFile;->()V +Landroid/media/MediaScanner$MyMediaScannerClient;->(Landroid/media/MediaScanner;)V Landroid/media/projection/IMediaProjectionManager;->hasProjectionPermission(ILjava/lang/String;)Z Landroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager; Landroid/net/IConnectivityManager$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -547,6 +531,7 @@ Landroid/net/INetworkStatsSession;->getSummaryForNetwork(Landroid/net/NetworkTem Landroid/net/MobileLinkQualityInfo;->()V Landroid/net/nsd/INsdManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/nsd/INsdManager; Landroid/net/nsd/INsdManager;->getMessenger()Landroid/os/Messenger; +Landroid/net/sip/ISipSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/sip/ISipSession; Landroid/net/SntpClient;->()V Landroid/net/wifi/IWifiManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager; @@ -637,6 +622,7 @@ Landroid/os/BatteryStats;->computeBatteryRealtime(JI)J Landroid/os/BatteryStats;->computeBatteryTimeRemaining(J)J Landroid/os/BatteryStats;->computeBatteryUptime(JI)J Landroid/os/BatteryStats;->computeChargeTimeRemaining(J)J +Landroid/os/BatteryStats;->dumpLine(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V Landroid/os/BatteryStats;->getBatteryUptime(J)J Landroid/os/BatteryStats;->getGlobalWifiRunningTime(JI)J Landroid/os/BatteryStats;->getMobileRadioActiveTime(JI)J @@ -725,6 +711,7 @@ Landroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Lj Landroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File; Landroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File; Landroid/os/Environment;->buildExternalStorageAppObbDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/Environment;->buildPaths([Ljava/io/File;[Ljava/lang/String;)[Ljava/io/File; Landroid/os/Environment;->getDataSystemDirectory()Ljava/io/File; Landroid/os/Environment;->getLegacyExternalStorageObbDirectory()Ljava/io/File; Landroid/os/Environment;->initForCurrentUser()V @@ -930,6 +917,8 @@ Landroid/os/ServiceManager;->listServices()[Ljava/lang/String; Landroid/os/ServiceManager;->sCache:Ljava/util/Map; Landroid/os/ServiceManager;->sServiceManager:Landroid/os/IServiceManager; Landroid/os/ServiceManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager; +Landroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/ServiceManagerProxy;->mRemote:Landroid/os/IBinder; Landroid/os/ServiceSpecificException;->(ILjava/lang/String;)V Landroid/os/SharedMemory;->getFd()I Landroid/os/ShellCommand;->peekNextArg()Ljava/lang/String; @@ -1064,6 +1053,10 @@ Landroid/os/WorkSource;->sTmpWorkSource:Landroid/os/WorkSource; Landroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z Landroid/os/ZygoteStartFailedEx;->(Ljava/lang/String;)V Landroid/os/ZygoteStartFailedEx;->(Ljava/lang/Throwable;)V +<<<<<<< HEAD +======= +Landroid/preference/PreferenceGroupAdapter;->getItem(I)Landroid/preference/Preference; +>>>>>>> 5a05000482abc03a74556ae0e289172eb0ae5607 Landroid/R$styleable;->ActionBar:[I Landroid/R$styleable;->ActionBar_background:I Landroid/R$styleable;->ActionBar_backgroundSplit:I @@ -1330,22 +1323,28 @@ Landroid/R$styleable;->Window_windowFrame:I Landroid/security/Credentials;->convertToPem([Ljava/security/cert/Certificate;)[B Landroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService; Landroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String; -Landroid/security/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeystoreService; -Landroid/security/IKeystoreService;->clear_uid(J)I -Landroid/security/IKeystoreService;->del(Ljava/lang/String;I)I -Landroid/security/IKeystoreService;->exist(Ljava/lang/String;I)I -Landroid/security/IKeystoreService;->generateKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BIILandroid/security/keymaster/KeyCharacteristics;)I -Landroid/security/IKeystoreService;->get(Ljava/lang/String;I)[B -Landroid/security/IKeystoreService;->getState(I)I -Landroid/security/IKeystoreService;->get_pubkey(Ljava/lang/String;)[B -Landroid/security/IKeystoreService;->import_key(Ljava/lang/String;[BII)I -Landroid/security/IKeystoreService;->insert(Ljava/lang/String;[BII)I -Landroid/security/IKeystoreService;->is_hardware_backed(Ljava/lang/String;)I -Landroid/security/IKeystoreService;->list(Ljava/lang/String;I)[Ljava/lang/String; -Landroid/security/IKeystoreService;->reset()I -Landroid/security/IKeystoreService;->sign(Ljava/lang/String;[B)[B -Landroid/security/IKeystoreService;->ungrant(Ljava/lang/String;I)I -Landroid/security/IKeystoreService;->verify(Ljava/lang/String;[B[B)I +Landroid/security/keymaster/KeymasterBlobArgument;->(ILandroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterBlobArgument;->(I[B)V +Landroid/security/keymaster/KeymasterBlobArgument;->blob:[B +Landroid/security/keymaster/KeymasterBooleanArgument;->(ILandroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterDateArgument;->(ILandroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterIntArgument;->(II)V +Landroid/security/keymaster/KeymasterIntArgument;->(ILandroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterIntArgument;->value:I +Landroid/security/keymaster/KeymasterLongArgument;->(IJ)V +Landroid/security/keymaster/KeymasterLongArgument;->(ILandroid/os/Parcel;)V +Landroid/security/keymaster/KeymasterLongArgument;->value:J +Landroid/security/keystore/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/keystore/IKeystoreService; +Landroid/security/keystore/IKeystoreService;->clear_uid(J)I +Landroid/security/keystore/IKeystoreService;->del(Ljava/lang/String;I)I +Landroid/security/keystore/IKeystoreService;->exist(Ljava/lang/String;I)I +Landroid/security/keystore/IKeystoreService;->get(Ljava/lang/String;I)[B +Landroid/security/keystore/IKeystoreService;->getState(I)I +Landroid/security/keystore/IKeystoreService;->insert(Ljava/lang/String;[BII)I +Landroid/security/keystore/IKeystoreService;->is_hardware_backed(Ljava/lang/String;)I +Landroid/security/keystore/IKeystoreService;->list(Ljava/lang/String;I)[Ljava/lang/String; +Landroid/security/keystore/IKeystoreService;->reset()I +Landroid/security/keystore/IKeystoreService;->ungrant(Ljava/lang/String;I)I Landroid/service/carrier/ICarrierMessagingCallback$Stub;->()V Landroid/service/carrier/ICarrierMessagingService;->filterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/ICarrierMessagingCallback;)V Landroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager; @@ -1383,65 +1382,46 @@ Landroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lan Landroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V Landroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService; Landroid/speech/IRecognitionListener;->onEvent(ILandroid/os/Bundle;)V -Landroid/system/Int32Ref;->value:I -Landroid/system/OsConstants;->()V -Landroid/system/OsConstants;->AF_NETLINK:I -Landroid/system/OsConstants;->AF_PACKET:I -Landroid/system/OsConstants;->ARPHRD_ETHER:I -Landroid/system/OsConstants;->ARPHRD_LOOPBACK:I -Landroid/system/OsConstants;->CAP_TO_INDEX(I)I -Landroid/system/OsConstants;->CAP_TO_MASK(I)I -Landroid/system/OsConstants;->ENONET:I -Landroid/system/OsConstants;->ETH_P_ALL:I -Landroid/system/OsConstants;->ETH_P_ARP:I -Landroid/system/OsConstants;->ETH_P_IP:I -Landroid/system/OsConstants;->ETH_P_IPV6:I -Landroid/system/OsConstants;->EUSERS:I -Landroid/system/OsConstants;->ICMP6_ECHO_REPLY:I -Landroid/system/OsConstants;->ICMP6_ECHO_REQUEST:I -Landroid/system/OsConstants;->ICMP_ECHO:I -Landroid/system/OsConstants;->ICMP_ECHOREPLY:I -Landroid/system/OsConstants;->initConstants()V -Landroid/system/OsConstants;->IP_MULTICAST_ALL:I -Landroid/system/OsConstants;->IP_RECVTOS:I -Landroid/system/OsConstants;->MAP_POPULATE:I -Landroid/system/OsConstants;->NETLINK_NETFILTER:I -Landroid/system/OsConstants;->NETLINK_ROUTE:I -Landroid/system/OsConstants;->O_DIRECT:I -Landroid/system/OsConstants;->placeholder()I -Landroid/system/OsConstants;->PR_CAP_AMBIENT:I -Landroid/system/OsConstants;->PR_CAP_AMBIENT_RAISE:I -Landroid/system/OsConstants;->RLIMIT_NOFILE:I -Landroid/system/OsConstants;->RTMGRP_IPV4_IFADDR:I -Landroid/system/OsConstants;->RTMGRP_IPV4_MROUTE:I -Landroid/system/OsConstants;->RTMGRP_IPV4_ROUTE:I -Landroid/system/OsConstants;->RTMGRP_IPV4_RULE:I -Landroid/system/OsConstants;->RTMGRP_IPV6_IFADDR:I -Landroid/system/OsConstants;->RTMGRP_IPV6_IFINFO:I -Landroid/system/OsConstants;->RTMGRP_IPV6_MROUTE:I -Landroid/system/OsConstants;->RTMGRP_IPV6_PREFIX:I -Landroid/system/OsConstants;->RTMGRP_IPV6_ROUTE:I -Landroid/system/OsConstants;->RTMGRP_LINK:I -Landroid/system/OsConstants;->RTMGRP_NEIGH:I -Landroid/system/OsConstants;->RTMGRP_NOTIFY:I -Landroid/system/OsConstants;->RTMGRP_TC:I -Landroid/system/OsConstants;->SO_DOMAIN:I -Landroid/system/OsConstants;->SO_PROTOCOL:I -Landroid/system/OsConstants;->SPLICE_F_MORE:I -Landroid/system/OsConstants;->SPLICE_F_MOVE:I -Landroid/system/OsConstants;->SPLICE_F_NONBLOCK:I -Landroid/system/OsConstants;->TIOCOUTQ:I -Landroid/system/OsConstants;->UDP_ENCAP:I -Landroid/system/OsConstants;->UDP_ENCAP_ESPINUDP:I -Landroid/system/OsConstants;->UDP_ENCAP_ESPINUDP_NON_IKE:I -Landroid/system/OsConstants;->UNIX_PATH_MAX:I -Landroid/system/OsConstants;->XATTR_CREATE:I -Landroid/system/OsConstants;->XATTR_REPLACE:I -Landroid/system/OsConstants;->_LINUX_CAPABILITY_VERSION_3:I -Landroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval; +Landroid/telecom/Log;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V +Landroid/telecom/Log;->w(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V Landroid/telephony/CarrierMessagingServiceManager;->()V +<<<<<<< HEAD Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; +======= +Landroid/telephony/JapanesePhoneNumberFormatter;->format(Landroid/text/Editable;)V +Landroid/telephony/SmsCbCmasInfo;->getCategory()I +Landroid/telephony/SmsCbCmasInfo;->getCertainty()I +Landroid/telephony/SmsCbCmasInfo;->getMessageClass()I +Landroid/telephony/SmsCbCmasInfo;->getResponseType()I +Landroid/telephony/SmsCbCmasInfo;->getSeverity()I +Landroid/telephony/SmsCbCmasInfo;->getUrgency()I +Landroid/telephony/SmsCbEtwsInfo;->getWarningType()I +Landroid/telephony/SmsCbLocation;->(Ljava/lang/String;)V +Landroid/telephony/SmsCbLocation;->(Ljava/lang/String;II)V +Landroid/telephony/SmsCbLocation;->getCid()I +Landroid/telephony/SmsCbLocation;->getLac()I +Landroid/telephony/SmsCbLocation;->getPlmn()Ljava/lang/String; +Landroid/telephony/SmsCbMessage;->(Landroid/os/Parcel;)V +Landroid/telephony/SmsCbMessage;->getCmasWarningInfo()Landroid/telephony/SmsCbCmasInfo; +Landroid/telephony/SmsCbMessage;->getEtwsWarningInfo()Landroid/telephony/SmsCbEtwsInfo; +Landroid/telephony/SmsCbMessage;->getGeographicalScope()I +Landroid/telephony/SmsCbMessage;->getLanguageCode()Ljava/lang/String; +Landroid/telephony/SmsCbMessage;->getLocation()Landroid/telephony/SmsCbLocation; +Landroid/telephony/SmsCbMessage;->getMessageBody()Ljava/lang/String; +Landroid/telephony/SmsCbMessage;->getMessageFormat()I +Landroid/telephony/SmsCbMessage;->getSerialNumber()I +Landroid/telephony/SmsCbMessage;->getServiceCategory()I +Landroid/telephony/SmsCbMessage;->isCmasMessage()Z +Landroid/telephony/SmsCbMessage;->isEmergencyMessage()Z +Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; +Landroid/test/AndroidTestCase;->getTestContext()Landroid/content/Context; +Landroid/test/AndroidTestCase;->setTestContext(Landroid/content/Context;)V +Landroid/test/InstrumentationTestCase;->runMethod(Ljava/lang/reflect/Method;I)V +Landroid/test/RepetitiveTest;->numIterations()I +>>>>>>> 5a05000482abc03a74556ae0e289172eb0ae5607 Landroid/util/Singleton;->()V +Landroid/util/XmlPullAttributes;->(Lorg/xmlpull/v1/XmlPullParser;)V +Landroid/util/XmlPullAttributes;->mParser:Lorg/xmlpull/v1/XmlPullParser; Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfoResult(Landroid/view/accessibility/AccessibilityNodeInfo;I)V Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setPerformAccessibilityActionResult(ZI)V @@ -1474,7 +1454,6 @@ Landroid/view/IWindowManager;->getBaseDisplaySize(ILandroid/graphics/Point;)V Landroid/view/IWindowManager;->getDockedStackSide()I Landroid/view/IWindowManager;->getInitialDisplayDensity(I)I Landroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V -Landroid/view/IWindowManager;->getPendingAppTransition()I Landroid/view/IWindowManager;->hasNavigationBar()Z Landroid/view/IWindowManager;->isKeyguardLocked()Z Landroid/view/IWindowManager;->isKeyguardSecure()Z @@ -1500,7 +1479,12 @@ Landroid/view/IWindowSession;->setInTouchMode(Z)V Landroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V Landroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V Landroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V +<<<<<<< HEAD +======= +Landroid/view/RenderNodeAnimator;->setDuration(J)Landroid/view/RenderNodeAnimator; +>>>>>>> 5a05000482abc03a74556ae0e289172eb0ae5607 Landroid/view/View$AttachInfo$InvalidateInfo;->()V +Landroid/view/View$CheckForLongPress;->(Landroid/view/View;)V Landroid/view/View$ListenerInfo;->()V Landroid/view/ViewTreeObserver$InternalInsetsInfo;->()V Landroid/webkit/CacheManager$CacheResult;->()V @@ -1510,10 +1494,105 @@ Landroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)La Landroid/webkit/IWebViewUpdateService;->getCurrentWebViewPackageName()Ljava/lang/String; Landroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo; Landroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z +<<<<<<< HEAD +======= +Landroid/widget/DigitalClock$FormatChangeObserver;->(Landroid/widget/DigitalClock;)V +Landroid/widget/QuickContactBadge$QueryHandler;->(Landroid/widget/QuickContactBadge;Landroid/content/ContentResolver;)V +>>>>>>> 5a05000482abc03a74556ae0e289172eb0ae5607 Landroid/widget/RelativeLayout$DependencyGraph$Node;->()V -Landroid/widget/RemoteViews$OnClickHandler;->()V Landroid/widget/ScrollBarDrawable;->()V +Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;->clear()V +Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;->getRememberedPosition()I +Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigit(C)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigitAndRememberPosition(C)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;->getDescriptionForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/Locale;)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;->getInstance()Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder; +Lcom/android/i18n/phonenumbers/NumberParseException;->getErrorType()Lcom/android/i18n/phonenumbers/NumberParseException$ErrorType; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getDomesticCarrierCodeFormattingRule()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPattern(I)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getNationalPrefixFormattingRule()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getPattern()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->leadingDigitsPatternSize()I +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getCountryCode()I +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getGeneralDesc()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefixForParsing()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefixTransformRule()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPreferredExtnPrefix()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasNationalPrefix()Z +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasPreferredExtnPrefix()Z +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->intlNumberFormats()Ljava/util/List; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->numberFormats()Ljava/util/List; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;->()V +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;->getMetadataList()Ljava/util/List; +Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getNationalNumberPattern()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->FROM_DEFAULT_COUNTRY:Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->FROM_NUMBER_WITHOUT_PLUS_SIGN:Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->FROM_NUMBER_WITH_IDD:Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->FROM_NUMBER_WITH_PLUS_SIGN:Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->values()[Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->clearCountryCode()Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCode()I +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCodeSource()Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getExtension()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getNationalNumber()J +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasCountryCode()Z +Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasExtension()Z +Lcom/android/i18n/phonenumbers/PhoneNumberMatch;->end()I +Lcom/android/i18n/phonenumbers/PhoneNumberMatch;->number()Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber; +Lcom/android/i18n/phonenumbers/PhoneNumberMatch;->rawString()Ljava/lang/String; +Lcom/android/i18n/phonenumbers/PhoneNumberMatch;->start()I +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;->POSSIBLE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->EXACT_MATCH:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->NOT_A_NUMBER:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->NO_MATCH:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->NSN_MATCH:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->SHORT_NSN_MATCH:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType;->values()[Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->E164:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->INTERNATIONAL:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->NATIONAL:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->RFC3966:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->values()[Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->FIXED_LINE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->FIXED_LINE_OR_MOBILE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->MOBILE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->PAGER:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->PERSONAL_NUMBER:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->PREMIUM_RATE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->SHARED_COST:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->TOLL_FREE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->UAN:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->values()[Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->VOICEMAIL:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;->VOIP:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;->IS_POSSIBLE:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;->TOO_LONG:Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->findNumbers(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;J)Ljava/lang/Iterable; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getAsYouTypeFormatter(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/AsYouTypeFormatter; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getCountryCodeForRegion(Ljava/lang/String;)I +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getInstance()Lcom/android/i18n/phonenumbers/PhoneNumberUtil; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberType(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatch(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$MatchType; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->isPossibleNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->isPossibleNumberWithReason(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult; +Lcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z +Lcom/android/ims/ImsCall;->deflect(Ljava/lang/String;)V +Lcom/android/ims/ImsCall;->isMultiparty()Z +Lcom/android/ims/ImsCall;->reject(I)V +Lcom/android/ims/ImsCall;->terminate(I)V Lcom/android/ims/ImsConfigListener$Stub;->()V +Lcom/android/ims/ImsEcbm;->exitEmergencyCallbackMode()V +Lcom/android/ims/ImsManager;->getConfigInterface()Lcom/android/ims/ImsConfig; +Lcom/android/ims/ImsManager;->getInstance(Landroid/content/Context;I)Lcom/android/ims/ImsManager; +Lcom/android/ims/ImsManager;->isEnhanced4gLteModeSettingEnabledByUser(Landroid/content/Context;)Z +Lcom/android/ims/ImsManager;->isNonTtyOrTtyOnVolteEnabled(Landroid/content/Context;)Z +Lcom/android/ims/ImsManager;->isVolteEnabledByPlatform(Landroid/content/Context;)Z +Lcom/android/ims/ImsUtInterface;->queryCallForward(ILjava/lang/String;Landroid/os/Message;)V Lcom/android/ims/internal/IImsCallSession$Stub;->()V Lcom/android/ims/internal/IImsCallSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsCallSession; Lcom/android/ims/internal/IImsConfig$Stub;->()V @@ -1531,7 +1610,15 @@ Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyRequest(La Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V Lcom/android/ims/internal/IImsVideoCallProvider$Stub;->()V Lcom/android/ims/internal/IImsVideoCallProvider;->setCallback(Lcom/android/ims/internal/IImsVideoCallCallback;)V +Lcom/android/ims/internal/ImsVideoCallProviderWrapper;->(Lcom/android/ims/internal/IImsVideoCallProvider;)V Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;->()V +Lcom/android/internal/app/AlertActivity;->()V +Lcom/android/internal/app/AlertActivity;->mAlert:Lcom/android/internal/app/AlertController; +Lcom/android/internal/app/AlertActivity;->mAlertParams:Lcom/android/internal/app/AlertController$AlertParams; +Lcom/android/internal/app/AlertActivity;->setupAlert()V +Lcom/android/internal/app/AssistUtils;->(Landroid/content/Context;)V +Lcom/android/internal/app/AssistUtils;->getAssistComponentForUser(I)Landroid/content/ComponentName; +Lcom/android/internal/app/ChooserActivity;->()V Lcom/android/internal/app/IAppOpsCallback$Stub;->()V Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I @@ -1566,9 +1653,35 @@ Lcom/android/internal/app/IBatteryStats;->getAwakeTimeBattery()J Lcom/android/internal/app/IBatteryStats;->getStatistics()[B Lcom/android/internal/app/IBatteryStats;->isCharging()Z Lcom/android/internal/app/IMediaContainerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IMediaContainerService; +Lcom/android/internal/app/IntentForwarderActivity;->TAG:Ljava/lang/String; Lcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService; Lcom/android/internal/app/IVoiceInteractionManagerService;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel; +Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;->(Ljava/util/Locale;Z)V +Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;->compare(Lcom/android/internal/app/LocaleStore$LocaleInfo;Lcom/android/internal/app/LocaleStore$LocaleInfo;)I +Lcom/android/internal/app/LocaleHelper;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String; +Lcom/android/internal/app/LocaleHelper;->getDisplayName(Ljava/util/Locale;Ljava/util/Locale;Z)Ljava/lang/String; +Lcom/android/internal/app/LocaleHelper;->normalizeForSearch(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String; +Lcom/android/internal/app/LocalePicker$LocaleInfo;->getLocale()Ljava/util/Locale; +Lcom/android/internal/app/LocalePicker;->getLocales()Landroid/os/LocaleList; +Lcom/android/internal/app/LocalePicker;->updateLocale(Ljava/util/Locale;)V +Lcom/android/internal/app/LocalePicker;->updateLocales(Landroid/os/LocaleList;)V +Lcom/android/internal/app/LocaleStore$LocaleInfo;->getFullNameInUiLanguage()Ljava/lang/String; +Lcom/android/internal/app/LocaleStore$LocaleInfo;->getFullNameNative()Ljava/lang/String; +Lcom/android/internal/app/LocaleStore$LocaleInfo;->getId()Ljava/lang/String; +Lcom/android/internal/app/LocaleStore$LocaleInfo;->getLocale()Ljava/util/Locale; +Lcom/android/internal/app/LocaleStore$LocaleInfo;->getParent()Ljava/util/Locale; +Lcom/android/internal/app/LocaleStore;->fillCache(Landroid/content/Context;)V +Lcom/android/internal/app/LocaleStore;->getLevelLocales(Landroid/content/Context;Ljava/util/Set;Lcom/android/internal/app/LocaleStore$LocaleInfo;Z)Ljava/util/Set; +Lcom/android/internal/app/LocaleStore;->getLocaleInfo(Ljava/util/Locale;)Lcom/android/internal/app/LocaleStore$LocaleInfo; +Lcom/android/internal/app/NetInitiatedActivity;->handleNIVerify(Landroid/content/Intent;)V +Lcom/android/internal/app/ResolverActivity;->()V +Lcom/android/internal/app/ResolverActivity;->mAdapter:Lcom/android/internal/app/ResolverActivity$ResolveListAdapter; +Lcom/android/internal/app/ResolverActivity;->mPm:Landroid/content/pm/PackageManager; +Lcom/android/internal/app/ResolverActivity;->onCreate(Landroid/os/Bundle;Landroid/content/Intent;Ljava/lang/CharSequence;[Landroid/content/Intent;Ljava/util/List;Z)V +Lcom/android/internal/app/WindowDecorActionBar$TabImpl;->mCallback:Landroid/app/ActionBar$TabListener; +Lcom/android/internal/app/WindowDecorActionBar;->mTabScrollView:Lcom/android/internal/widget/ScrollingTabContainerView; +Lcom/android/internal/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V Lcom/android/internal/appwidget/IAppWidgetService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService; Lcom/android/internal/appwidget/IAppWidgetService$Stub;->TRANSACTION_bindAppWidgetId:I Lcom/android/internal/appwidget/IAppWidgetService;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z @@ -1576,17 +1689,80 @@ Lcom/android/internal/appwidget/IAppWidgetService;->bindRemoteViewsService(Ljava Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIds(Landroid/content/ComponentName;)[I Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetViews(Ljava/lang/String;I)Landroid/widget/RemoteViews; Lcom/android/internal/backup/IBackupTransport$Stub;->()V +Lcom/android/internal/database/SortCursor;->([Landroid/database/Cursor;Ljava/lang/String;)V +Lcom/android/internal/database/SortCursor;->mCursor:Landroid/database/Cursor; +Lcom/android/internal/database/SortCursor;->mCursors:[Landroid/database/Cursor; +Lcom/android/internal/http/HttpDateTime;->parse(Ljava/lang/String;)J +Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->()V +Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->requestorId:Ljava/lang/String; +Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->requestorIdEncoding:I +Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->text:Ljava/lang/String; +Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->textEncoding:I +Lcom/android/internal/location/GpsNetInitiatedHandler;->decodeString(Ljava/lang/String;ZI)Ljava/lang/String; +Lcom/android/internal/location/GpsNetInitiatedHandler;->handleNiNotification(Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;)V +Lcom/android/internal/location/GpsNetInitiatedHandler;->mIsHexInput:Z Lcom/android/internal/location/ILocationProvider$Stub;->()V Lcom/android/internal/logging/MetricsLogger;->()V Lcom/android/internal/net/LegacyVpnInfo;->()V Lcom/android/internal/net/VpnConfig;->()V +Lcom/android/internal/os/AndroidPrintStream;->(ILjava/lang/String;)V +Lcom/android/internal/os/BaseCommand;->()V +Lcom/android/internal/os/BaseCommand;->mArgs:Landroid/os/ShellCommand; Lcom/android/internal/os/BatterySipper$DrainType;->values()[Lcom/android/internal/os/BatterySipper$DrainType; +Lcom/android/internal/os/BinderInternal;->getContextObject()Landroid/os/IBinder; +Lcom/android/internal/os/BinderInternal;->handleGc()V +Lcom/android/internal/os/ClassLoaderFactory;->createClassloaderNamespace(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String; Lcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService; Lcom/android/internal/os/IDropBoxManagerService;->getNextEntry(Ljava/lang/String;JLjava/lang/String;)Landroid/os/DropBoxManager$Entry; +Lcom/android/internal/os/ProcessCpuTracker$Stats;->name:Ljava/lang/String; +Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_stime:I +Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_uptime:J +Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_utime:I +Lcom/android/internal/os/ProcessCpuTracker;->(Z)V +Lcom/android/internal/os/ProcessCpuTracker;->countWorkingStats()I +Lcom/android/internal/os/ProcessCpuTracker;->getWorkingStats(I)Lcom/android/internal/os/ProcessCpuTracker$Stats; +Lcom/android/internal/os/ProcessCpuTracker;->update()V +Lcom/android/internal/os/RuntimeInit;->commonInit()V +Lcom/android/internal/os/RuntimeInit;->getApplicationObject()Landroid/os/IBinder; +Lcom/android/internal/os/RuntimeInit;->initialized:Z +Lcom/android/internal/os/RuntimeInit;->main([Ljava/lang/String;)V +Lcom/android/internal/os/RuntimeInit;->mApplicationObject:Landroid/os/IBinder; +Lcom/android/internal/os/ZygoteConnection$Arguments;->([Ljava/lang/String;)V +Lcom/android/internal/os/ZygoteConnection$Arguments;->effectiveCapabilities:J +Lcom/android/internal/os/ZygoteConnection$Arguments;->gid:I +Lcom/android/internal/os/ZygoteConnection$Arguments;->gids:[I +Lcom/android/internal/os/ZygoteConnection$Arguments;->permittedCapabilities:J +Lcom/android/internal/os/ZygoteConnection$Arguments;->remainingArgs:[Ljava/lang/String; +Lcom/android/internal/os/ZygoteConnection$Arguments;->rlimits:Ljava/util/ArrayList; +Lcom/android/internal/os/ZygoteConnection$Arguments;->uid:I +Lcom/android/internal/os/ZygoteConnection;->applyUidSecurityPolicy(Lcom/android/internal/os/ZygoteConnection$Arguments;Landroid/net/Credentials;)V +Lcom/android/internal/os/ZygoteConnection;->closeSocket()V +Lcom/android/internal/os/ZygoteConnection;->getFileDesciptor()Ljava/io/FileDescriptor; +Lcom/android/internal/os/ZygoteConnection;->intArray2d:[[I +Lcom/android/internal/os/ZygoteConnection;->mSocket:Landroid/net/LocalSocket; +Lcom/android/internal/os/ZygoteConnection;->mSocketOutStream:Ljava/io/DataOutputStream; +Lcom/android/internal/os/ZygoteConnection;->peer:Landroid/net/Credentials; +Lcom/android/internal/os/ZygoteConnection;->readArgumentList()[Ljava/lang/String; +Lcom/android/internal/os/ZygoteInit;->main([Ljava/lang/String;)V +Lcom/android/internal/os/ZygoteInit;->mResources:Landroid/content/res/Resources; +Lcom/android/internal/os/ZygoteSecurityException;->(Ljava/lang/String;)V +Lcom/android/internal/policy/DecorView;->mLastBottomInset:I +Lcom/android/internal/policy/DecorView;->mLastLeftInset:I +Lcom/android/internal/policy/DecorView;->mLastRightInset:I +Lcom/android/internal/policy/DecorView;->mWindow:Lcom/android/internal/policy/PhoneWindow; Lcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService; Lcom/android/internal/policy/IKeyguardService;->doKeyguardTimeout(Landroid/os/Bundle;)V Lcom/android/internal/policy/IKeyguardService;->setKeyguardEnabled(Z)V Lcom/android/internal/policy/IKeyguardStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardStateCallback; +Lcom/android/internal/policy/PhoneFallbackEventHandler;->(Landroid/content/Context;)V +Lcom/android/internal/policy/PhoneFallbackEventHandler;->mContext:Landroid/content/Context; +Lcom/android/internal/policy/PhoneFallbackEventHandler;->mView:Landroid/view/View; +Lcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyDown(ILandroid/view/KeyEvent;)Z +Lcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyUp(ILandroid/view/KeyEvent;)Z +Lcom/android/internal/policy/PhoneFallbackEventHandler;->startCallActivity()V +Lcom/android/internal/policy/PhoneWindow;->(Landroid/content/Context;)V +Lcom/android/internal/policy/PhoneWindow;->mTitle:Ljava/lang/CharSequence; +Lcom/android/internal/preference/YesNoPreference;->(Landroid/content/Context;Landroid/util/AttributeSet;)V Lcom/android/internal/R$anim;->fade_in:I Lcom/android/internal/R$array;->config_autoBrightnessLcdBacklightValues:I Lcom/android/internal/R$array;->config_autoBrightnessLevels:I @@ -2054,9 +2230,961 @@ Lcom/android/internal/statusbar/IStatusBarService;->removeIcon(Ljava/lang/String Lcom/android/internal/statusbar/IStatusBarService;->setIconVisibility(Ljava/lang/String;Z)V Lcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService; Lcom/android/internal/telecom/ITelecomService;->getCallState()I +Lcom/android/internal/telephony/BaseCommands;->mCallStateRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mCallWaitingInfoRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mCatCallSetUpRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCatCcAlphaRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCatEventRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCatProCmdRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCatSessionEndRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCdmaPrlChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mCdmaSmsRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mCdmaSubscriptionChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/BaseCommands;->mEmergencyCallbackModeRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mExitEmergencyCallbackModeRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mGsmBroadcastSmsRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mGsmSmsRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mHardwareConfigChangeRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mIccRefreshRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mIccSmsFullRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mIccStatusChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mImsNetworkStateChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mNITZTimeRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mOtaProvisionRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mPhoneRadioCapabilityChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mPhoneType:I +Lcom/android/internal/telephony/BaseCommands;->mPreferredNetworkType:I +Lcom/android/internal/telephony/BaseCommands;->mResendIncallMuteRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mRestrictedStateRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mRilCellInfoListRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mRingbackToneRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mRingRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mSignalStrengthRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mSmsOnSimRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mSmsStatusRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mSrvccStateRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mSsnRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mSsRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mStateMonitor:Ljava/lang/Object; +Lcom/android/internal/telephony/BaseCommands;->mSubscriptionStatusRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/BaseCommands;->mUnsolOemHookRawRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mUSSDRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/BaseCommands;->mVoiceRadioTechChangedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/Call$State;->ACTIVE:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->ALERTING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->DIALING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->DISCONNECTED:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->DISCONNECTING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->HOLDING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->IDLE:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->INCOMING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->isAlive()Z +Lcom/android/internal/telephony/Call$State;->isRinging()Z +Lcom/android/internal/telephony/Call$State;->values()[Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call$State;->WAITING:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call;->()V +Lcom/android/internal/telephony/Call;->getConnections()Ljava/util/List; +Lcom/android/internal/telephony/Call;->getEarliestConnection()Lcom/android/internal/telephony/Connection; +Lcom/android/internal/telephony/Call;->getLatestConnection()Lcom/android/internal/telephony/Connection; +Lcom/android/internal/telephony/Call;->getPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/Call;->getState()Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Call;->hangup()V +Lcom/android/internal/telephony/Call;->isIdle()Z +Lcom/android/internal/telephony/Call;->isMultiparty()Z +Lcom/android/internal/telephony/Call;->mConnections:Ljava/util/ArrayList; +Lcom/android/internal/telephony/Call;->mState:Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->(Lcom/android/internal/telephony/CallerInfoAsyncQuery;Landroid/content/Context;)V +Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;->()V +Lcom/android/internal/telephony/CallerInfoAsyncQuery;->release()V +Lcom/android/internal/telephony/CallForwardInfo;->()V +Lcom/android/internal/telephony/CallForwardInfo;->number:Ljava/lang/String; +Lcom/android/internal/telephony/CallForwardInfo;->reason:I +Lcom/android/internal/telephony/CallForwardInfo;->serviceClass:I +Lcom/android/internal/telephony/CallForwardInfo;->status:I +Lcom/android/internal/telephony/CallForwardInfo;->timeSeconds:I +Lcom/android/internal/telephony/CallForwardInfo;->toa:I +Lcom/android/internal/telephony/CallManager;->canConference(Lcom/android/internal/telephony/Call;I)Z +Lcom/android/internal/telephony/CallManager;->canDial(Lcom/android/internal/telephony/Phone;)Z +Lcom/android/internal/telephony/CallManager;->conference(Lcom/android/internal/telephony/Call;)V +Lcom/android/internal/telephony/CallManager;->getActiveFgCall(I)Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/CallManager;->getActiveFgCallState(I)Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/CallManager;->getBackgroundCalls()Ljava/util/List; +Lcom/android/internal/telephony/CallManager;->getBgCallConnections()Ljava/util/List; +Lcom/android/internal/telephony/CallManager;->getBgPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getContext()Landroid/content/Context; +Lcom/android/internal/telephony/CallManager;->getDefaultPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getFgCallConnections()Ljava/util/List; +Lcom/android/internal/telephony/CallManager;->getFgPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getFgPhone(I)Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getFirstActiveBgCall()Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/CallManager;->getFirstActiveBgCall(I)Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/CallManager;->getFirstActiveRingingCall()Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/CallManager;->getFirstActiveRingingCall(I)Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/CallManager;->getInstance()Lcom/android/internal/telephony/CallManager; +Lcom/android/internal/telephony/CallManager;->getPhoneInCall()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getRingingCalls()Ljava/util/List; +Lcom/android/internal/telephony/CallManager;->getRingingPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/CallManager;->getState()Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/CallManager;->getState(I)Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/CallManager;->hasActiveBgCall()Z +Lcom/android/internal/telephony/CallManager;->hasActiveBgCall(I)Z +Lcom/android/internal/telephony/CallManager;->hasActiveFgCall()Z +Lcom/android/internal/telephony/CallManager;->hasActiveFgCall(I)Z +Lcom/android/internal/telephony/CallManager;->hasActiveRingingCall(I)Z +Lcom/android/internal/telephony/CallManager;->hasMoreThanOneRingingCall()Z +Lcom/android/internal/telephony/CallManager;->hasMoreThanOneRingingCall(I)Z +Lcom/android/internal/telephony/CallManager;->mBackgroundCalls:Ljava/util/ArrayList; +Lcom/android/internal/telephony/CallManager;->mEmptyConnections:Ljava/util/ArrayList; +Lcom/android/internal/telephony/CallManager;->mForegroundCalls:Ljava/util/ArrayList; +Lcom/android/internal/telephony/CallManager;->mPhones:Ljava/util/ArrayList; +Lcom/android/internal/telephony/CallManager;->mRingingCalls:Ljava/util/ArrayList; +Lcom/android/internal/telephony/CallManager;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CallManager;->registerForNewRingingConnection(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CallManager;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CallManager;->registerPhone(Lcom/android/internal/telephony/Phone;)Z +Lcom/android/internal/telephony/CallManager;->unregisterForDisconnect(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CallManager;->unregisterForNewRingingConnection(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CallManager;->unregisterForPreciseCallStateChanged(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CallManager;->unregisterPhone(Lcom/android/internal/telephony/Phone;)V +Lcom/android/internal/telephony/CallStateException;->(Ljava/lang/String;)V +Lcom/android/internal/telephony/CallTracker;->()V +Lcom/android/internal/telephony/CallTracker;->getState()Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/CallTracker;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/CallTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/CallTracker;->mNeedsPoll:Z +Lcom/android/internal/telephony/CallTracker;->mNumberConverted:Z +Lcom/android/internal/telephony/CallTracker;->mPendingOperations:I +Lcom/android/internal/telephony/CallTracker;->registerForVoiceCallEnded(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CarrierServiceBindHelper;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/CarrierServiceBindHelper;->mHandler:Landroid/os/Handler; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->CLOSE_CHANNEL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->DISPLAY_TEXT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->fromInt(I)Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_CHANNEL_STATUS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_INKEY:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_INPUT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->LANGUAGE_NOTIFICATION:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->LAUNCH_BROWSER:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->OPEN_CHANNEL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->PLAY_TONE:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->PROVIDE_LOCAL_INFORMATION:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->RECEIVE_DATA:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->REFRESH:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SELECT_ITEM:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_DATA:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_DTMF:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_SMS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_SS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_USSD:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_CALL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_EVENT_LIST:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_IDLE_MODE_TEXT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_MENU:Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/AppInterface$CommandType;->values()[Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings;->callMsg:Lcom/android/internal/telephony/cat/TextMessage; +Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings;->confirmMsg:Lcom/android/internal/telephony/cat/TextMessage; +Lcom/android/internal/telephony/cat/CatCmdMessage$SetupEventListSettings;->eventList:[I +Lcom/android/internal/telephony/cat/CatCmdMessage;->getCallSettings()Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings; +Lcom/android/internal/telephony/cat/CatCmdMessage;->getCmdType()Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/CatCmdMessage;->geTextMessage()Lcom/android/internal/telephony/cat/TextMessage; +Lcom/android/internal/telephony/cat/CatCmdMessage;->getSetEventList()Lcom/android/internal/telephony/cat/CatCmdMessage$SetupEventListSettings; +Lcom/android/internal/telephony/cat/CatCmdMessage;->hasIconLoadFailed()Z +Lcom/android/internal/telephony/cat/CatCmdMessage;->mCallSettings:Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings; +Lcom/android/internal/telephony/cat/CatCmdMessage;->mCmdDet:Lcom/android/internal/telephony/cat/CommandDetails; +Lcom/android/internal/telephony/cat/CatCmdMessage;->mInput:Lcom/android/internal/telephony/cat/Input; +Lcom/android/internal/telephony/cat/CatCmdMessage;->mMenu:Lcom/android/internal/telephony/cat/Menu; +Lcom/android/internal/telephony/cat/CatCmdMessage;->mTextMsg:Lcom/android/internal/telephony/cat/TextMessage; +Lcom/android/internal/telephony/cat/CatLog;->d(Ljava/lang/Object;Ljava/lang/String;)V +Lcom/android/internal/telephony/cat/CatLog;->d(Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/cat/CatLog;->e(Ljava/lang/Object;Ljava/lang/String;)V +Lcom/android/internal/telephony/cat/CatResponseMessage;->setEventDownload(I[B)V +Lcom/android/internal/telephony/cat/CatService;->dispose()V +Lcom/android/internal/telephony/cat/CatService;->isStkAppInstalled()Z +Lcom/android/internal/telephony/cat/CatService;->mCmdIf:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/cat/CatService;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/cat/CatService;->mCurrntCmd:Lcom/android/internal/telephony/cat/CatCmdMessage; +Lcom/android/internal/telephony/cat/CatService;->mHandlerThread:Landroid/os/HandlerThread; +Lcom/android/internal/telephony/cat/CatService;->mMenuCmd:Lcom/android/internal/telephony/cat/CatCmdMessage; +Lcom/android/internal/telephony/cat/CatService;->mMsgDecoder:Lcom/android/internal/telephony/cat/RilMessageDecoder; +Lcom/android/internal/telephony/cat/CatService;->mSlotId:I +Lcom/android/internal/telephony/cat/CatService;->mStkAppInstalled:Z +Lcom/android/internal/telephony/cat/CatService;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; +Lcom/android/internal/telephony/cat/CatService;->sendTerminalResponse(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/ResultCode;ZILcom/android/internal/telephony/cat/ResponseData;)V +Lcom/android/internal/telephony/cat/CatService;->sInstance:[Lcom/android/internal/telephony/cat/CatService; +Lcom/android/internal/telephony/cat/CatService;->sInstanceLock:Ljava/lang/Object; +Lcom/android/internal/telephony/cat/CommandDetails;->commandNumber:I +Lcom/android/internal/telephony/cat/CommandDetails;->commandQualifier:I +Lcom/android/internal/telephony/cat/CommandDetails;->compRequired:Z +Lcom/android/internal/telephony/cat/CommandDetails;->typeOfCommand:I +Lcom/android/internal/telephony/cat/CommandParams;->(Lcom/android/internal/telephony/cat/CommandDetails;)V +Lcom/android/internal/telephony/cat/CommandParams;->getCommandType()Lcom/android/internal/telephony/cat/AppInterface$CommandType; +Lcom/android/internal/telephony/cat/CommandParams;->mCmdDet:Lcom/android/internal/telephony/cat/CommandDetails; +Lcom/android/internal/telephony/cat/CommandParamsFactory;->dispose()V +Lcom/android/internal/telephony/cat/CommandParamsFactory;->mIconLoader:Lcom/android/internal/telephony/cat/IconLoader; +Lcom/android/internal/telephony/cat/CommandParamsFactory;->searchForNextTag(Lcom/android/internal/telephony/cat/ComprehensionTlvTag;Ljava/util/Iterator;)Lcom/android/internal/telephony/cat/ComprehensionTlv; +Lcom/android/internal/telephony/cat/CommandParamsFactory;->searchForTag(Lcom/android/internal/telephony/cat/ComprehensionTlvTag;Ljava/util/List;)Lcom/android/internal/telephony/cat/ComprehensionTlv; +Lcom/android/internal/telephony/cat/ComprehensionTlv;->getLength()I +Lcom/android/internal/telephony/cat/ComprehensionTlv;->getRawValue()[B +Lcom/android/internal/telephony/cat/ComprehensionTlv;->getTag()I +Lcom/android/internal/telephony/cat/ComprehensionTlv;->getValueIndex()I +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ADDRESS:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ALPHA_ID:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->COMMAND_DETAILS:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->DEVICE_IDENTITIES:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ICON_ID:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->RESULT:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->SMS_TPDU:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->TEXT_ATTRIBUTE:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->TEXT_STRING:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->USSD_STRING:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; +Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->value()I +Lcom/android/internal/telephony/cat/DeviceIdentities;->destinationId:I +Lcom/android/internal/telephony/cat/DisplayTextParams;->(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/TextMessage;)V +Lcom/android/internal/telephony/cat/DisplayTextParams;->mTextMsg:Lcom/android/internal/telephony/cat/TextMessage; +Lcom/android/internal/telephony/cat/Duration$TimeUnit;->value()I +Lcom/android/internal/telephony/cat/Duration;->timeInterval:I +Lcom/android/internal/telephony/cat/Duration;->timeUnit:Lcom/android/internal/telephony/cat/Duration$TimeUnit; +Lcom/android/internal/telephony/cat/GetInputParams;->(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/Input;)V +Lcom/android/internal/telephony/cat/IconId;->recordNumber:I +Lcom/android/internal/telephony/cat/IconLoader;->loadIcon(ILandroid/os/Message;)V +Lcom/android/internal/telephony/cat/Menu;->titleAttrs:Ljava/util/List; +Lcom/android/internal/telephony/cat/PlayToneParams;->(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/TextMessage;Lcom/android/internal/telephony/cat/Tone;Lcom/android/internal/telephony/cat/Duration;Z)V +Lcom/android/internal/telephony/cat/ResponseData;->()V +Lcom/android/internal/telephony/cat/ResponseData;->format(Ljava/io/ByteArrayOutputStream;)V +Lcom/android/internal/telephony/cat/ResultCode;->BACKWARD_MOVE_BY_USER:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->BEYOND_TERMINAL_CAPABILITY:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->BIP_ERROR:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->CMD_DATA_NOT_UNDERSTOOD:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->HELP_INFO_REQUIRED:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->LAUNCH_BROWSER_ERROR:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->NETWORK_CRNTLY_UNABLE_TO_PROCESS:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->NO_RESPONSE_FROM_USER:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->OK:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_ICON_NOT_DISPLAYED:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_LIMITED_SERVICE:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_MODIFIED_BY_NAA:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_NAA_NOT_ACTIVE:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_TONE_NOT_PLAYED:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_ADDITIONAL_EFS_READ:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_MISSING_INFO:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_MODIFICATION:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_PARTIAL_COMPREHENSION:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->REQUIRED_VALUES_MISSING:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->TERMINAL_CRNTLY_UNABLE_TO_PROCESS:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->UICC_SESSION_TERM_BY_USER:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->USER_NOT_ACCEPT:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->USIM_CALL_CONTROL_PERMANENT:Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultCode;->value()I +Lcom/android/internal/telephony/cat/ResultCode;->values()[Lcom/android/internal/telephony/cat/ResultCode; +Lcom/android/internal/telephony/cat/ResultException;->(Lcom/android/internal/telephony/cat/ResultCode;)V +Lcom/android/internal/telephony/cat/RilMessage;->(ILjava/lang/String;)V +Lcom/android/internal/telephony/cat/RilMessage;->mData:Ljava/lang/Object; +Lcom/android/internal/telephony/cat/RilMessage;->mId:I +Lcom/android/internal/telephony/cat/RilMessageDecoder;->getInstance(Landroid/os/Handler;Lcom/android/internal/telephony/uicc/IccFileHandler;I)Lcom/android/internal/telephony/cat/RilMessageDecoder; +Lcom/android/internal/telephony/cat/RilMessageDecoder;->mCmdParamsFactory:Lcom/android/internal/telephony/cat/CommandParamsFactory; +Lcom/android/internal/telephony/cat/RilMessageDecoder;->mCurrentRilMessage:Lcom/android/internal/telephony/cat/RilMessage; +Lcom/android/internal/telephony/cat/RilMessageDecoder;->mInstance:[Lcom/android/internal/telephony/cat/RilMessageDecoder; +Lcom/android/internal/telephony/cat/RilMessageDecoder;->mStateStart:Lcom/android/internal/telephony/cat/RilMessageDecoder$StateStart; +Lcom/android/internal/telephony/cat/RilMessageDecoder;->sendCmdForExecution(Lcom/android/internal/telephony/cat/RilMessage;)V +Lcom/android/internal/telephony/cat/RilMessageDecoder;->sendStartDecodingMessageParams(Lcom/android/internal/telephony/cat/RilMessage;)V +Lcom/android/internal/telephony/cat/SelectItemParams;->(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/Menu;Z)V +Lcom/android/internal/telephony/cat/TextMessage;->()V +Lcom/android/internal/telephony/cat/TextMessage;->iconSelfExplanatory:Z +Lcom/android/internal/telephony/cat/TextMessage;->text:Ljava/lang/String; +Lcom/android/internal/telephony/cat/ValueObject;->()V +Lcom/android/internal/telephony/cat/ValueParser;->retrieveAlphaId(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/lang/String; +Lcom/android/internal/telephony/cat/ValueParser;->retrieveDeviceIdentities(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Lcom/android/internal/telephony/cat/DeviceIdentities; +Lcom/android/internal/telephony/cat/ValueParser;->retrieveTextAttribute(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/util/List; +Lcom/android/internal/telephony/cat/ValueParser;->retrieveTextString(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/lang/String; +Lcom/android/internal/telephony/cdma/CdmaCallWaitingNotification;->number:Ljava/lang/String; +Lcom/android/internal/telephony/cdma/CdmaMmiCode;->makeEmptyNull(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/cdma/CdmaMmiCode;->mSc:Ljava/lang/String; +Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;->getFormat()Ljava/lang/String; +Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;->handleCdmaStatusReport(Lcom/android/internal/telephony/cdma/SmsMessage;)V +Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getCdmaSubscriptionSource()I +Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getInstance(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Landroid/os/Handler;ILjava/lang/Object;)Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager; +Lcom/android/internal/telephony/cdma/EriManager$EriDisplayInformation;->mEriIconText:Ljava/lang/String; +Lcom/android/internal/telephony/cdma/EriManager;->getEriDisplayInformation(II)Lcom/android/internal/telephony/cdma/EriManager$EriDisplayInformation; +Lcom/android/internal/telephony/cdma/sms/BearerData$CodingException;->(Ljava/lang/String;)V +Lcom/android/internal/telephony/cdma/sms/BearerData$TimeStamp;->()V +Lcom/android/internal/telephony/cdma/sms/BearerData;->()V +Lcom/android/internal/telephony/cdma/sms/BearerData;->countAsciiSeptets(Ljava/lang/CharSequence;Z)I +Lcom/android/internal/telephony/cdma/sms/BearerData;->decodeUserDataPayload(Lcom/android/internal/telephony/cdma/sms/UserData;Z)V +Lcom/android/internal/telephony/cdma/sms/BearerData;->displayMode:I +Lcom/android/internal/telephony/cdma/sms/BearerData;->encode(Lcom/android/internal/telephony/cdma/sms/BearerData;)[B +Lcom/android/internal/telephony/cdma/sms/BearerData;->encode7bitAscii(Ljava/lang/String;Z)[B +Lcom/android/internal/telephony/cdma/sms/BearerData;->getBitsForNumFields(II)I +Lcom/android/internal/telephony/cdma/sms/BearerData;->hasUserDataHeader:Z +Lcom/android/internal/telephony/cdma/sms/BearerData;->messageId:I +Lcom/android/internal/telephony/cdma/sms/BearerData;->msgCenterTimeStamp:Lcom/android/internal/telephony/cdma/sms/BearerData$TimeStamp; +Lcom/android/internal/telephony/cdma/sms/BearerData;->priority:I +Lcom/android/internal/telephony/cdma/sms/BearerData;->priorityIndicatorSet:Z +Lcom/android/internal/telephony/cdma/sms/BearerData;->userData:Lcom/android/internal/telephony/cdma/sms/UserData; +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->()V +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->digitMode:I +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->numberMode:I +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->numberOfDigits:I +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->numberPlan:I +Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;->parse(Ljava/lang/String;)Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress; +Lcom/android/internal/telephony/cdma/sms/SmsEnvelope;->()V +Lcom/android/internal/telephony/cdma/sms/SmsEnvelope;->bearerData:[B +Lcom/android/internal/telephony/cdma/sms/SmsEnvelope;->serviceCategory:I +Lcom/android/internal/telephony/cdma/sms/SmsEnvelope;->teleService:I +Lcom/android/internal/telephony/cdma/sms/UserData;->()V +Lcom/android/internal/telephony/cdma/sms/UserData;->charToAscii:Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/cdma/sms/UserData;->msgEncoding:I +Lcom/android/internal/telephony/cdma/sms/UserData;->msgEncodingSet:Z +Lcom/android/internal/telephony/cdma/sms/UserData;->numFields:I +Lcom/android/internal/telephony/cdma/sms/UserData;->payload:[B +Lcom/android/internal/telephony/cdma/sms/UserData;->payloadStr:Ljava/lang/String; +Lcom/android/internal/telephony/cdma/sms/UserData;->userDataHeader:Lcom/android/internal/telephony/SmsHeader; +Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu;->()V +Lcom/android/internal/telephony/cdma/SmsMessage;->()V +Lcom/android/internal/telephony/cdma/SmsMessage;->calculateLength(Ljava/lang/CharSequence;ZZ)Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails; +Lcom/android/internal/telephony/cdma/SmsMessage;->createFromEfRecord(I[B)Lcom/android/internal/telephony/cdma/SmsMessage; +Lcom/android/internal/telephony/cdma/SmsMessage;->createFromPdu([B)Lcom/android/internal/telephony/cdma/SmsMessage; +Lcom/android/internal/telephony/cdma/SmsMessage;->getIncomingSmsFingerprint()[B +Lcom/android/internal/telephony/cdma/SmsMessage;->getMessageType()I +Lcom/android/internal/telephony/cdma/SmsMessage;->getNextMessageId()I +Lcom/android/internal/telephony/cdma/SmsMessage;->getNumOfVoicemails()I +Lcom/android/internal/telephony/cdma/SmsMessage;->getSubmitPdu(Ljava/lang/String;Lcom/android/internal/telephony/cdma/sms/UserData;Z)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/cdma/SmsMessage;->getSubmitPdu(Ljava/lang/String;Lcom/android/internal/telephony/cdma/sms/UserData;ZI)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/cdma/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;I[BZ)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/cdma/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLcom/android/internal/telephony/SmsHeader;)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/cdma/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLcom/android/internal/telephony/SmsHeader;I)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/cdma/SmsMessage;->getTeleService()I +Lcom/android/internal/telephony/cdma/SmsMessage;->isStatusReportMessage()Z +Lcom/android/internal/telephony/cdma/SmsMessage;->mBearerData:Lcom/android/internal/telephony/cdma/sms/BearerData; +Lcom/android/internal/telephony/cdma/SmsMessage;->mEnvelope:Lcom/android/internal/telephony/cdma/sms/SmsEnvelope; +Lcom/android/internal/telephony/cdma/SmsMessage;->parseSms()V +Lcom/android/internal/telephony/cdma/SmsMessage;->privateGetSubmitPdu(Ljava/lang/String;ZLcom/android/internal/telephony/cdma/sms/UserData;)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/CommandException$Error;->GENERIC_FAILURE:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException$Error;->PASSWORD_INCORRECT:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException$Error;->RADIO_NOT_AVAILABLE:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException$Error;->REQUEST_NOT_SUPPORTED:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException$Error;->SIM_PUK2:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException$Error;->SMS_FAIL_RETRY:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException;->(Lcom/android/internal/telephony/CommandException$Error;)V +Lcom/android/internal/telephony/CommandException;->fromRilErrno(I)Lcom/android/internal/telephony/CommandException; +Lcom/android/internal/telephony/CommandException;->getCommandError()Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandException;->mError:Lcom/android/internal/telephony/CommandException$Error; +Lcom/android/internal/telephony/CommandsInterface;->acceptCall(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->acknowledgeLastIncomingCdmaSms(ZILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->acknowledgeLastIncomingGsmSms(ZILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->changeBarringPassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->deleteSmsOnRuim(ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->deleteSmsOnSim(ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->dial(Ljava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->dial(Ljava/lang/String;ILcom/android/internal/telephony/UUSInfo;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->exitEmergencyCallbackMode(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getBasebandVersion(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getCdmaBroadcastConfig(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getCDMASubscription(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getDataCallList(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getIccCardStatus(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getIMEISV(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getIMSI(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getLastDataCallFailCause(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getLastPdpFailCause(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getNetworkSelectionMode(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getOperator(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getPDPContextList(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getPreferredNetworkType(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getSignalStrength(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getSmscAddress(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->getVoiceRegistrationState(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->handleCallSetupRequestFromSim(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->iccIO(IILjava/lang/String;IIILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->iccIOForApp(IILjava/lang/String;IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->invokeOemRilRequestRaw([BLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->queryCallForwardStatus(IILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->queryCallWaiting(ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->queryFacilityLock(Ljava/lang/String;Ljava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->queryTTYMode(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForAvailable(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForCdmaOtaProvision(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForCellInfoList(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForImsNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForOffOrNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForOn(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForRadioStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->registerForRilConnected(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->reportSmsMemoryStatus(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->reportStkServiceIsRunning(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->requestIccSimAuthentication(ILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->requestShutdown(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->sendDtmf(CLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->sendEnvelope(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->sendTerminalResponse(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setCallForward(IIILjava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setCallWaiting(ZILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setCdmaBroadcastActivation(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setDataAllowed(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setFacilityLock(Ljava/lang/String;ZLjava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setNetworkSelectionModeAutomatic(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setNetworkSelectionModeManual(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCallRing(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCatCallSetUp(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCatCcAlphaNotify(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCatEvent(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCatProactiveCmd(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnCatSessionEnd(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnIccSmsFull(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnNewGsmBroadcastSms(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnNITZTime(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnSignalStrengthUpdate(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnSmsOnSim(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnSmsStatus(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setOnSuppServiceNotification(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/CommandsInterface;->setPhoneType(I)V +Lcom/android/internal/telephony/CommandsInterface;->setPreferredNetworkType(ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setRadioPower(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setSmscAddress(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setTTYMode(ILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->setUiccSubscription(IIIILandroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->supplyIccPin(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->switchWaitingOrHoldingAndActive(Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForAvailable(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForCdmaOtaProvision(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForOffOrNotAvailable(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForOn(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForRilConnected(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->unregisterForVoiceRadioTechChanged(Landroid/os/Handler;)V +Lcom/android/internal/telephony/CommandsInterface;->writeSmsToRuim(ILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/CommandsInterface;->writeSmsToSim(ILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/Connection$PostDialState;->CANCELLED:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection$PostDialState;->COMPLETE:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection$PostDialState;->NOT_STARTED:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection$PostDialState;->STARTED:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection$PostDialState;->WAIT:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection$PostDialState;->WILD:Lcom/android/internal/telephony/Connection$PostDialState; +Lcom/android/internal/telephony/Connection;->(I)V +Lcom/android/internal/telephony/Connection;->getAddress()Ljava/lang/String; +Lcom/android/internal/telephony/Connection;->getCall()Lcom/android/internal/telephony/Call; +Lcom/android/internal/telephony/Connection;->getConnectTime()J +Lcom/android/internal/telephony/Connection;->getCreateTime()J +Lcom/android/internal/telephony/Connection;->getDisconnectCause()I +Lcom/android/internal/telephony/Connection;->getDisconnectTime()J +Lcom/android/internal/telephony/Connection;->getDurationMillis()J +Lcom/android/internal/telephony/Connection;->getState()Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/Connection;->getUserData()Ljava/lang/Object; +Lcom/android/internal/telephony/Connection;->hangup()V +Lcom/android/internal/telephony/Connection;->isAlive()Z +Lcom/android/internal/telephony/Connection;->isIncoming()Z +Lcom/android/internal/telephony/Connection;->LOG_TAG:Ljava/lang/String; +Lcom/android/internal/telephony/Connection;->mAddress:Ljava/lang/String; +Lcom/android/internal/telephony/Connection;->mCnapName:Ljava/lang/String; +Lcom/android/internal/telephony/Connection;->mCnapNamePresentation:I +Lcom/android/internal/telephony/Connection;->mDialString:Ljava/lang/String; +Lcom/android/internal/telephony/Connection;->mDuration:J +Lcom/android/internal/telephony/Connection;->mIsIncoming:Z +Lcom/android/internal/telephony/Connection;->mNumberPresentation:I +Lcom/android/internal/telephony/Connection;->setVideoState(I)V +Lcom/android/internal/telephony/dataconnection/ApnContext;->getApnType()Ljava/lang/String; +Lcom/android/internal/telephony/dataconnection/ApnContext;->getReason()Ljava/lang/String; +Lcom/android/internal/telephony/dataconnection/ApnContext;->getState()Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/dataconnection/ApnContext;->isConnectable()Z +Lcom/android/internal/telephony/dataconnection/ApnContext;->isDisconnected()Z +Lcom/android/internal/telephony/dataconnection/ApnContext;->isEnabled()Z +Lcom/android/internal/telephony/dataconnection/ApnContext;->isReady()Z +Lcom/android/internal/telephony/dataconnection/ApnContext;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/ApnContext;->mApnType:Ljava/lang/String; +Lcom/android/internal/telephony/dataconnection/ApnContext;->mRefCount:I +Lcom/android/internal/telephony/dataconnection/ApnContext;->mRefCountLock:Ljava/lang/Object; +Lcom/android/internal/telephony/dataconnection/ApnContext;->setState(Lcom/android/internal/telephony/DctConstants$State;)V +Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams;->mApnContext:Lcom/android/internal/telephony/dataconnection/ApnContext; +Lcom/android/internal/telephony/dataconnection/DataConnection;->clearSettings()V +Lcom/android/internal/telephony/dataconnection/DataConnection;->dumpToLog()V +Lcom/android/internal/telephony/dataconnection/DataConnection;->initConnection(Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams;)Z +Lcom/android/internal/telephony/dataconnection/DataConnection;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->mActivatingState:Lcom/android/internal/telephony/dataconnection/DataConnection$DcActivatingState; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mActiveState:Lcom/android/internal/telephony/dataconnection/DataConnection$DcActiveState; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mApnContexts:Ljava/util/HashMap; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mConnectionParams:Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDataRegState:I +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDcFailCause:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDct:Lcom/android/internal/telephony/dataconnection/DcTracker; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDisconnectingErrorCreatingConnection:Lcom/android/internal/telephony/dataconnection/DataConnection$DcDisconnectionErrorCreatingConnection; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDisconnectingState:Lcom/android/internal/telephony/dataconnection/DataConnection$DcDisconnectingState; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mDisconnectParams:Lcom/android/internal/telephony/dataconnection/DataConnection$DisconnectParams; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mId:I +Lcom/android/internal/telephony/dataconnection/DataConnection;->mInactiveState:Lcom/android/internal/telephony/dataconnection/DataConnection$DcInactiveState; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mLinkProperties:Landroid/net/LinkProperties; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mNetworkInfo:Landroid/net/NetworkInfo; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/dataconnection/DataConnection;->mRilRat:I +Lcom/android/internal/telephony/dataconnection/DataConnection;->notifyAllDisconnectCompleted(Lcom/android/internal/telephony/dataconnection/DcFailCause;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->notifyAllOfConnected(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->notifyAllOfDisconnectDcRetrying(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->notifyConnectCompleted(Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams;Lcom/android/internal/telephony/dataconnection/DcFailCause;Z)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->notifyDisconnectCompleted(Lcom/android/internal/telephony/dataconnection/DataConnection$DisconnectParams;Z)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->onConnect(Lcom/android/internal/telephony/dataconnection/DataConnection$ConnectionParams;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->tearDownData(Ljava/lang/Object;)V +Lcom/android/internal/telephony/dataconnection/DataConnection;->updateTcpBufferSizes(I)V +Lcom/android/internal/telephony/dataconnection/DcController;->lr(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcController;->mDcListActiveByCid:Ljava/util/HashMap; +Lcom/android/internal/telephony/dataconnection/DcController;->mDct:Lcom/android/internal/telephony/dataconnection/DcTracker; +Lcom/android/internal/telephony/dataconnection/DcController;->mDcTesterDeactivateAll:Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->ACTIVATION_REJECT_GGSN:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->ACTIVATION_REJECT_UNSPECIFIED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->APN_TYPE_CONFLICT:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->INSUFFICIENT_RESOURCES:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->MISSING_UNKNOWN_APN:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->NSAPI_IN_USE:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->ONLY_IPV4_ALLOWED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->ONLY_IPV6_ALLOWED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->ONLY_SINGLE_BEARER_ALLOWED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->OPERATOR_BARRED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->PROTOCOL_ERRORS:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->SERVICE_OPTION_NOT_SUBSCRIBED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->SERVICE_OPTION_NOT_SUPPORTED:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->SERVICE_OPTION_OUT_OF_ORDER:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->UNKNOWN_PDP_ADDRESS_TYPE:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcFailCause;->USER_AUTHENTICATION:Lcom/android/internal/telephony/dataconnection/DcFailCause; +Lcom/android/internal/telephony/dataconnection/DcTracker$RecoveryAction;->isAggressiveRecovery(I)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->cancelReconnectAlarm(Lcom/android/internal/telephony/dataconnection/ApnContext;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->cleanUpAllConnections(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->cleanUpAllConnections(ZLjava/lang/String;)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->cleanUpConnection(ZLcom/android/internal/telephony/dataconnection/ApnContext;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->createAllApnList()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->getActiveApnTypes()[Ljava/lang/String; +Lcom/android/internal/telephony/dataconnection/DcTracker;->getOverallState()Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/dataconnection/DcTracker;->getUiccRecords(I)Lcom/android/internal/telephony/uicc/IccRecords; +Lcom/android/internal/telephony/dataconnection/DcTracker;->isConnected()Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->isDisconnected()Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->isOnlySingleDcAllowed(I)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->mAllApnSettings:Ljava/util/ArrayList; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mApnContexts:Ljava/util/concurrent/ConcurrentHashMap; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mAttached:Ljava/util/concurrent/atomic/AtomicBoolean; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mAutoAttachOnCreation:Ljava/util/concurrent/atomic/AtomicBoolean; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mDataConnectionTracker:Landroid/os/Handler; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mDisconnectPendingCount:I +Lcom/android/internal/telephony/dataconnection/DcTracker;->mIccRecords:Ljava/util/concurrent/atomic/AtomicReference; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mIsPsRestricted:Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->mIsScreenOn:Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->mNetStatPollEnabled:Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->mNetStatPollPeriod:I +Lcom/android/internal/telephony/dataconnection/DcTracker;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mPrioritySortedApnContexts:Ljava/util/PriorityQueue; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mProvisioningSpinner:Landroid/app/ProgressDialog; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mResolver:Landroid/content/ContentResolver; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mState:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/dataconnection/DcTracker;->mSubscriptionManager:Landroid/telephony/SubscriptionManager; +Lcom/android/internal/telephony/dataconnection/DcTracker;->notifyDataConnection(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->notifyOffApnsOfAvailability(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onActionIntentDataStallAlarm(Landroid/content/Intent;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onActionIntentProvisioningApnAlarm(Landroid/content/Intent;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onCleanUpAllConnections(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onRecordsLoadedOrSubIdChanged()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onSetUserDataEnabled(Z)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->onTrySetupData(Lcom/android/internal/telephony/dataconnection/ApnContext;)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->onTrySetupData(Ljava/lang/String;)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->registerForAllDataDisconnected(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->registerSettingsObserver()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->resetPollStats()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->restartDataStallAlarm()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->setInitialAttachApn()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->setInternalDataEnabled(ZLandroid/os/Message;)Z +Lcom/android/internal/telephony/dataconnection/DcTracker;->setPreferredApn(I)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->setRadio(Z)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->setupDataOnConnectableApns(Ljava/lang/String;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->startDataStallAlarm(Z)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->startNetStatPoll()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->stopDataStallAlarm()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->stopNetStatPoll()V +Lcom/android/internal/telephony/dataconnection/DcTracker;->unregisterForAllDataDisconnected(Landroid/os/Handler;)V +Lcom/android/internal/telephony/dataconnection/DcTracker;->updateRecords()V +Lcom/android/internal/telephony/DctConstants$Activity;->DATAIN:Lcom/android/internal/telephony/DctConstants$Activity; +Lcom/android/internal/telephony/DctConstants$Activity;->DATAINANDOUT:Lcom/android/internal/telephony/DctConstants$Activity; +Lcom/android/internal/telephony/DctConstants$Activity;->DATAOUT:Lcom/android/internal/telephony/DctConstants$Activity; +Lcom/android/internal/telephony/DctConstants$Activity;->DORMANT:Lcom/android/internal/telephony/DctConstants$Activity; +Lcom/android/internal/telephony/DctConstants$Activity;->values()[Lcom/android/internal/telephony/DctConstants$Activity; +Lcom/android/internal/telephony/DctConstants$State;->CONNECTED:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->CONNECTING:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->DISCONNECTING:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->FAILED:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->IDLE:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->RETRYING:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->SCANNING:Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DctConstants$State;->values()[Lcom/android/internal/telephony/DctConstants$State; +Lcom/android/internal/telephony/DefaultPhoneNotifier;->mRegistry:Lcom/android/internal/telephony/ITelephonyRegistry; +Lcom/android/internal/telephony/DriverCall$State;->ACTIVE:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->ALERTING:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->DIALING:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->HOLDING:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->INCOMING:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->values()[Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall$State;->WAITING:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/DriverCall;->()V +Lcom/android/internal/telephony/DriverCall;->index:I +Lcom/android/internal/telephony/DriverCall;->isMT:Z +Lcom/android/internal/telephony/DriverCall;->isVoice:Z +Lcom/android/internal/telephony/DriverCall;->name:Ljava/lang/String; +Lcom/android/internal/telephony/DriverCall;->number:Ljava/lang/String; +Lcom/android/internal/telephony/DriverCall;->numberPresentation:I +Lcom/android/internal/telephony/DriverCall;->state:Lcom/android/internal/telephony/DriverCall$State; +Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler$SmsCbConcatInfo;->(Lcom/android/internal/telephony/gsm/SmsCbHeader;Landroid/telephony/SmsCbLocation;)V +Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler$SmsCbConcatInfo;->matchesLocation(Ljava/lang/String;II)Z +Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler;->mSmsCbPageMap:Ljava/util/HashMap; +Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;->acknowledgeLastIncomingSms(ZILandroid/os/Message;)V +Lcom/android/internal/telephony/gsm/GsmMmiCode;->(Lcom/android/internal/telephony/GsmCdmaPhone;Lcom/android/internal/telephony/uicc/UiccCardApplication;)V +Lcom/android/internal/telephony/gsm/GsmMmiCode;->getCLIRMode()I +Lcom/android/internal/telephony/gsm/GsmMmiCode;->getScString()Ljava/lang/CharSequence; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isActivate()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isDeactivate()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isErasure()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isInterrogate()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isRegister()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isServiceCodeCallBarring(Ljava/lang/String;)Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isServiceCodeCallForwarding(Ljava/lang/String;)Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->isTemporaryModeCLIR()Z +Lcom/android/internal/telephony/gsm/GsmMmiCode;->makeEmptyNull(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mDialingNumber:Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mIccRecords:Lcom/android/internal/telephony/uicc/IccRecords; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mPhone:Lcom/android/internal/telephony/GsmCdmaPhone; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mSc:Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mSia:Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mSib:Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->mSic:Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->newFromDialString(Ljava/lang/String;Lcom/android/internal/telephony/GsmCdmaPhone;Lcom/android/internal/telephony/uicc/UiccCardApplication;)Lcom/android/internal/telephony/gsm/GsmMmiCode; +Lcom/android/internal/telephony/gsm/GsmMmiCode;->processCode()V +Lcom/android/internal/telephony/gsm/GsmMmiCode;->siToServiceClass(Ljava/lang/String;)I +Lcom/android/internal/telephony/gsm/GsmMmiCode;->sPatternSuppService:Ljava/util/regex/Pattern; +Lcom/android/internal/telephony/gsm/GsmSmsAddress;->([BII)V +Lcom/android/internal/telephony/gsm/GsmSmsAddress;->isCphsVoiceMessageClear()Z +Lcom/android/internal/telephony/gsm/GsmSmsAddress;->isCphsVoiceMessageSet()Z +Lcom/android/internal/telephony/gsm/GsmSMSDispatcher;->getFormat()Ljava/lang/String; +Lcom/android/internal/telephony/gsm/GsmSMSDispatcher;->mGsmInboundSmsHandler:Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler; +Lcom/android/internal/telephony/gsm/GsmSMSDispatcher;->sendSms(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/gsm/SimTlv;->([BII)V +Lcom/android/internal/telephony/gsm/SimTlv;->getData()[B +Lcom/android/internal/telephony/gsm/SimTlv;->getTag()I +Lcom/android/internal/telephony/gsm/SimTlv;->isValidObject()Z +Lcom/android/internal/telephony/gsm/SimTlv;->mHasValidTlvObject:Z +Lcom/android/internal/telephony/gsm/SimTlv;->nextObject()Z +Lcom/android/internal/telephony/gsm/SmsCbHeader;->([B)V +Lcom/android/internal/telephony/gsm/SmsCbHeader;->getGeographicalScope()I +Lcom/android/internal/telephony/gsm/SmsCbHeader;->getNumberOfPages()I +Lcom/android/internal/telephony/gsm/SmsCbHeader;->getPageIndex()I +Lcom/android/internal/telephony/gsm/SmsCbHeader;->getSerialNumber()I +Lcom/android/internal/telephony/gsm/SmsCbHeader;->getServiceCategory()I +Lcom/android/internal/telephony/gsm/SmsCbHeader;->mMessageIdentifier:I +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->([B)V +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->getByte()I +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->getUserData()[B +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->getUserDataUCS2(I)Ljava/lang/String; +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->mCur:I +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->mPdu:[B +Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->mUserDataSeptetPadding:I +Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu;->()V +Lcom/android/internal/telephony/gsm/SmsMessage;->()V +Lcom/android/internal/telephony/gsm/SmsMessage;->calculateLength(Ljava/lang/CharSequence;Z)Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails; +Lcom/android/internal/telephony/gsm/SmsMessage;->createFromEfRecord(I[B)Lcom/android/internal/telephony/gsm/SmsMessage; +Lcom/android/internal/telephony/gsm/SmsMessage;->createFromPdu([B)Lcom/android/internal/telephony/gsm/SmsMessage; +Lcom/android/internal/telephony/gsm/SmsMessage;->encodeUCS2(Ljava/lang/String;[B)[B +Lcom/android/internal/telephony/gsm/SmsMessage;->getStatus()I +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[B)Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[BIII)Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[BIIII)Lcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu; +Lcom/android/internal/telephony/gsm/SmsMessage;->getSubmitPduHead(Ljava/lang/String;Ljava/lang/String;BZLcom/android/internal/telephony/gsm/SmsMessage$SubmitPdu;)Ljava/io/ByteArrayOutputStream; +Lcom/android/internal/telephony/gsm/SmsMessage;->isMWIClearMessage()Z +Lcom/android/internal/telephony/gsm/SmsMessage;->isMwiDontStore()Z +Lcom/android/internal/telephony/gsm/SmsMessage;->isMWISetMessage()Z +Lcom/android/internal/telephony/gsm/SmsMessage;->isStatusReportMessage()Z +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->loadEfFilesFromUsim()Ljava/util/ArrayList; +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->mPhoneBookRecords:Ljava/util/ArrayList; +Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->reset()V Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;->()V +Lcom/android/internal/telephony/GsmCdmaCall;->attachFake(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->clearDisconnected()V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->dialThreeWay(Ljava/lang/String;)Lcom/android/internal/telephony/Connection; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->disableDataCallInEmergencyCall(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->fakeHoldForegroundBeforeDial()V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->getPhone()Lcom/android/internal/telephony/GsmCdmaPhone; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->handleEcmTimer(I)V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->isPhoneTypeGsm()Z +Lcom/android/internal/telephony/GsmCdmaCallTracker;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mBackgroundCall:Lcom/android/internal/telephony/GsmCdmaCall; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mForegroundCall:Lcom/android/internal/telephony/GsmCdmaCall; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mPendingMO:Lcom/android/internal/telephony/GsmCdmaConnection; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mPhone:Lcom/android/internal/telephony/GsmCdmaPhone; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mRingingCall:Lcom/android/internal/telephony/GsmCdmaCall; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->mState:Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->obtainCompleteMessage()Landroid/os/Message; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->obtainCompleteMessage(I)Landroid/os/Message; +Lcom/android/internal/telephony/GsmCdmaCallTracker;->setMute(Z)V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->switchWaitingOrHoldingAndActive()V +Lcom/android/internal/telephony/GsmCdmaCallTracker;->updatePhoneState()V +Lcom/android/internal/telephony/GsmCdmaConnection$MyHandler;->(Lcom/android/internal/telephony/GsmCdmaConnection;Landroid/os/Looper;)V +Lcom/android/internal/telephony/GsmCdmaConnection;->acquireWakeLock()V +Lcom/android/internal/telephony/GsmCdmaConnection;->createWakeLock(Landroid/content/Context;)V +Lcom/android/internal/telephony/GsmCdmaConnection;->disconnectCauseFromCode(I)I +Lcom/android/internal/telephony/GsmCdmaConnection;->fetchDtmfToneDelay(Lcom/android/internal/telephony/GsmCdmaPhone;)V +Lcom/android/internal/telephony/GsmCdmaConnection;->findNextPCharOrNonPOrNonWCharIndex(Ljava/lang/String;I)I +Lcom/android/internal/telephony/GsmCdmaConnection;->findPOrWCharToAppend(Ljava/lang/String;II)C +Lcom/android/internal/telephony/GsmCdmaConnection;->formatDialString(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaConnection;->getState()Lcom/android/internal/telephony/Call$State; +Lcom/android/internal/telephony/GsmCdmaConnection;->isPause(C)Z +Lcom/android/internal/telephony/GsmCdmaConnection;->isPhoneTypeGsm()Z +Lcom/android/internal/telephony/GsmCdmaConnection;->isWait(C)Z +Lcom/android/internal/telephony/GsmCdmaConnection;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmCdmaConnection;->maskDialString(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaConnection;->mIndex:I +Lcom/android/internal/telephony/GsmCdmaConnection;->mOwner:Lcom/android/internal/telephony/GsmCdmaCallTracker; +Lcom/android/internal/telephony/GsmCdmaConnection;->onConnectedInOrOut()V +Lcom/android/internal/telephony/GsmCdmaConnection;->updateParent(Lcom/android/internal/telephony/GsmCdmaCall;Lcom/android/internal/telephony/GsmCdmaCall;)V +Lcom/android/internal/telephony/GsmCdmaPhone$Cfu;->(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/GsmCdmaPhone;->exitEmergencyCallbackMode()V +Lcom/android/internal/telephony/GsmCdmaPhone;->getCallTracker()Lcom/android/internal/telephony/CallTracker; +Lcom/android/internal/telephony/GsmCdmaPhone;->getCdmaEriText()Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaPhone;->getEsn()Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaPhone;->getLine1Number()Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaPhone;->getPhoneType()I +Lcom/android/internal/telephony/GsmCdmaPhone;->getServiceState()Landroid/telephony/ServiceState; +Lcom/android/internal/telephony/GsmCdmaPhone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/GsmCdmaPhone;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/GsmCdmaPhone;->handleInCallMmiCommands(Ljava/lang/String;)Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isCfEnable(I)Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isEriFileLoaded()Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isInCall()Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isManualSelProhibitedInGlobalMode()Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isPhoneTypeGsm()Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isValidCommandInterfaceCFAction(I)Z +Lcom/android/internal/telephony/GsmCdmaPhone;->isValidCommandInterfaceCFReason(I)Z +Lcom/android/internal/telephony/GsmCdmaPhone;->logd(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmCdmaPhone;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/GsmCdmaPhone;->mCT:Lcom/android/internal/telephony/GsmCdmaCallTracker; +Lcom/android/internal/telephony/GsmCdmaPhone;->mEcmExitRespRegistrant:Landroid/os/Registrant; +Lcom/android/internal/telephony/GsmCdmaPhone;->mEriManager:Lcom/android/internal/telephony/cdma/EriManager; +Lcom/android/internal/telephony/GsmCdmaPhone;->mIccSmsInterfaceManager:Lcom/android/internal/telephony/IccSmsInterfaceManager; +Lcom/android/internal/telephony/GsmCdmaPhone;->mIsimUiccRecords:Lcom/android/internal/telephony/uicc/IsimUiccRecords; +Lcom/android/internal/telephony/GsmCdmaPhone;->mPendingMMIs:Ljava/util/ArrayList; +Lcom/android/internal/telephony/GsmCdmaPhone;->mSST:Lcom/android/internal/telephony/ServiceStateTracker; +Lcom/android/internal/telephony/GsmCdmaPhone;->notifyPreciseCallStateChanged()V +Lcom/android/internal/telephony/GsmCdmaPhone;->notifyServiceStateChanged(Landroid/telephony/ServiceState;)V +Lcom/android/internal/telephony/GsmCdmaPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/GsmCdmaPhone;->syncClirSetting()V Lcom/android/internal/telephony/ICarrierConfigLoader;->getConfigForSubId(ILjava/lang/String;)Landroid/os/PersistableBundle; +Lcom/android/internal/telephony/IccCard;->getState()Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCard;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/IccCard;->supplyNetworkDepersonalization(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/IccCard;->supplyPin(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/IccCard;->supplyPuk(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/IccCardConstants$State;->ABSENT:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->CARD_IO_ERROR:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->NETWORK_LOCKED:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->NOT_READY:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->PERM_DISABLED:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->PIN_REQUIRED:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->PUK_REQUIRED:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->READY:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->UNKNOWN:Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccCardConstants$State;->values()[Lcom/android/internal/telephony/IccCardConstants$State; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->checkThread()V +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->DBG:Z +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->logd(Ljava/lang/String;)V +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mAdnCache:Lcom/android/internal/telephony/uicc/AdnRecordCache; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mBaseHandler:Landroid/os/Handler; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mCurrentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mIs3gCard:Z +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mRecords:Ljava/util/List; +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mRecordSize:[I +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mSuccess:Z +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->updateEfForIccType(I)I +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->waitForResult(Ljava/util/concurrent/atomic/AtomicBoolean;)V +Lcom/android/internal/telephony/IccProvider;->()V +Lcom/android/internal/telephony/IccProvider;->ADDRESS_BOOK_COLUMN_NAMES:[Ljava/lang/String; +Lcom/android/internal/telephony/IccProvider;->DBG:Z +Lcom/android/internal/telephony/IccProvider;->loadRecord(Lcom/android/internal/telephony/uicc/AdnRecord;Landroid/database/MatrixCursor;I)V +Lcom/android/internal/telephony/IccProvider;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->copyMessageToIccEf(Ljava/lang/String;I[B[B)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->disableCdmaBroadcastRange(II)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->disableGsmBroadcastRange(II)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->enableCdmaBroadcastRange(II)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->enableGsmBroadcastRange(II)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->enforceReceiveAndSend(Ljava/lang/String;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->filterDestAddress(Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->getAllMessagesFromIccEf(Ljava/lang/String;)Ljava/util/List; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->getImsSmsFormat()Ljava/lang/String; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->getPremiumSmsPermission(Ljava/lang/String;)I +Lcom/android/internal/telephony/IccSmsInterfaceManager;->injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->isImsSmsSupported()Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mAppOps:Landroid/app/AppOpsManager; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mCellBroadcastRangeManager:Lcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mHandler:Landroid/os/Handler; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mSms:Ljava/util/List; +Lcom/android/internal/telephony/IccSmsInterfaceManager;->mSuccess:Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendStoredMultipartText(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendStoredText(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->setCdmaBroadcastConfig([Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->setCellBroadcastConfig([Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;)Z +Lcom/android/internal/telephony/IccSmsInterfaceManager;->setPremiumSmsPermission(Ljava/lang/String;I)V +Lcom/android/internal/telephony/IccSmsInterfaceManager;->updateMessageOnIccEf(Ljava/lang/String;II[B)Z +Lcom/android/internal/telephony/IIccPhoneBook$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Lcom/android/internal/telephony/IIccPhoneBook$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IIccPhoneBook; +Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsInEf(I)Ljava/util/List; +Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsInEfForSubscriber(II)Ljava/util/List; +Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSize(I)[I +Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSizeForSubscriber(II)[I +Lcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfBySearch(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z Lcom/android/internal/telephony/IMms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IMms; +Lcom/android/internal/telephony/imsphone/ImsExternalCall;->(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/imsphone/ImsExternalConnection;)V +Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalCallStateListener;->(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V +Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalConnectionListener;->(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V +Lcom/android/internal/telephony/imsphone/ImsExternalConnection;->rebuildCapabilities()V +Lcom/android/internal/telephony/imsphone/ImsExternalConnection;->setActive()V +Lcom/android/internal/telephony/imsphone/ImsPhone$Cf;->(Ljava/lang/String;ZLandroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->getActionFromCFAction(I)I +Lcom/android/internal/telephony/imsphone/ImsPhone;->getBackgroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhone;->getCallForwardingOption(ILandroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->getCallWaiting(Landroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->getConditionFromCFReason(I)I +Lcom/android/internal/telephony/imsphone/ImsPhone;->getForegroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhone;->getRingingCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhone;->getServiceState()Landroid/telephony/ServiceState; +Lcom/android/internal/telephony/imsphone/ImsPhone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/imsphone/ImsPhone;->handleEnterEmergencyCallbackMode()V +Lcom/android/internal/telephony/imsphone/ImsPhone;->handleExitEmergencyCallbackMode()V +Lcom/android/internal/telephony/imsphone/ImsPhone;->handleInCallMmiCommands(Ljava/lang/String;)Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->isCfEnable(I)Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->isUtEnabled()Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->isValidCommandInterfaceCFAction(I)Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->isValidCommandInterfaceCFReason(I)Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->isVolteEnabled()Z +Lcom/android/internal/telephony/imsphone/ImsPhone;->mCT:Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; +Lcom/android/internal/telephony/imsphone/ImsPhone;->mPendingMMIs:Ljava/util/ArrayList; +Lcom/android/internal/telephony/imsphone/ImsPhone;->mSS:Landroid/telephony/ServiceState; +Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyCallForwardingIndicator()V +Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyPreciseCallStateChanged()V +Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyUnknownConnection(Lcom/android/internal/telephony/Connection;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->onMMIDone(Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->sendErrorResponse(Landroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->sendErrorResponse(Landroid/os/Message;Ljava/lang/Throwable;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->setCallForwardingOption(IILjava/lang/String;IILandroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->setCallWaiting(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->setImsRegistered(Z)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/imsphone/ImsPhone;->setServiceState(I)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->attach(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->attachFake(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->getConnections()Ljava/util/List; +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->getImsCall()Lcom/android/ims/ImsCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->hangup()V +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->merge(Lcom/android/internal/telephony/imsphone/ImsPhoneCall;Lcom/android/internal/telephony/Call$State;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->onHangupLocal()V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->addConnection(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->clearDisconnected()V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->dial(Ljava/lang/String;ILandroid/os/Bundle;)Lcom/android/internal/telephony/Connection; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->dialPendingMO()V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->findConnection(Lcom/android/ims/ImsCall;)Lcom/android/internal/telephony/imsphone/ImsPhoneConnection; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getEcbmInterface()Lcom/android/ims/ImsEcbm; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getUtInterface()Lcom/android/ims/ImsUtInterface; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->handleEcmTimer(I)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mAllowEmergencyVideoCalls:Z +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mBackgroundCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mCallExpectedToResume:Lcom/android/ims/ImsCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mConnections:Ljava/util/ArrayList; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mForegroundCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mHandoverCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mImsCallListener:Lcom/android/ims/ImsCall$Listener; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mImsManager:Lcom/android/ims/ImsManager; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mOnHoldToneId:I +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mOnHoldToneStarted:Z +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPendingMO:Lcom/android/internal/telephony/imsphone/ImsPhoneConnection; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPendingUssd:Landroid/os/Message; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPhone:Lcom/android/internal/telephony/imsphone/ImsPhone; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mRingingCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mSwitchingFgAndBgCalls:Z +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mSyncHold:Ljava/lang/Object; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mUssdSession:Lcom/android/ims/ImsCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->processCallStateChange(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;I)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->processCallStateChange(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;IZ)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->removeConnection(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->setVideoCallProvider(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;Lcom/android/ims/ImsCall;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->switchAfterConferenceSuccess()V +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->updatePhoneState()V +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection$MyHandler;->(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;Landroid/os/Looper;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->acquireWakeLock()V +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->createWakeLock(Landroid/content/Context;)V +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->getCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->getOwner()Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->isMultiparty()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mDisconnected:Z +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mImsCall:Lcom/android/ims/ImsCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mOwner:Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mParent:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->onDisconnect()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->update(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;)Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getCLIRMode()I +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getDialingNumber()Ljava/lang/String; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getErrorMessage(Landroid/os/AsyncResult;)Ljava/lang/CharSequence; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getScString()Ljava/lang/CharSequence; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isActivate()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isDeactivate()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isEmptyOrNull(Ljava/lang/CharSequence;)Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isErasure()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isRegister()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isSupportedOverImsPhone()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isTemporaryModeCLIR()Z +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->mPhone:Lcom/android/internal/telephony/imsphone/ImsPhone; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->newFromDialString(Ljava/lang/String;Lcom/android/internal/telephony/imsphone/ImsPhone;)Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode; +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->processCode()V +Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->serviceClassToCFString(I)Ljava/lang/CharSequence; +Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;->(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsTracker;)V +Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;->mDeleteWhere:Ljava/lang/String; +Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;->mDeleteWhereArgs:[Ljava/lang/String; +Lcom/android/internal/telephony/InboundSmsHandler;->acknowledgeLastIncomingSms(ZILandroid/os/Message;)V +Lcom/android/internal/telephony/InboundSmsHandler;->deleteFromRawTable(Ljava/lang/String;[Ljava/lang/String;I)V +Lcom/android/internal/telephony/InboundSmsHandler;->dispatchIntent(Landroid/content/Intent;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;)V +Lcom/android/internal/telephony/InboundSmsHandler;->dispatchNormalMessage(Lcom/android/internal/telephony/SmsMessageBase;)I +Lcom/android/internal/telephony/InboundSmsHandler;->getPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/InboundSmsHandler;->handleInjectSms(Landroid/os/AsyncResult;)V +Lcom/android/internal/telephony/InboundSmsHandler;->handleNewSms(Landroid/os/AsyncResult;)V +Lcom/android/internal/telephony/InboundSmsHandler;->handleSmsWhitelisting(Landroid/content/ComponentName;)Landroid/os/Bundle; +Lcom/android/internal/telephony/InboundSmsHandler;->isSkipNotifyFlagSet(I)Z +Lcom/android/internal/telephony/InboundSmsHandler;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/InboundSmsHandler;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/InboundSmsHandler;->mCellBroadcastHandler:Lcom/android/internal/telephony/CellBroadcastHandler; +Lcom/android/internal/telephony/InboundSmsHandler;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/InboundSmsHandler;->mDeliveringState:Lcom/android/internal/telephony/InboundSmsHandler$DeliveringState; +Lcom/android/internal/telephony/InboundSmsHandler;->mDeviceIdleController:Landroid/os/IDeviceIdleController; +Lcom/android/internal/telephony/InboundSmsHandler;->mIdleState:Lcom/android/internal/telephony/InboundSmsHandler$IdleState; +Lcom/android/internal/telephony/InboundSmsHandler;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/InboundSmsHandler;->mResolver:Landroid/content/ContentResolver; +Lcom/android/internal/telephony/InboundSmsHandler;->mUserManager:Landroid/os/UserManager; +Lcom/android/internal/telephony/InboundSmsHandler;->mWaitingState:Lcom/android/internal/telephony/InboundSmsHandler$WaitingState; +Lcom/android/internal/telephony/InboundSmsHandler;->mWakeLock:Landroid/os/PowerManager$WakeLock; +Lcom/android/internal/telephony/InboundSmsHandler;->mWapPush:Lcom/android/internal/telephony/WapPushOverSms; +Lcom/android/internal/telephony/InboundSmsHandler;->processMessagePart(Lcom/android/internal/telephony/InboundSmsTracker;)Z +Lcom/android/internal/telephony/InboundSmsHandler;->showNewMessageNotification()V +Lcom/android/internal/telephony/InboundSmsHandler;->writeInboxMessage(Landroid/content/Intent;)Landroid/net/Uri; +Lcom/android/internal/telephony/InboundSmsTracker;->getFormat()Ljava/lang/String; +Lcom/android/internal/telephony/InboundSmsTracker;->getIndexOffset()I +Lcom/android/internal/telephony/IntRangeManager;->mRanges:Ljava/util/ArrayList; Lcom/android/internal/telephony/IPhoneStateListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneStateListener; Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String; @@ -2118,16 +3246,811 @@ Lcom/android/internal/telephony/IWapPushManager$Stub;->asInterface(Landroid/os/I Lcom/android/internal/telephony/IWapPushManager;->addPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z Lcom/android/internal/telephony/IWapPushManager;->deletePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z Lcom/android/internal/telephony/IWapPushManager;->updatePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z +Lcom/android/internal/telephony/MccTable$MccEntry;->mIso:Ljava/lang/String; +Lcom/android/internal/telephony/MccTable;->countryCodeForMcc(I)Ljava/lang/String; +Lcom/android/internal/telephony/MccTable;->defaultLanguageForMcc(I)Ljava/lang/String; +Lcom/android/internal/telephony/MccTable;->defaultTimeZoneForMcc(I)Ljava/lang/String; +Lcom/android/internal/telephony/MccTable;->entryForMcc(I)Lcom/android/internal/telephony/MccTable$MccEntry; +Lcom/android/internal/telephony/MccTable;->getLocaleForLanguageCountry(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; +Lcom/android/internal/telephony/MccTable;->smallestDigitsMccForMnc(I)I +Lcom/android/internal/telephony/MmiCode$State;->CANCELLED:Lcom/android/internal/telephony/MmiCode$State; +Lcom/android/internal/telephony/MmiCode$State;->COMPLETE:Lcom/android/internal/telephony/MmiCode$State; +Lcom/android/internal/telephony/MmiCode$State;->FAILED:Lcom/android/internal/telephony/MmiCode$State; +Lcom/android/internal/telephony/MmiCode$State;->PENDING:Lcom/android/internal/telephony/MmiCode$State; +Lcom/android/internal/telephony/MmiCode;->getPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/Phone;->dispose()V +Lcom/android/internal/telephony/Phone;->exitEmergencyCallbackMode()V +Lcom/android/internal/telephony/Phone;->getActiveApnTypes()[Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getCallTracker()Lcom/android/internal/telephony/CallTracker; +Lcom/android/internal/telephony/Phone;->getCellLocation()Landroid/telephony/CellLocation; +Lcom/android/internal/telephony/Phone;->getContext()Landroid/content/Context; +Lcom/android/internal/telephony/Phone;->getDataConnectionState()Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/Phone;->getIccCard()Lcom/android/internal/telephony/IccCard; +Lcom/android/internal/telephony/Phone;->getIccFileHandler()Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/Phone;->getIccSerialNumber()Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getIccSmsInterfaceManager()Lcom/android/internal/telephony/IccSmsInterfaceManager; +Lcom/android/internal/telephony/Phone;->getImsPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/Phone;->getIsimRecords()Lcom/android/internal/telephony/uicc/IsimRecords; +Lcom/android/internal/telephony/Phone;->getMsisdn()Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getNai()Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getPhoneId()I +Lcom/android/internal/telephony/Phone;->getPhoneName()Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getPhoneType()I +Lcom/android/internal/telephony/Phone;->getServiceStateTracker()Lcom/android/internal/telephony/ServiceStateTracker; +Lcom/android/internal/telephony/Phone;->getSmscAddress(Landroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/Phone;->getSubId()I +Lcom/android/internal/telephony/Phone;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/Phone;->getUiccCard()Lcom/android/internal/telephony/uicc/UiccCard; +Lcom/android/internal/telephony/Phone;->getVideoState(Lcom/android/internal/telephony/Call;)I +Lcom/android/internal/telephony/Phone;->invokeOemRilRequestRaw([BLandroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->invokeOemRilRequestStrings([Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->isCspPlmnEnabled()Z +Lcom/android/internal/telephony/Phone;->isUtEnabled()Z +Lcom/android/internal/telephony/Phone;->isVideoEnabled()Z +Lcom/android/internal/telephony/Phone;->isVolteEnabled()Z +Lcom/android/internal/telephony/Phone;->isWifiCallingEnabled()Z +Lcom/android/internal/telephony/Phone;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/Phone;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/Phone;->mDcTracker:Lcom/android/internal/telephony/dataconnection/DcTracker; +Lcom/android/internal/telephony/Phone;->mIccRecords:Ljava/util/concurrent/atomic/AtomicReference; +Lcom/android/internal/telephony/Phone;->mImsPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/Phone;->mMmiRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/Phone;->mNotifier:Lcom/android/internal/telephony/PhoneNotifier; +Lcom/android/internal/telephony/Phone;->mPhoneId:I +Lcom/android/internal/telephony/Phone;->mSmsStorageMonitor:Lcom/android/internal/telephony/SmsStorageMonitor; +Lcom/android/internal/telephony/Phone;->mUiccApplication:Ljava/util/concurrent/atomic/AtomicReference; +Lcom/android/internal/telephony/Phone;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; +Lcom/android/internal/telephony/Phone;->needsOtaServiceProvisioning()Z +Lcom/android/internal/telephony/Phone;->notifyOtaspChanged(I)V +Lcom/android/internal/telephony/Phone;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForEcmTimerReset(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForIncomingRing(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForMmiComplete(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForMmiInitiate(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForNewRingingConnection(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForServiceStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForSimRecordsLoaded(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->registerForUnknownConnection(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->selectNetworkManually(Lcom/android/internal/telephony/OperatorInfo;ZLandroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->setNetworkSelectionModeAutomatic(Landroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->setOnPostDialCharacter(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/Phone;->setPreferredNetworkType(ILandroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->setSmscAddress(Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/Phone;->unregisterForDisconnect(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForEcmTimerReset(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForIncomingRing(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForMmiComplete(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForMmiInitiate(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForNewRingingConnection(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForPreciseCallStateChanged(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForRingbackTone(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForServiceStateChanged(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForSimRecordsLoaded(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unregisterForUnknownConnection(Landroid/os/Handler;)V +Lcom/android/internal/telephony/Phone;->unsetOnEcbModeExitResponse(Landroid/os/Handler;)V +Lcom/android/internal/telephony/PhoneConstants$DataState;->CONNECTED:Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/PhoneConstants$DataState;->CONNECTING:Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/PhoneConstants$DataState;->DISCONNECTED:Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/PhoneConstants$DataState;->SUSPENDED:Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/PhoneConstants$DataState;->values()[Lcom/android/internal/telephony/PhoneConstants$DataState; +Lcom/android/internal/telephony/PhoneConstants$State;->IDLE:Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/PhoneConstants$State;->OFFHOOK:Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/PhoneConstants$State;->RINGING:Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/PhoneConstants$State;->values()[Lcom/android/internal/telephony/PhoneConstants$State; +Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_ALLOWED:I +Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_PAYPHONE:I +Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_RESTRICTED:I +Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_UNKNOWN:I +Lcom/android/internal/telephony/PhoneFactory;->calculatePreferredNetworkType(Landroid/content/Context;I)I +Lcom/android/internal/telephony/PhoneFactory;->getDefaultPhone()Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/PhoneFactory;->getDefaultSubscription()I +Lcom/android/internal/telephony/PhoneFactory;->getPhone(I)Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/PhoneFactory;->getPhones()[Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/PhoneFactory;->makeDefaultPhone(Landroid/content/Context;)V +Lcom/android/internal/telephony/PhoneFactory;->sCommandsInterface:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/PhoneFactory;->sContext:Landroid/content/Context; +Lcom/android/internal/telephony/PhoneFactory;->sMadeDefaults:Z +Lcom/android/internal/telephony/PhoneFactory;->sPhoneNotifier:Lcom/android/internal/telephony/PhoneNotifier; +Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;->NONE:Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState; +Lcom/android/internal/telephony/PhoneInternalInterface;->PREFERRED_NT_MODE:I +Lcom/android/internal/telephony/PhoneNotifier;->notifyMessageWaitingChanged(Lcom/android/internal/telephony/Phone;)V +Lcom/android/internal/telephony/PhoneNotifier;->notifySignalStrength(Lcom/android/internal/telephony/Phone;)V +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->(Landroid/content/Context;Landroid/os/Handler;)V +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->getSignalStrengthDbm()I +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->mSignalStrength:Landroid/telephony/SignalStrength; +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->mWants:I +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->notifyServiceState(I)V +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->notifySignalStrength(I)V +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->registerIntent()V +Lcom/android/internal/telephony/PhoneStateIntentReceiver;->unregisterIntent()V +Lcom/android/internal/telephony/PhoneSubInfoController;->getDefaultSubscription()I +Lcom/android/internal/telephony/PhoneSubInfoController;->getPhone(I)Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/PhoneSubInfoController;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/PhoneSubInfoController;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/PhoneSubInfoController;->mPhone:[Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/PhoneSwitcher;->activate(I)V +Lcom/android/internal/telephony/PhoneSwitcher;->deactivate(I)V +Lcom/android/internal/telephony/PhoneSwitcher;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/PhoneSwitcher;->mMaxActivePhones:I +Lcom/android/internal/telephony/PhoneSwitcher;->mNumPhones:I +Lcom/android/internal/telephony/PhoneSwitcher;->mPhones:[Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/ProxyController;->completeRadioCapabilityTransaction()V +Lcom/android/internal/telephony/ProxyController;->getInstance()Lcom/android/internal/telephony/ProxyController; +Lcom/android/internal/telephony/ProxyController;->logd(Ljava/lang/String;)V +Lcom/android/internal/telephony/ProxyController;->mOldRadioAccessFamily:[I +Lcom/android/internal/telephony/ProxyController;->mRadioCapabilitySessionId:I +Lcom/android/internal/telephony/ProxyController;->mSetRadioAccessFamilyStatus:[I +Lcom/android/internal/telephony/ProxyController;->mUniqueIdGenerator:Ljava/util/concurrent/atomic/AtomicInteger; +Lcom/android/internal/telephony/ProxyController;->registerForAllDataDisconnected(ILandroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/ProxyController;->sendRadioCapabilityRequest(IIIILjava/lang/String;II)V +Lcom/android/internal/telephony/ProxyController;->sProxyController:Lcom/android/internal/telephony/ProxyController; +Lcom/android/internal/telephony/RadioCapability;->getRadioAccessFamily()I +Lcom/android/internal/telephony/RetryManager;->configure(Ljava/lang/String;)Z +Lcom/android/internal/telephony/RetryManager;->getRetryTimer()I +Lcom/android/internal/telephony/RetryManager;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/RetryManager;->mApnType:Ljava/lang/String; +Lcom/android/internal/telephony/RetryManager;->mFailFastInterApnDelay:J +Lcom/android/internal/telephony/RetryManager;->mInterApnDelay:J +Lcom/android/internal/telephony/RetryManager;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/RIL;->(Landroid/content/Context;II)V +Lcom/android/internal/telephony/RIL;->(Landroid/content/Context;IILjava/lang/Integer;)V +Lcom/android/internal/telephony/RIL;->acquireWakeLock(Lcom/android/internal/telephony/RILRequest;I)V +Lcom/android/internal/telephony/RIL;->clearRequestList(IZ)V +Lcom/android/internal/telephony/RIL;->clearWakeLock(I)Z +Lcom/android/internal/telephony/RIL;->decrementWakeLock(Lcom/android/internal/telephony/RILRequest;)V +Lcom/android/internal/telephony/RIL;->findAndRemoveRequestFromList(I)Lcom/android/internal/telephony/RILRequest; +Lcom/android/internal/telephony/RIL;->getResponseForTimedOutRILRequest(Lcom/android/internal/telephony/RILRequest;)Ljava/lang/Object; +Lcom/android/internal/telephony/RIL;->hangupForegroundResumeBackground(Landroid/os/Message;)V +Lcom/android/internal/telephony/RIL;->hangupWaitingOrBackground(Landroid/os/Message;)V +Lcom/android/internal/telephony/RIL;->invokeOemRilRequestRaw([BLandroid/os/Message;)V +Lcom/android/internal/telephony/RIL;->makeStaticRadioCapability()Lcom/android/internal/telephony/RadioCapability; +Lcom/android/internal/telephony/RIL;->mRequestList:Landroid/util/SparseArray; +Lcom/android/internal/telephony/RIL;->mTestingEmergencyCall:Ljava/util/concurrent/atomic/AtomicBoolean; +Lcom/android/internal/telephony/RIL;->mWakeLock:Landroid/os/PowerManager$WakeLock; +Lcom/android/internal/telephony/RIL;->notifyRegistrantsCdmaInfoRec(Lcom/android/internal/telephony/cdma/CdmaInformationRecords;)V +Lcom/android/internal/telephony/RIL;->notifyRegistrantsRilConnectionChanged(I)V +Lcom/android/internal/telephony/RIL;->requestToString(I)Ljava/lang/String; +Lcom/android/internal/telephony/RIL;->responseToString(I)Ljava/lang/String; +Lcom/android/internal/telephony/RIL;->retToString(ILjava/lang/Object;)Ljava/lang/String; +Lcom/android/internal/telephony/RIL;->riljLog(Ljava/lang/String;)V +Lcom/android/internal/telephony/RIL;->setRadioPower(ZLandroid/os/Message;)V +Lcom/android/internal/telephony/RIL;->unsljLog(I)V +Lcom/android/internal/telephony/RIL;->unsljLogMore(ILjava/lang/String;)V +Lcom/android/internal/telephony/RIL;->unsljLogRet(ILjava/lang/Object;)V +Lcom/android/internal/telephony/RIL;->unsljLogvRet(ILjava/lang/Object;)V +Lcom/android/internal/telephony/RILConstants;->PREFERRED_NETWORK_MODE:I +Lcom/android/internal/telephony/RILRequest;->mRequest:I +Lcom/android/internal/telephony/RILRequest;->mResult:Landroid/os/Message; +Lcom/android/internal/telephony/RILRequest;->mSerial:I +Lcom/android/internal/telephony/RILRequest;->obtain(ILandroid/os/Message;)Lcom/android/internal/telephony/RILRequest; +Lcom/android/internal/telephony/RILRequest;->onError(ILjava/lang/Object;)V +Lcom/android/internal/telephony/RILRequest;->release()V +Lcom/android/internal/telephony/RILRequest;->serialString()Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->fixUnknownMcc(Ljava/lang/String;I)Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->getCurrentDataConnectionState()I +Lcom/android/internal/telephony/ServiceStateTracker;->getDesiredPowerState()Z +Lcom/android/internal/telephony/ServiceStateTracker;->getPhoneId()I +Lcom/android/internal/telephony/ServiceStateTracker;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->isConcurrentVoiceAndDataAllowed()Z +Lcom/android/internal/telephony/ServiceStateTracker;->isGprsConsistent(II)Z +Lcom/android/internal/telephony/ServiceStateTracker;->isImsRegistered()Z +Lcom/android/internal/telephony/ServiceStateTracker;->isInHomeSidNid(II)Z +Lcom/android/internal/telephony/ServiceStateTracker;->isInvalidOperatorNumeric(Ljava/lang/String;)Z +Lcom/android/internal/telephony/ServiceStateTracker;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/ServiceStateTracker;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/ServiceStateTracker;->mAttachedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/ServiceStateTracker;->mCr:Landroid/content/ContentResolver; +Lcom/android/internal/telephony/ServiceStateTracker;->mCurDataSpn:Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->mCurPlmn:Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->mCurShowPlmn:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mCurShowSpn:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mCurSpn:Ljava/lang/String; +Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOffRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOnRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mDefaultRoamingIndicator:I +Lcom/android/internal/telephony/ServiceStateTracker;->mDesiredPowerState:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mDetachedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mDeviceShuttingDown:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mEmergencyOnly:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mIccRecords:Lcom/android/internal/telephony/uicc/IccRecords; +Lcom/android/internal/telephony/ServiceStateTracker;->mIntentReceiver:Landroid/content/BroadcastReceiver; +Lcom/android/internal/telephony/ServiceStateTracker;->mIsSubscriptionFromRuim:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mMaxDataCalls:I +Lcom/android/internal/telephony/ServiceStateTracker;->mNetworkAttachedRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mNewMaxDataCalls:I +Lcom/android/internal/telephony/ServiceStateTracker;->mNewReasonDataDenied:I +Lcom/android/internal/telephony/ServiceStateTracker;->mNewSS:Landroid/telephony/ServiceState; +Lcom/android/internal/telephony/ServiceStateTracker;->mOnSubscriptionsChangedListener:Lcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener; +Lcom/android/internal/telephony/ServiceStateTracker;->mPhone:Lcom/android/internal/telephony/GsmCdmaPhone; +Lcom/android/internal/telephony/ServiceStateTracker;->mPreferredNetworkType:I +Lcom/android/internal/telephony/ServiceStateTracker;->mReasonDataDenied:I +Lcom/android/internal/telephony/ServiceStateTracker;->mReportedGprsNoReg:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mRoamingIndicator:I +Lcom/android/internal/telephony/ServiceStateTracker;->mSignalStrength:Landroid/telephony/SignalStrength; +Lcom/android/internal/telephony/ServiceStateTracker;->mSpnUpdatePending:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mSS:Landroid/telephony/ServiceState; +Lcom/android/internal/telephony/ServiceStateTracker;->mStartedGprsRegCheck:Z +Lcom/android/internal/telephony/ServiceStateTracker;->mSubId:I +Lcom/android/internal/telephony/ServiceStateTracker;->mSubscriptionController:Lcom/android/internal/telephony/SubscriptionController; +Lcom/android/internal/telephony/ServiceStateTracker;->mSubscriptionManager:Landroid/telephony/SubscriptionManager; +Lcom/android/internal/telephony/ServiceStateTracker;->mUiccApplcation:Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/ServiceStateTracker;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; +Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOffRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOnRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/ServiceStateTracker;->notifyDataRegStateRilRadioTechnologyChanged()V +Lcom/android/internal/telephony/ServiceStateTracker;->notifySignalStrength()Z +Lcom/android/internal/telephony/ServiceStateTracker;->pollState()V +Lcom/android/internal/telephony/ServiceStateTracker;->powerOffRadioSafely(Lcom/android/internal/telephony/dataconnection/DcTracker;)V +Lcom/android/internal/telephony/ServiceStateTracker;->reRegisterNetwork(Landroid/os/Message;)V +Lcom/android/internal/telephony/ServiceStateTracker;->resetServiceStateInIwlanMode()V +Lcom/android/internal/telephony/ServiceStateTracker;->setOperatorIdd(Ljava/lang/String;)V +Lcom/android/internal/telephony/ServiceStateTracker;->setRoamingType(Landroid/telephony/ServiceState;)V +Lcom/android/internal/telephony/ServiceStateTracker;->setSignalStrengthDefaultValues()V +Lcom/android/internal/telephony/ServiceStateTracker;->updateOtaspState()V +Lcom/android/internal/telephony/ServiceStateTracker;->updatePhoneObject()V +Lcom/android/internal/telephony/ServiceStateTracker;->updateRoamingState()V +Lcom/android/internal/telephony/ServiceStateTracker;->updateSpnDisplay()V +Lcom/android/internal/telephony/ServiceStateTracker;->useDataRegStateForDataOnlyDevices()V +Lcom/android/internal/telephony/sip/SipPhone$SipCall;->hold()V +Lcom/android/internal/telephony/sip/SipPhone$SipCall;->switchWith(Lcom/android/internal/telephony/sip/SipPhone$SipCall;)V +Lcom/android/internal/telephony/sip/SipPhone$SipCall;->unhold()V +Lcom/android/internal/telephony/sip/SipPhone;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/sip/SipPhone;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/sip/SipPhone;->mBackgroundCall:Lcom/android/internal/telephony/sip/SipPhone$SipCall; +Lcom/android/internal/telephony/sip/SipPhone;->mForegroundCall:Lcom/android/internal/telephony/sip/SipPhone$SipCall; +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->DBG:Z +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->mTranslationTableCDMA:Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->mTranslationTableCommon:Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->mTranslationTableGSM:Landroid/util/SparseIntArray; +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->translate(Ljava/lang/CharSequence;)Ljava/lang/String; +Lcom/android/internal/telephony/Sms7BitEncodingTranslator;->useCdmaFormatForMoSms()Z +Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;->mApplicationName:Ljava/lang/String; +Lcom/android/internal/telephony/SmsApplication;->configurePreferredActivity(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V +Lcom/android/internal/telephony/SmsApplication;->getApplicationCollection(Landroid/content/Context;)Ljava/util/Collection; +Lcom/android/internal/telephony/SmsApplication;->getDefaultMmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName; +Lcom/android/internal/telephony/SmsApplication;->getDefaultRespondViaMessageApplication(Landroid/content/Context;Z)Landroid/content/ComponentName; +Lcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName; +Lcom/android/internal/telephony/SmsApplication;->getSmsApplicationData(Ljava/lang/String;Landroid/content/Context;)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData; +Lcom/android/internal/telephony/SmsApplication;->isDefaultSmsApplication(Landroid/content/Context;Ljava/lang/String;)Z +Lcom/android/internal/telephony/SmsApplication;->setDefaultApplication(Ljava/lang/String;Landroid/content/Context;)V +Lcom/android/internal/telephony/SmsApplication;->shouldWriteMessageForPackage(Ljava/lang/String;Landroid/content/Context;)Z +Lcom/android/internal/telephony/SmsBroadcastUndelivered;->(Landroid/content/Context;Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;)V +Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mNegativeButton:Landroid/widget/Button; +Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mPositiveButton:Landroid/widget/Button; +Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mRememberUndoInstruction:Landroid/widget/TextView; +Lcom/android/internal/telephony/SMSDispatcher$DataSmsSender;->(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;->(Lcom/android/internal/telephony/SMSDispatcher;Ljava/util/ArrayList;[Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;->sendSmsByCarrierApp(Ljava/lang/String;Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;)V +Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;->(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;)V +Lcom/android/internal/telephony/SMSDispatcher$SmsSenderCallback;->(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsSender;)V +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->isMultipart()Z +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mAppInfo:Landroid/content/pm/PackageInfo; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mData:Ljava/util/HashMap; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mDeliveryIntent:Landroid/app/PendingIntent; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mDestAddress:Ljava/lang/String; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mMessageRef:I +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mMessageUri:Landroid/net/Uri; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mPersistMessage:Z +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mSentIntent:Landroid/app/PendingIntent; +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mTimestamp:J +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->onFailed(Landroid/content/Context;II)V +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->onSent(Landroid/content/Context;)V +Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->updateSentMessageStatus(Landroid/content/Context;I)V +Lcom/android/internal/telephony/SMSDispatcher$TextSmsSender;->(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher;->calculateLength(Ljava/lang/CharSequence;Z)Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails; +Lcom/android/internal/telephony/SMSDispatcher;->checkCallerIsPhoneOrCarrierApp()V +Lcom/android/internal/telephony/SMSDispatcher;->deliveryPendingList:Ljava/util/ArrayList; +Lcom/android/internal/telephony/SMSDispatcher;->dispose()V +Lcom/android/internal/telephony/SMSDispatcher;->getCarrierAppPackageName()Ljava/lang/String; +Lcom/android/internal/telephony/SMSDispatcher;->getMultipartMessageText(Ljava/util/ArrayList;)Ljava/lang/String; +Lcom/android/internal/telephony/SMSDispatcher;->getNextConcatenatedRef()I +Lcom/android/internal/telephony/SMSDispatcher;->getSubId()I +Lcom/android/internal/telephony/SMSDispatcher;->handleConfirmShortCode(ZLcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/SMSDispatcher;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/SMSDispatcher;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/SMSDispatcher;->mResolver:Landroid/content/ContentResolver; +Lcom/android/internal/telephony/SMSDispatcher;->mTelephonyManager:Landroid/telephony/TelephonyManager; +Lcom/android/internal/telephony/SMSDispatcher;->processSendSmsResponse(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;II)V +Lcom/android/internal/telephony/SMSDispatcher;->sendData(Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V +Lcom/android/internal/telephony/SMSDispatcher;->sendMultipartSms(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher;->sendSms(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V +Lcom/android/internal/telephony/SMSDispatcher;->sendSubmitPdu(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V Lcom/android/internal/telephony/SmsHeader$ConcatRef;->()V Lcom/android/internal/telephony/SmsHeader$PortAddrs;->()V Lcom/android/internal/telephony/SmsMessageBase;->()V +Lcom/android/internal/telephony/SmsResponse;->(ILjava/lang/String;I)V +Lcom/android/internal/telephony/SmsResponse;->mAckPdu:Ljava/lang/String; +Lcom/android/internal/telephony/SmsResponse;->mErrorCode:I +Lcom/android/internal/telephony/SmsResponse;->mMessageRef:I +Lcom/android/internal/telephony/SmsStorageMonitor;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/SmsUsageMonitor;->(Landroid/content/Context;)V +Lcom/android/internal/telephony/SmsUsageMonitor;->check(Ljava/lang/String;I)Z +Lcom/android/internal/telephony/SubscriptionController;->broadcastDefaultDataSubIdChanged(I)V +Lcom/android/internal/telephony/SubscriptionController;->colorArr:[I +Lcom/android/internal/telephony/SubscriptionController;->enforceModifyPhoneState(Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionController;->getActiveSubInfoCount(Ljava/lang/String;)I +Lcom/android/internal/telephony/SubscriptionController;->getActiveSubscriptionInfo(ILjava/lang/String;)Landroid/telephony/SubscriptionInfo; +Lcom/android/internal/telephony/SubscriptionController;->getActiveSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List; +Lcom/android/internal/telephony/SubscriptionController;->getDefaultDataSubId()I +Lcom/android/internal/telephony/SubscriptionController;->getDefaultSmsSubId()I +Lcom/android/internal/telephony/SubscriptionController;->getDefaultSubId()I +Lcom/android/internal/telephony/SubscriptionController;->getDefaultVoiceSubId()I +Lcom/android/internal/telephony/SubscriptionController;->getDummySubIds(I)[I +Lcom/android/internal/telephony/SubscriptionController;->getInstance()Lcom/android/internal/telephony/SubscriptionController; +Lcom/android/internal/telephony/SubscriptionController;->getPhoneId(I)I +Lcom/android/internal/telephony/SubscriptionController;->getSubId(I)[I +Lcom/android/internal/telephony/SubscriptionController;->getSubIdUsingPhoneId(I)I +Lcom/android/internal/telephony/SubscriptionController;->getSubInfo(Ljava/lang/String;Ljava/lang/Object;)Ljava/util/List; +Lcom/android/internal/telephony/SubscriptionController;->getSubInfoRecord(Landroid/database/Cursor;)Landroid/telephony/SubscriptionInfo; +Lcom/android/internal/telephony/SubscriptionController;->isActiveSubId(I)Z +Lcom/android/internal/telephony/SubscriptionController;->isSubInfoReady()Z +Lcom/android/internal/telephony/SubscriptionController;->logd(Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionController;->logdl(Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionController;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionController;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/SubscriptionController;->mDefaultPhoneId:I +Lcom/android/internal/telephony/SubscriptionController;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/SubscriptionController;->notifySubscriptionInfoChanged()V +Lcom/android/internal/telephony/SubscriptionController;->setDefaultDataSubId(I)V +Lcom/android/internal/telephony/SubscriptionController;->setDefaultFallbackSubId(I)V +Lcom/android/internal/telephony/SubscriptionController;->setDefaultSmsSubId(I)V +Lcom/android/internal/telephony/SubscriptionController;->setDefaultVoiceSubId(I)V +Lcom/android/internal/telephony/SubscriptionController;->setPlmnSpn(IZLjava/lang/String;ZLjava/lang/String;)Z +Lcom/android/internal/telephony/SubscriptionController;->updateAllDataConnectionTrackers()V +Lcom/android/internal/telephony/SubscriptionController;->validateSubId(I)V +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->broadcastSimStateChanged(ILjava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->isAllIccIdQueryDone()Z +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->logd(Ljava/lang/String;)V +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mCurrentlyActiveUserId:I +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mIccId:[Ljava/lang/String; +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mInsertSimState:[I +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mPackageManager:Landroid/content/pm/IPackageManager; +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mPhone:[Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->PROJECT_SIM_NUM:I +Lcom/android/internal/telephony/SubscriptionInfoUpdater;->updateSubscriptionInfoByIccId()V +Lcom/android/internal/telephony/TelephonyCapabilities;->supportsAdn(I)Z +Lcom/android/internal/telephony/TelephonyProperties;->PROPERTY_ICC_OPERATOR_NUMERIC:Ljava/lang/String; +Lcom/android/internal/telephony/test/InterpreterEx;->(Ljava/lang/String;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->acceptCall(Landroid/os/Message;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->dial(Ljava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->dial(Ljava/lang/String;ILcom/android/internal/telephony/UUSInfo;Landroid/os/Message;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->mDcSuccess:Z +Lcom/android/internal/telephony/test/SimulatedCommands;->resultFail(Landroid/os/Message;Ljava/lang/Object;Ljava/lang/Throwable;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->resultSuccess(Landroid/os/Message;Ljava/lang/Object;)V +Lcom/android/internal/telephony/test/SimulatedCommands;->simulatedCallState:Lcom/android/internal/telephony/test/SimulatedGsmCallState; +Lcom/android/internal/telephony/test/SimulatedCommands;->unimplemented(Landroid/os/Message;)V +Lcom/android/internal/telephony/test/SimulatedCommandsVerifier;->getInstance()Lcom/android/internal/telephony/test/SimulatedCommandsVerifier; +Lcom/android/internal/telephony/test/SimulatedCommandsVerifier;->setCallForward(IIILjava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->conference()Z +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->onChld(CC)Z +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->releaseActiveAcceptHeldOrWaiting()Z +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->releaseHeldOrUDUB()Z +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->separateCall(I)Z +Lcom/android/internal/telephony/test/SimulatedGsmCallState;->switchActiveAndHeldOrWaiting()Z +Lcom/android/internal/telephony/uicc/AdnRecord;->(IILjava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecord;->(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecord;->(II[B)V +Lcom/android/internal/telephony/uicc/AdnRecord;->(Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecord;->(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecord;->([B)V +Lcom/android/internal/telephony/uicc/AdnRecord;->buildAdnString(I)[B +Lcom/android/internal/telephony/uicc/AdnRecord;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/telephony/uicc/AdnRecord;->getEmails()[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecord;->getNumber()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecord;->isEmpty()Z +Lcom/android/internal/telephony/uicc/AdnRecord;->mAlphaTag:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecord;->mEfid:I +Lcom/android/internal/telephony/uicc/AdnRecord;->mEmails:[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecord;->mExtRecord:I +Lcom/android/internal/telephony/uicc/AdnRecord;->mNumber:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecord;->mRecordNumber:I +Lcom/android/internal/telephony/uicc/AdnRecord;->setEmails([Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecordCache;->extensionEfForEf(I)I +Lcom/android/internal/telephony/uicc/AdnRecordCache;->getRecordsIfLoaded(I)Ljava/util/ArrayList; +Lcom/android/internal/telephony/uicc/AdnRecordCache;->mAdnLikeWaiters:Landroid/util/SparseArray; +Lcom/android/internal/telephony/uicc/AdnRecordCache;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/uicc/AdnRecordCache;->mUserWriteResponse:Landroid/util/SparseArray; +Lcom/android/internal/telephony/uicc/AdnRecordCache;->mUsimPhoneBookManager:Lcom/android/internal/telephony/gsm/UsimPhoneBookManager; +Lcom/android/internal/telephony/uicc/AdnRecordCache;->reset()V +Lcom/android/internal/telephony/uicc/AdnRecordCache;->sendErrorResponse(Landroid/os/Message;Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/AdnRecordCache;->updateAdnByIndex(ILcom/android/internal/telephony/uicc/AdnRecord;ILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/AdnRecordLoader;->(Lcom/android/internal/telephony/uicc/IccFileHandler;)V +Lcom/android/internal/telephony/uicc/AdnRecordLoader;->getEFPath(I)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/AdnRecordLoader;->loadFromEF(IIILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/AdnRecordLoader;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/uicc/AdnRecordLoader;->updateEF(Lcom/android/internal/telephony/uicc/AdnRecord;IIILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_DETECTED:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_PIN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_READY:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_SUBSCRIPTION_PERSO:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_CSIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_ISIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_RUIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_SIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_USIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK_SUBSET:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_SERVICE_PROVIDER:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;->()V +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;->AppTypeFromRILInt(I)Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;->app_type:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_ABSENT:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_ERROR:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_PRESENT:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->isCardPresent()Z +Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_DISABLED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_ENABLED_BLOCKED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_ENABLED_PERM_BLOCKED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/IccCardStatus;->mApplications:[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus; +Lcom/android/internal/telephony/uicc/IccCardStatus;->mCardState:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/IccCardStatus;->mCdmaSubscriptionAppIndex:I +Lcom/android/internal/telephony/uicc/IccCardStatus;->mGsmUmtsSubscriptionAppIndex:I +Lcom/android/internal/telephony/uicc/IccCardStatus;->mImsSubscriptionAppIndex:I +Lcom/android/internal/telephony/uicc/IccCardStatus;->mUniversalPinState:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;->(IILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;->mRecordSize:I +Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;->results:Ljava/util/ArrayList; +Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFLinearRecordSize(ILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFLinearRecordSize(ILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFPath(I)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixed(IILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixed(ILjava/lang/String;ILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixedAll(ILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixedAll(ILjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFTransparent(ILandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->mAid:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccFileHandler;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/uicc/IccFileHandler;->mParentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFLinearFixed(II[BLjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFLinearFixed(ILjava/lang/String;I[BLjava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFTransparent(I[BLandroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccIoResult;->(IILjava/lang/String;)V +Lcom/android/internal/telephony/uicc/IccIoResult;->(II[B)V +Lcom/android/internal/telephony/uicc/IccIoResult;->payload:[B +Lcom/android/internal/telephony/uicc/IccIoResult;->success()Z +Lcom/android/internal/telephony/uicc/IccIoResult;->sw1:I +Lcom/android/internal/telephony/uicc/IccIoResult;->sw2:I +Lcom/android/internal/telephony/uicc/IccRecords;->auth_rsp:Lcom/android/internal/telephony/uicc/IccIoResult; +Lcom/android/internal/telephony/uicc/IccRecords;->getGid1()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getIccId()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getIccSimChallengeResponse(ILjava/lang/String;)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getIMSI()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getMsisdnNumber()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getOperatorNumeric()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getRecordsLoaded()Z +Lcom/android/internal/telephony/uicc/IccRecords;->getServiceProviderName()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->getUsimServiceTable()Lcom/android/internal/telephony/uicc/UsimServiceTable; +Lcom/android/internal/telephony/uicc/IccRecords;->handleRefresh(Lcom/android/internal/telephony/uicc/IccRefreshResponse;)V +Lcom/android/internal/telephony/uicc/IccRecords;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/IccRecords;->mAdnCache:Lcom/android/internal/telephony/uicc/AdnRecordCache; +Lcom/android/internal/telephony/uicc/IccRecords;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/uicc/IccRecords;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/uicc/IccRecords;->mDestroyed:Ljava/util/concurrent/atomic/AtomicBoolean; +Lcom/android/internal/telephony/uicc/IccRecords;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/uicc/IccRecords;->mGid1:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->mIccId:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->mImsi:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->mIsVoiceMailFixed:Z +Lcom/android/internal/telephony/uicc/IccRecords;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/uicc/IccRecords;->mMncLength:I +Lcom/android/internal/telephony/uicc/IccRecords;->mParentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/IccRecords;->mRecordsEventsRegistrants:Landroid/os/RegistrantList; +Lcom/android/internal/telephony/uicc/IccRecords;->mRecordsToLoad:I +Lcom/android/internal/telephony/uicc/IccRecords;->mSpn:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->mTelephonyManager:Landroid/telephony/TelephonyManager; +Lcom/android/internal/telephony/uicc/IccRecords;->mVoiceMailNum:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRecords;->registerForNetworkSelectionModeAutomatic(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/IccRecords;->registerForNewSms(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/IccRecords;->registerForRecordsEvents(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/IccRecords;->registerForRecordsLoaded(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/IccRecords;->setMsisdnNumber(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V +Lcom/android/internal/telephony/uicc/IccRecords;->setVoiceCallForwardingFlag(IZLjava/lang/String;)V +Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForNetworkSelectionModeAutomatic(Landroid/os/Handler;)V +Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForNewSms(Landroid/os/Handler;)V +Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForRecordsEvents(Landroid/os/Handler;)V +Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForRecordsLoaded(Landroid/os/Handler;)V +Lcom/android/internal/telephony/uicc/IccRefreshResponse;->()V +Lcom/android/internal/telephony/uicc/IccRefreshResponse;->aid:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccRefreshResponse;->efId:I +Lcom/android/internal/telephony/uicc/IccRefreshResponse;->refreshResult:I +Lcom/android/internal/telephony/uicc/IccServiceTable;->getTag()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccServiceTable;->mServiceTable:[B +Lcom/android/internal/telephony/uicc/IccUtils;->adnStringFieldToString([BII)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccUtils;->bcdToString([BII)Ljava/lang/String; Lcom/android/internal/telephony/uicc/IccUtils;->bytesToHexString([B)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccUtils;->cdmaBcdByteToInt(B)I +Lcom/android/internal/telephony/uicc/IccUtils;->cdmaBcdToString([BII)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccUtils;->gsmBcdByteToInt(B)I +Lcom/android/internal/telephony/uicc/IccUtils;->hexCharToInt(C)I +Lcom/android/internal/telephony/uicc/IccUtils;->hexStringToBytes(Ljava/lang/String;)[B +Lcom/android/internal/telephony/uicc/IccUtils;->networkNameToString([BII)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IccUtils;->parseToBnW([BI)Landroid/graphics/Bitmap; +Lcom/android/internal/telephony/uicc/IccUtils;->parseToRGB([BIZ)Landroid/graphics/Bitmap; +Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimDomain()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimImpi()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimImpu()[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->auth_rsp:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->fetchIsimRecords()V +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->isimTlvToString([B)Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimDomain:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimImpi:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimImpu:[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimIst:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimPcscf:[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/uicc/RuimRecords;->adjstMinDigits(I)I +Lcom/android/internal/telephony/uicc/RuimRecords;->fetchRuimRecords()V +Lcom/android/internal/telephony/uicc/RuimRecords;->getAssetLanguages(Landroid/content/Context;)[Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->getCsimSpnDisplayCondition()Z +Lcom/android/internal/telephony/uicc/RuimRecords;->getMdn()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->getMdnNumber()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->getRUIMOperatorNumeric()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/RuimRecords;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/RuimRecords;->mEFli:[B +Lcom/android/internal/telephony/uicc/RuimRecords;->mEFpl:[B +Lcom/android/internal/telephony/uicc/RuimRecords;->mMin:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->mNai:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/RuimRecords;->onGetCSimEprlDone(Landroid/os/AsyncResult;)V +Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->INIT:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; +Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_3GPP:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; +Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_CPHS:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; +Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_SHORT_CPHS:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; +Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->values()[Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; +Lcom/android/internal/telephony/uicc/SIMRecords;->fetchSimRecords()V +Lcom/android/internal/telephony/uicc/SIMRecords;->getExtFromEf(I)I +Lcom/android/internal/telephony/uicc/SIMRecords;->getMsisdnNumber()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/SIMRecords;->getOperatorNumeric()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/SIMRecords;->getSpnFsm(ZLandroid/os/AsyncResult;)V +Lcom/android/internal/telephony/uicc/SIMRecords;->getVoiceMailNumber()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/SIMRecords;->isCphsMailboxEnabled()Z +Lcom/android/internal/telephony/uicc/SIMRecords;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/SIMRecords;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/SIMRecords;->logv(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCff:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCfis:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCPHS_MWI:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfLi:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfMWIS:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mEfPl:[B +Lcom/android/internal/telephony/uicc/SIMRecords;->mSpnDisplayCondition:I +Lcom/android/internal/telephony/uicc/SIMRecords;->mUsimServiceTable:Lcom/android/internal/telephony/uicc/UsimServiceTable; +Lcom/android/internal/telephony/uicc/SIMRecords;->mVmConfig:Lcom/android/internal/telephony/uicc/VoiceMailConstants; +Lcom/android/internal/telephony/uicc/SIMRecords;->setVoiceCallForwardingFlag(IZLjava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccCard;->getApplication(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/UiccCard;->getApplicationByType(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/UiccCard;->getApplicationIndex(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/UiccCard;->getCardState()Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/UiccCard;->getCarrierPackageNamesForIntent(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List; +Lcom/android/internal/telephony/uicc/UiccCard;->getIccId()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/UiccCard;->getNumApplications()I +Lcom/android/internal/telephony/uicc/UiccCard;->getOperatorBrandOverride()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/UiccCard;->isApplicationOnIcc(Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;)Z +Lcom/android/internal/telephony/uicc/UiccCard;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccCard;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccCard;->mCardState:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; +Lcom/android/internal/telephony/uicc/UiccCard;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/uicc/UiccCard;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/uicc/UiccCard;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/uicc/UiccCard;->mPhoneId:I +Lcom/android/internal/telephony/uicc/UiccCardApplication;->dispose()V +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getAid()Ljava/lang/String; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getAuthContext()I +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getIccFileHandler()Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getIccRecords()Lcom/android/internal/telephony/uicc/IccRecords; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPersoSubState()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPhoneId()I +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPin1State()Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getState()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->getType()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccCardApplication;->loge(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAid:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAppState:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAppType:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mCi:Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mDestroyed:Z +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mPersoSubState:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->mPin1State:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; +Lcom/android/internal/telephony/uicc/UiccCardApplication;->registerForReady(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/UiccCardApplication;->unregisterForReady(Landroid/os/Handler;)V +Lcom/android/internal/telephony/uicc/UiccCardApplication;->update(Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;)V +Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$TLV;->length:Ljava/lang/Integer; +Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$TLV;->value:Ljava/lang/String; +Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;->mLoadedCallback:Landroid/os/Message; +Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;->mState:Ljava/util/concurrent/atomic/AtomicInteger; +Lcom/android/internal/telephony/uicc/UiccController;->getIccFileHandler(II)Lcom/android/internal/telephony/uicc/IccFileHandler; +Lcom/android/internal/telephony/uicc/UiccController;->getIccRecords(II)Lcom/android/internal/telephony/uicc/IccRecords; +Lcom/android/internal/telephony/uicc/UiccController;->getInstance()Lcom/android/internal/telephony/uicc/UiccController; +Lcom/android/internal/telephony/uicc/UiccController;->getUiccCard(I)Lcom/android/internal/telephony/uicc/UiccCard; +Lcom/android/internal/telephony/uicc/UiccController;->getUiccCardApplication(II)Lcom/android/internal/telephony/uicc/UiccCardApplication; +Lcom/android/internal/telephony/uicc/UiccController;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/uicc/UiccController;->mCis:[Lcom/android/internal/telephony/CommandsInterface; +Lcom/android/internal/telephony/uicc/UiccController;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/uicc/UiccController;->mInstance:Lcom/android/internal/telephony/uicc/UiccController; +Lcom/android/internal/telephony/uicc/UiccController;->mLock:Ljava/lang/Object; +Lcom/android/internal/telephony/uicc/UiccController;->registerForIccChanged(Landroid/os/Handler;ILjava/lang/Object;)V +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->ALLOWED_CSG_LISTS_AND_INDICATIONS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->CFI_STATUS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->CSG_DISPLAY_CONTROL:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->FDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MBDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MSISDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MWI_STATUS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->OPERATOR_CSG_LISTS_AND_INDICATIONS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->OPERATOR_PLMN_LIST:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->PLMN_NETWORK_NAME:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_OVER_IP:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_SERVICE_PARAMS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_STORAGE:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SPN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; +Lcom/android/internal/telephony/uicc/UsimServiceTable;->isAvailable(Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;)Z +Lcom/android/internal/telephony/uicc/VoiceMailConstants;->()V +Lcom/android/internal/telephony/UiccPhoneBookController;->([Lcom/android/internal/telephony/Phone;)V +Lcom/android/internal/telephony/UiccPhoneBookController;->getDefaultSubscription()I +Lcom/android/internal/telephony/UiccPhoneBookController;->getIccPhoneBookInterfaceManager(I)Lcom/android/internal/telephony/IccPhoneBookInterfaceManager; +Lcom/android/internal/telephony/UiccPhoneBookController;->mPhone:[Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/UiccSmsController;->copyMessageToIccEfForSubscriber(ILjava/lang/String;I[B[B)Z +Lcom/android/internal/telephony/UiccSmsController;->disableCellBroadcastForSubscriber(III)Z +Lcom/android/internal/telephony/UiccSmsController;->disableCellBroadcastRangeForSubscriber(IIII)Z +Lcom/android/internal/telephony/UiccSmsController;->enableCellBroadcastForSubscriber(III)Z +Lcom/android/internal/telephony/UiccSmsController;->enableCellBroadcastRangeForSubscriber(IIII)Z +Lcom/android/internal/telephony/UiccSmsController;->getAllMessagesFromIccEfForSubscriber(ILjava/lang/String;)Ljava/util/List; +Lcom/android/internal/telephony/UiccSmsController;->getIccSmsInterfaceManager(I)Lcom/android/internal/telephony/IccSmsInterfaceManager; +Lcom/android/internal/telephony/UiccSmsController;->getImsSmsFormatForSubscriber(I)Ljava/lang/String; +Lcom/android/internal/telephony/UiccSmsController;->getPreferredSmsSubscription()I +Lcom/android/internal/telephony/UiccSmsController;->isImsSmsSupportedForSubscriber(I)Z +Lcom/android/internal/telephony/UiccSmsController;->sendDataForSubscriber(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V +Lcom/android/internal/telephony/UiccSmsController;->sendErrorInPendingIntent(Landroid/app/PendingIntent;I)V +Lcom/android/internal/telephony/UiccSmsController;->sendErrorInPendingIntents(Ljava/util/List;I)V +Lcom/android/internal/telephony/UiccSmsController;->updateMessageOnIccEfForSubscriber(ILjava/lang/String;II[B)Z +Lcom/android/internal/telephony/UUSInfo;->getDcs()I +Lcom/android/internal/telephony/UUSInfo;->getType()I +Lcom/android/internal/telephony/UUSInfo;->getUserData()[B +Lcom/android/internal/telephony/WakeLockStateMachine;->log(Ljava/lang/String;)V +Lcom/android/internal/telephony/WakeLockStateMachine;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/WakeLockStateMachine;->mIdleState:Lcom/android/internal/telephony/WakeLockStateMachine$IdleState; +Lcom/android/internal/telephony/WakeLockStateMachine;->mPhone:Lcom/android/internal/telephony/Phone; +Lcom/android/internal/telephony/WapPushOverSms;->dispatchWapPdu([BLandroid/content/BroadcastReceiver;Lcom/android/internal/telephony/InboundSmsHandler;)I +Lcom/android/internal/telephony/WapPushOverSms;->getDeliveryOrReadReportThreadId(Landroid/content/Context;Lcom/google/android/mms/pdu/GenericPdu;)J +Lcom/android/internal/telephony/WapPushOverSms;->isDuplicateNotification(Landroid/content/Context;Lcom/google/android/mms/pdu/NotificationInd;)Z +Lcom/android/internal/telephony/WapPushOverSms;->isWapPushForMms([BLcom/android/internal/telephony/InboundSmsHandler;)Z +Lcom/android/internal/telephony/WapPushOverSms;->mContext:Landroid/content/Context; +Lcom/android/internal/telephony/WapPushOverSms;->mDeviceIdleController:Landroid/os/IDeviceIdleController; +Lcom/android/internal/telephony/WapPushOverSms;->mWapPushManager:Lcom/android/internal/telephony/IWapPushManager; +Lcom/android/internal/telephony/WspTypeDecoder;->([B)V +Lcom/android/internal/telephony/WspTypeDecoder;->decodeContentType(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeIntegerValue(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeShortInteger(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeTextString(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeUintvarInteger(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeValueLength(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->decodeXWapApplicationId(I)Z +Lcom/android/internal/telephony/WspTypeDecoder;->getContentParameters()Ljava/util/HashMap; +Lcom/android/internal/telephony/WspTypeDecoder;->getDecodedDataLength()I +Lcom/android/internal/telephony/WspTypeDecoder;->getValue32()J +Lcom/android/internal/telephony/WspTypeDecoder;->getValueString()Ljava/lang/String; +Lcom/android/internal/telephony/WspTypeDecoder;->mWspData:[B +Lcom/android/internal/telephony/WspTypeDecoder;->seekXWapApplicationId(II)Z Lcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->(Landroid/os/IBinder;)V +Lcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/android/internal/util/ArrayUtils;->appendInt([II)[I +Lcom/android/internal/util/ArrayUtils;->contains([II)Z +Lcom/android/internal/util/ArrayUtils;->contains([Ljava/lang/Object;Ljava/lang/Object;)Z +Lcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object; +Lcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I +Lcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z +Lcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object; +Lcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I +Lcom/android/internal/util/ArrayUtils;->removeElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/android/internal/util/BitwiseInputStream;->([B)V +Lcom/android/internal/util/BitwiseInputStream;->available()I +Lcom/android/internal/util/BitwiseInputStream;->read(I)I +Lcom/android/internal/util/BitwiseInputStream;->readByteArray(I)[B +Lcom/android/internal/util/BitwiseInputStream;->skip(I)V +Lcom/android/internal/util/BitwiseOutputStream;->(I)V +Lcom/android/internal/util/BitwiseOutputStream;->toByteArray()[B +Lcom/android/internal/util/BitwiseOutputStream;->write(II)V +Lcom/android/internal/util/BitwiseOutputStream;->writeByteArray(I[B)V +Lcom/android/internal/util/CharSequences;->compareToIgnoreCase(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I +Lcom/android/internal/util/CharSequences;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z +Lcom/android/internal/util/FastMath;->round(F)I +Lcom/android/internal/util/FastXmlSerializer;->()V +Lcom/android/internal/util/GrowingArrayUtils;->append([III)[I +Lcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object; +Lcom/android/internal/util/HexDump;->hexStringToByteArray(Ljava/lang/String;)[B +Lcom/android/internal/util/HexDump;->toHexString(I)Ljava/lang/String; +Lcom/android/internal/util/HexDump;->toHexString([B)Ljava/lang/String; +Lcom/android/internal/util/HexDump;->toHexString([BII)Ljava/lang/String; Lcom/android/internal/util/HexDump;->toHexString([BZ)Ljava/lang/String; +Lcom/android/internal/util/IState;->getName()Ljava/lang/String; +Lcom/android/internal/util/MemInfoReader;->()V +Lcom/android/internal/util/MemInfoReader;->getCachedSize()J +Lcom/android/internal/util/MemInfoReader;->getFreeSize()J +Lcom/android/internal/util/MemInfoReader;->getRawInfo()[J +Lcom/android/internal/util/MemInfoReader;->getTotalSize()J +Lcom/android/internal/util/MemInfoReader;->readMemInfo()V +Lcom/android/internal/util/Preconditions;->checkArgument(Z)V +Lcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V +Lcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I +Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/android/internal/util/Preconditions;->checkState(Z)V +Lcom/android/internal/util/Preconditions;->checkState(ZLjava/lang/String;)V +Lcom/android/internal/util/State;->()V +Lcom/android/internal/util/State;->enter()V +Lcom/android/internal/util/State;->exit()V +Lcom/android/internal/util/State;->getName()Ljava/lang/String; +Lcom/android/internal/util/State;->processMessage(Landroid/os/Message;)Z +Lcom/android/internal/util/StateMachine;->(Ljava/lang/String;)V +Lcom/android/internal/util/StateMachine;->(Ljava/lang/String;Landroid/os/Handler;)V +Lcom/android/internal/util/StateMachine;->(Ljava/lang/String;Landroid/os/Looper;)V +Lcom/android/internal/util/StateMachine;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V +Lcom/android/internal/util/StateMachine;->obtainMessage(III)Landroid/os/Message; +Lcom/android/internal/util/StateMachine;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message; +Lcom/android/internal/util/StateMachine;->sendMessage(I)V +Lcom/android/internal/util/StateMachine;->sendMessage(II)V +Lcom/android/internal/util/StateMachine;->sendMessage(IIILjava/lang/Object;)V +Lcom/android/internal/util/StateMachine;->sendMessage(ILjava/lang/Object;)V +Lcom/android/internal/util/StateMachine;->sendMessage(Landroid/os/Message;)V +Lcom/android/internal/view/ActionBarPolicy;->(Landroid/content/Context;)V +Lcom/android/internal/view/ActionBarPolicy;->get(Landroid/content/Context;)Lcom/android/internal/view/ActionBarPolicy; +Lcom/android/internal/view/ActionBarPolicy;->getEmbeddedMenuWidthLimit()I +Lcom/android/internal/view/ActionBarPolicy;->getMaxActionButtons()I +Lcom/android/internal/view/ActionBarPolicy;->getStackedTabMaxWidth()I +Lcom/android/internal/view/ActionBarPolicy;->getTabContainerHeight()I +Lcom/android/internal/view/ActionBarPolicy;->hasEmbeddedTabs()Z +Lcom/android/internal/view/ActionBarPolicy;->mContext:Landroid/content/Context; +Lcom/android/internal/view/ActionBarPolicy;->showsOverflowMenuButton()Z Lcom/android/internal/view/BaseIWindow;->()V Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager; Lcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession; +<<<<<<< HEAD +======= +Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->dispose()V +Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->getInstance()Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback; +Lcom/android/internal/view/menu/ActionMenu;->(Landroid/content/Context;)V +Lcom/android/internal/view/menu/ActionMenuItem;->(Landroid/content/Context;IIIILjava/lang/CharSequence;)V +Lcom/android/internal/view/menu/ContextMenuBuilder;->(Landroid/content/Context;)V +Lcom/android/internal/view/menu/IconMenuItemView;->getTextAppropriateLayoutParams()Lcom/android/internal/view/menu/IconMenuView$LayoutParams; +Lcom/android/internal/view/menu/IconMenuItemView;->setIconMenuView(Lcom/android/internal/view/menu/IconMenuView;)V +Lcom/android/internal/view/menu/IconMenuItemView;->setItemInvoker(Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;)V +Lcom/android/internal/view/menu/IconMenuView$SavedState;->(Landroid/os/Parcel;)V +Lcom/android/internal/view/menu/IconMenuView;->createMoreItemView()Lcom/android/internal/view/menu/IconMenuItemView; +Lcom/android/internal/view/menu/IconMenuView;->getNumActualItemsShown()I +Lcom/android/internal/view/menu/IconMenuView;->mItemBackground:Landroid/graphics/drawable/Drawable; +Lcom/android/internal/view/menu/IconMenuView;->mMaxItems:I +Lcom/android/internal/view/menu/IconMenuView;->mMenu:Lcom/android/internal/view/menu/MenuBuilder; +Lcom/android/internal/view/menu/MenuDialogHelper;->(Lcom/android/internal/view/menu/MenuBuilder;)V +Lcom/android/internal/view/menu/MenuDialogHelper;->dismiss()V +Lcom/android/internal/view/menu/MenuDialogHelper;->show(Landroid/os/IBinder;)V +Lcom/android/internal/view/WindowManagerPolicyThread;->getLooper()Landroid/os/Looper; +Lcom/android/internal/widget/AbsActionBarView;->dismissPopupMenus()V +Lcom/android/internal/widget/ActionBarContextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/widget/ActionBarOverlayLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V +Lcom/android/internal/widget/EditableInputConnection;->(Landroid/widget/TextView;)V +>>>>>>> 5a05000482abc03a74556ae0e289172eb0ae5607 Lcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings; Lcom/android/internal/widget/ILockSettings;->getBoolean(Ljava/lang/String;ZI)Z Lcom/android/internal/widget/ILockSettings;->getLong(Ljava/lang/String;JI)J @@ -2146,17 +4069,109 @@ Lcom/android/internal/widget/IRemoteViewsFactory;->getViewTypeCount()I Lcom/android/internal/widget/IRemoteViewsFactory;->hasStableIds()Z Lcom/android/internal/widget/IRemoteViewsFactory;->isCreated()Z Lcom/android/internal/widget/IRemoteViewsFactory;->onDataSetChanged()V +Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;->(Landroid/content/Context;)V +Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;->setDefaultTouchRecepient(Landroid/view/View;)V +Lcom/android/internal/widget/LockPatternChecker;->checkPassword(Lcom/android/internal/widget/LockPatternUtils;Ljava/lang/String;ILcom/android/internal/widget/LockPatternChecker$OnCheckCallback;)Landroid/os/AsyncTask; +Lcom/android/internal/widget/LockPatternUtils$RequestThrottledException;->(I)V +Lcom/android/internal/widget/LockPatternUtils$RequestThrottledException;->getTimeoutMs()I +Lcom/android/internal/widget/LockPatternUtils;->(Landroid/content/Context;)V +Lcom/android/internal/widget/LockPatternUtils;->checkPassword(Ljava/lang/String;I)Z +Lcom/android/internal/widget/LockPatternUtils;->getActivePasswordQuality(I)I +Lcom/android/internal/widget/LockPatternUtils;->getDevicePolicyManager()Landroid/app/admin/DevicePolicyManager; +Lcom/android/internal/widget/LockPatternUtils;->getKeyguardStoredPasswordQuality(I)I +Lcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings; +Lcom/android/internal/widget/LockPatternUtils;->getOwnerInfo(I)Ljava/lang/String; +Lcom/android/internal/widget/LockPatternUtils;->getPowerButtonInstantlyLocks(I)Z +Lcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String; +Lcom/android/internal/widget/LockPatternUtils;->isDeviceEncryptionEnabled()Z +Lcom/android/internal/widget/LockPatternUtils;->isLockPasswordEnabled(I)Z +Lcom/android/internal/widget/LockPatternUtils;->isLockPatternEnabled(I)Z +Lcom/android/internal/widget/LockPatternUtils;->isLockScreenDisabled(I)Z +Lcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z +Lcom/android/internal/widget/LockPatternUtils;->isTactileFeedbackEnabled()Z +Lcom/android/internal/widget/LockPatternUtils;->isVisiblePatternEnabled(I)Z +Lcom/android/internal/widget/LockPatternUtils;->mContentResolver:Landroid/content/ContentResolver; +Lcom/android/internal/widget/LockPatternUtils;->mContext:Landroid/content/Context; +Lcom/android/internal/widget/LockPatternUtils;->patternToHash(Ljava/util/List;)[B +Lcom/android/internal/widget/LockPatternUtils;->patternToString(Ljava/util/List;)Ljava/lang/String; +Lcom/android/internal/widget/LockPatternUtils;->reportFailedPasswordAttempt(I)V +Lcom/android/internal/widget/LockPatternUtils;->reportSuccessfulPasswordAttempt(I)V +Lcom/android/internal/widget/LockPatternUtils;->saveLockPassword(Ljava/lang/String;Ljava/lang/String;II)V +Lcom/android/internal/widget/LockPatternUtils;->setLockoutAttemptDeadline(II)J +Lcom/android/internal/widget/LockPatternUtils;->setLong(Ljava/lang/String;JI)V +Lcom/android/internal/widget/LockPatternUtils;->setOwnerInfo(Ljava/lang/String;I)V +Lcom/android/internal/widget/LockPatternUtils;->setOwnerInfoEnabled(ZI)V +Lcom/android/internal/widget/LockPatternUtils;->setString(Ljava/lang/String;Ljava/lang/String;I)V +Lcom/android/internal/widget/LockPatternView$Cell;->column:I +Lcom/android/internal/widget/LockPatternView$Cell;->row:I +Lcom/android/internal/widget/LockPatternView$DisplayMode;->Animate:Lcom/android/internal/widget/LockPatternView$DisplayMode; +Lcom/android/internal/widget/LockPatternView$DisplayMode;->Correct:Lcom/android/internal/widget/LockPatternView$DisplayMode; +Lcom/android/internal/widget/LockPatternView$DisplayMode;->Wrong:Lcom/android/internal/widget/LockPatternView$DisplayMode; +Lcom/android/internal/widget/LockPatternView$SavedState;->(Landroid/os/Parcel;)V +Lcom/android/internal/widget/LockPatternView$SavedState;->(Landroid/os/Parcelable;Ljava/lang/String;IZZZ)V +Lcom/android/internal/widget/LockPatternView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/widget/LockPatternView;->clearPattern()V +Lcom/android/internal/widget/LockPatternView;->disableInput()V +Lcom/android/internal/widget/LockPatternView;->enableInput()V +Lcom/android/internal/widget/LockPatternView;->getCellStates()[[Lcom/android/internal/widget/LockPatternView$CellState; +Lcom/android/internal/widget/LockPatternView;->mInStealthMode:Z +Lcom/android/internal/widget/LockPatternView;->mPaint:Landroid/graphics/Paint; +Lcom/android/internal/widget/LockPatternView;->mPathPaint:Landroid/graphics/Paint; +Lcom/android/internal/widget/LockPatternView;->mPattern:Ljava/util/ArrayList; +Lcom/android/internal/widget/LockPatternView;->mPatternDisplayMode:Lcom/android/internal/widget/LockPatternView$DisplayMode; +Lcom/android/internal/widget/LockPatternView;->mPatternInProgress:Z +Lcom/android/internal/widget/LockPatternView;->mSquareHeight:F +Lcom/android/internal/widget/LockPatternView;->mSquareWidth:F +Lcom/android/internal/widget/LockPatternView;->notifyPatternDetected()V +Lcom/android/internal/widget/LockPatternView;->setDisplayMode(Lcom/android/internal/widget/LockPatternView$DisplayMode;)V +Lcom/android/internal/widget/LockPatternView;->setInStealthMode(Z)V +Lcom/android/internal/widget/LockPatternView;->setOnPatternListener(Lcom/android/internal/widget/LockPatternView$OnPatternListener;)V +Lcom/android/internal/widget/LockPatternView;->setTactileFeedbackEnabled(Z)V +Lcom/android/internal/widget/PointerLocationView$PointerState;->()V +Lcom/android/internal/widget/PointerLocationView$PointerState;->mCurDown:Z +Lcom/android/internal/widget/PointerLocationView;->mCurDown:Z +Lcom/android/internal/widget/PointerLocationView;->mCurNumPointers:I +Lcom/android/internal/widget/PointerLocationView;->mMaxNumPointers:I +Lcom/android/internal/widget/PointerLocationView;->mPointers:Ljava/util/ArrayList; +Lcom/android/internal/widget/PointerLocationView;->mPrintCoords:Z +Lcom/android/internal/widget/PreferenceImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +Lcom/android/internal/widget/RecyclerView$RecycledViewPool$ScrapData;->mScrapHeap:Ljava/util/ArrayList; Lcom/android/internal/widget/ScrollBarUtils;->getThumbLength(IIII)I +Lcom/android/internal/widget/SlidingTab$Slider;->tab:Landroid/widget/ImageView; +Lcom/android/internal/widget/SlidingTab$Slider;->text:Landroid/widget/TextView; +Lcom/android/internal/widget/SlidingTab;->mAnimationDoneListener:Landroid/view/animation/Animation$AnimationListener; +Lcom/android/internal/widget/SlidingTab;->mLeftSlider:Lcom/android/internal/widget/SlidingTab$Slider; +Lcom/android/internal/widget/SlidingTab;->mRightSlider:Lcom/android/internal/widget/SlidingTab$Slider; +Lcom/android/internal/widget/SlidingTab;->onAnimationDone()V +Lcom/android/internal/widget/SlidingTab;->resetView()V +Lcom/android/internal/widget/SlidingTab;->setHoldAfterTrigger(ZZ)V +Lcom/android/internal/widget/SlidingTab;->setLeftHintText(I)V +Lcom/android/internal/widget/SlidingTab;->setLeftTabResources(IIII)V +Lcom/android/internal/widget/SlidingTab;->setOnTriggerListener(Lcom/android/internal/widget/SlidingTab$OnTriggerListener;)V +Lcom/android/internal/widget/SlidingTab;->setRightHintText(I)V +Lcom/android/internal/widget/SlidingTab;->setRightTabResources(IIII)V +Lcom/android/internal/widget/TextViewInputDisabler;->(Landroid/widget/TextView;)V +Lcom/android/internal/widget/TextViewInputDisabler;->setInputEnabled(Z)V +Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageScrolled(IFI)V +Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageScrollStateChanged(I)V +Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageSelected(I)V +Lcom/android/internal/widget/ViewPager;->getCurrentItem()I Lcom/android/okhttp/Connection;->getSocket()Ljava/net/Socket; Lcom/android/okhttp/ConnectionPool;->connections:Ljava/util/Deque; Lcom/android/okhttp/ConnectionPool;->keepAliveDurationNs:J Lcom/android/okhttp/ConnectionPool;->maxIdleConnections:I Lcom/android/okhttp/ConnectionPool;->systemDefault:Lcom/android/okhttp/ConnectionPool; +Lcom/android/okhttp/HttpHandler;->()V +Lcom/android/okhttp/HttpsHandler;->()V Lcom/android/okhttp/HttpUrl$Builder;->build()Lcom/android/okhttp/HttpUrl; Lcom/android/okhttp/HttpUrl;->encodedPath()Ljava/lang/String; Lcom/android/okhttp/HttpUrl;->newBuilder()Lcom/android/okhttp/HttpUrl$Builder; Lcom/android/okhttp/HttpUrl;->parse(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl; Lcom/android/okhttp/HttpUrl;->query()Ljava/lang/String; +Lcom/android/okhttp/internal/http/HeaderParser;->skipUntil(Ljava/lang/String;ILjava/lang/String;)I +Lcom/android/okhttp/internal/http/HeaderParser;->skipWhitespace(Ljava/lang/String;I)I +Lcom/android/okhttp/internal/http/HttpDate;->format(Ljava/util/Date;)Ljava/lang/String; +Lcom/android/okhttp/internal/http/HttpDate;->parse(Ljava/lang/String;)Ljava/util/Date; Lcom/android/okhttp/internal/http/HttpEngine;->getConnection()Lcom/android/okhttp/Connection; Lcom/android/okhttp/internal/http/HttpEngine;->hasResponse()Z Lcom/android/okhttp/internal/http/HttpEngine;->httpStream:Lcom/android/okhttp/internal/http/HttpStream; @@ -2169,6 +4184,29 @@ Lcom/android/okhttp/internal/http/HttpEngine;->sentRequestMillis:J Lcom/android/okhttp/internal/http/HttpEngine;->userResponse:Lcom/android/okhttp/Response; Lcom/android/okhttp/internal/http/HttpEngine;->writingRequestHeaders()V Lcom/android/okhttp/internal/http/RouteSelector;->hasNext()Z +Lcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->delegate:Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl; +Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->client:Lcom/android/okhttp/OkHttpClient; +Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->httpEngine:Lcom/android/okhttp/internal/http/HttpEngine; +Lcom/android/okhttp/internal/Internal;->()V +Lcom/android/okhttp/internal/Internal;->addLenient(Lcom/android/okhttp/Headers$Builder;Ljava/lang/String;)V +Lcom/android/okhttp/internal/Internal;->addLenient(Lcom/android/okhttp/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/okhttp/internal/Internal;->apply(Lcom/android/okhttp/ConnectionSpec;Ljavax/net/ssl/SSLSocket;Z)V +Lcom/android/okhttp/internal/Internal;->callEngineGetStreamAllocation(Lcom/android/okhttp/Call;)Lcom/android/okhttp/internal/http/StreamAllocation; +Lcom/android/okhttp/internal/Internal;->callEnqueue(Lcom/android/okhttp/Call;Lcom/android/okhttp/Callback;Z)V +Lcom/android/okhttp/internal/Internal;->connectionBecameIdle(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)Z +Lcom/android/okhttp/internal/Internal;->get(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/http/StreamAllocation;)Lcom/android/okhttp/internal/io/RealConnection; +Lcom/android/okhttp/internal/Internal;->getHttpUrlChecked(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl; +Lcom/android/okhttp/internal/Internal;->instance:Lcom/android/okhttp/internal/Internal; +Lcom/android/okhttp/internal/Internal;->internalCache(Lcom/android/okhttp/OkHttpClient;)Lcom/android/okhttp/internal/InternalCache; +Lcom/android/okhttp/internal/Internal;->put(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)V +Lcom/android/okhttp/internal/Internal;->routeDatabase(Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/internal/RouteDatabase; +Lcom/android/okhttp/internal/Internal;->setCache(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/internal/InternalCache;)V +Lcom/android/okhttp/internal/Platform;->get()Lcom/android/okhttp/internal/Platform; +Lcom/android/okhttp/internal/Platform;->logW(Ljava/lang/String;)V +Lcom/android/okhttp/internal/Util;->closeAll(Ljava/io/Closeable;Ljava/io/Closeable;)V +Lcom/android/okhttp/internal/Util;->closeQuietly(Ljava/io/Closeable;)V +Lcom/android/okhttp/internal/Util;->EMPTY_BYTE_ARRAY:[B +Lcom/android/okhttp/internal/Util;->UTF_8:Ljava/nio/charset/Charset; Lcom/android/okhttp/OkHttpClient;->()V Lcom/android/okhttp/OkHttpClient;->connectionPool:Lcom/android/okhttp/ConnectionPool; Lcom/android/okhttp/OkHttpClient;->DEFAULT_PROTOCOLS:Ljava/util/List; @@ -2189,76 +4227,73 @@ Lcom/android/okhttp/Response;->headers:Lcom/android/okhttp/Headers; Lcom/android/okhttp/Response;->message:Ljava/lang/String; Lcom/android/okhttp/Response;->networkResponse:Lcom/android/okhttp/Response; Lcom/android/okhttp/Response;->protocol:Lcom/android/okhttp/Protocol; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getAlpnSelectedProtocol()[B -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getApplicationProtocol()Ljava/lang/String; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getApplicationProtocols()[Ljava/lang/String; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getChannelId()[B -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getHandshakeApplicationProtocol()Ljava/lang/String; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getHostname()Ljava/lang/String; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getHostnameOrIP()Ljava/lang/String; -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getNpnSelectedProtocol()[B -Lcom/android/org/conscrypt/AbstractConscryptSocket;->getSoWriteTimeout()I -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setAlpnProtocols([B)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setAlpnProtocols([Ljava/lang/String;)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setApplicationProtocols([Ljava/lang/String;)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setChannelIdEnabled(Z)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setChannelIdPrivateKey(Ljava/security/PrivateKey;)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setHandshakeTimeout(I)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setHostname(Ljava/lang/String;)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setNpnProtocols([B)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setSoWriteTimeout(I)V -Lcom/android/org/conscrypt/AbstractConscryptSocket;->setUseSessionTickets(Z)V -Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setHostname(Ljava/lang/String;)V -Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setUseSessionTickets(Z)V -Lcom/android/org/conscrypt/OpenSSLKey;->(J)V -Lcom/android/org/conscrypt/OpenSSLKey;->fromPrivateKey(Ljava/security/PrivateKey;)Lcom/android/org/conscrypt/OpenSSLKey; -Lcom/android/org/conscrypt/OpenSSLKey;->getNativeRef()Lcom/android/org/conscrypt/NativeRef$EVP_PKEY; -Lcom/android/org/conscrypt/OpenSSLKey;->getPublicKey()Ljava/security/PublicKey; -Lcom/android/org/conscrypt/OpenSSLProvider;->()V -Lcom/android/org/conscrypt/OpenSSLRandom;->()V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getChannelId()[B -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostname()Ljava/lang/String; -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostnameOrIP()Ljava/lang/String; -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getNpnSelectedProtocol()[B -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getSoWriteTimeout()I -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([Ljava/lang/String;)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setChannelIdEnabled(Z)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setChannelIdPrivateKey(Ljava/security/PrivateKey;)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHandshakeTimeout(I)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setNpnProtocols([B)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setSoWriteTimeout(I)V -Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V -Lcom/android/org/conscrypt/OpenSSLX509Certificate;->fromX509PemInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate; -Lcom/android/org/conscrypt/OpenSSLX509Certificate;->mContext:J -Lcom/android/org/conscrypt/TrustedCertificateStore;->()V -Lcom/android/org/conscrypt/TrustedCertificateStore;->getCertificateChain(Ljava/security/cert/X509Certificate;)Ljava/util/List; -Lcom/android/org/conscrypt/TrustManagerImpl;->(Ljava/security/KeyStore;)V -Lcom/android/org/conscrypt/TrustManagerImpl;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; +Lcom/android/server/net/BaseNetworkObserver;->()V +Lcom/android/server/net/NetlinkTracker;->(Ljava/lang/String;Lcom/android/server/net/NetlinkTracker$Callback;)V +Lcom/android/server/net/NetlinkTracker;->clearLinkProperties()V +Lcom/android/server/net/NetlinkTracker;->getLinkProperties()Landroid/net/LinkProperties; +Lcom/android/server/ResettableTimeout$T;->(Lcom/android/server/ResettableTimeout;)V +Lcom/android/server/ResettableTimeout;->mLock:Landroid/os/ConditionVariable; +Lcom/android/server/ResettableTimeout;->mOffAt:J +Lcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList; +Lcom/google/android/collect/Sets;->newArraySet()Landroid/util/ArraySet; +Lcom/google/android/collect/Sets;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet; +Lcom/google/android/collect/Sets;->newHashSet()Ljava/util/HashSet; +Lcom/google/android/collect/Sets;->newHashSet([Ljava/lang/Object;)Ljava/util/HashSet; +Lcom/google/android/collect/Sets;->newSortedSet()Ljava/util/SortedSet; +Lcom/google/android/gles_jni/EGLImpl;->()V +Lcom/google/android/gles_jni/GLImpl;->()V Lcom/google/android/mms/ContentType;->getAudioTypes()Ljava/util/ArrayList; Lcom/google/android/mms/ContentType;->getImageTypes()Ljava/util/ArrayList; Lcom/google/android/mms/ContentType;->getVideoTypes()Ljava/util/ArrayList; Lcom/google/android/mms/ContentType;->isAudioType(Ljava/lang/String;)Z Lcom/google/android/mms/ContentType;->isDrmType(Ljava/lang/String;)Z Lcom/google/android/mms/ContentType;->isImageType(Ljava/lang/String;)Z +Lcom/google/android/mms/ContentType;->isSupportedAudioType(Ljava/lang/String;)Z +Lcom/google/android/mms/ContentType;->isSupportedImageType(Ljava/lang/String;)Z +Lcom/google/android/mms/ContentType;->isSupportedType(Ljava/lang/String;)Z +Lcom/google/android/mms/ContentType;->isSupportedVideoType(Ljava/lang/String;)Z Lcom/google/android/mms/ContentType;->isTextType(Ljava/lang/String;)Z Lcom/google/android/mms/ContentType;->isVideoType(Ljava/lang/String;)Z +Lcom/google/android/mms/InvalidHeaderValueException;->(Ljava/lang/String;)V Lcom/google/android/mms/MmsException;->()V Lcom/google/android/mms/MmsException;->(Ljava/lang/String;)V +Lcom/google/android/mms/MmsException;->(Ljava/lang/String;Ljava/lang/Throwable;)V Lcom/google/android/mms/MmsException;->(Ljava/lang/Throwable;)V Lcom/google/android/mms/pdu/AcknowledgeInd;->(I[B)V +Lcom/google/android/mms/pdu/AcknowledgeInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V +Lcom/google/android/mms/pdu/AcknowledgeInd;->setReportAllowed(I)V +Lcom/google/android/mms/pdu/AcknowledgeInd;->setTransactionId([B)V +Lcom/google/android/mms/pdu/Base64;->decodeBase64([B)[B +Lcom/google/android/mms/pdu/CharacterSets;->getMibEnumValue(Ljava/lang/String;)I Lcom/google/android/mms/pdu/CharacterSets;->getMimeName(I)Ljava/lang/String; +Lcom/google/android/mms/pdu/DeliveryInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V +Lcom/google/android/mms/pdu/DeliveryInd;->getDate()J Lcom/google/android/mms/pdu/DeliveryInd;->getMessageId()[B +Lcom/google/android/mms/pdu/DeliveryInd;->getStatus()I +Lcom/google/android/mms/pdu/DeliveryInd;->getTo()[Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/EncodedStringValue;->(I[B)V Lcom/google/android/mms/pdu/EncodedStringValue;->(Ljava/lang/String;)V Lcom/google/android/mms/pdu/EncodedStringValue;->([B)V +Lcom/google/android/mms/pdu/EncodedStringValue;->appendTextString([B)V Lcom/google/android/mms/pdu/EncodedStringValue;->concat([Lcom/google/android/mms/pdu/EncodedStringValue;)Ljava/lang/String; +Lcom/google/android/mms/pdu/EncodedStringValue;->copy(Lcom/google/android/mms/pdu/EncodedStringValue;)Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/EncodedStringValue;->encodeStrings([Ljava/lang/String;)[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/EncodedStringValue;->extract(Ljava/lang/String;)[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/EncodedStringValue;->getCharacterSet()I Lcom/google/android/mms/pdu/EncodedStringValue;->getString()Ljava/lang/String; +Lcom/google/android/mms/pdu/EncodedStringValue;->getTextString()[B +Lcom/google/android/mms/pdu/EncodedStringValue;->setCharacterSet(I)V +Lcom/google/android/mms/pdu/EncodedStringValue;->setTextString([B)V +Lcom/google/android/mms/pdu/GenericPdu;->()V +Lcom/google/android/mms/pdu/GenericPdu;->getFrom()Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/GenericPdu;->getMessageType()I +Lcom/google/android/mms/pdu/GenericPdu;->getPduHeaders()Lcom/google/android/mms/pdu/PduHeaders; +Lcom/google/android/mms/pdu/GenericPdu;->mPduHeaders:Lcom/google/android/mms/pdu/PduHeaders; Lcom/google/android/mms/pdu/GenericPdu;->setFrom(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/GenericPdu;->setMessageType(I)V +Lcom/google/android/mms/pdu/MultimediaMessagePdu;->()V +Lcom/google/android/mms/pdu/MultimediaMessagePdu;->(Lcom/google/android/mms/pdu/PduHeaders;Lcom/google/android/mms/pdu/PduBody;)V +Lcom/google/android/mms/pdu/MultimediaMessagePdu;->addTo(Lcom/google/android/mms/pdu/EncodedStringValue;)V Lcom/google/android/mms/pdu/MultimediaMessagePdu;->getBody()Lcom/google/android/mms/pdu/PduBody; Lcom/google/android/mms/pdu/MultimediaMessagePdu;->getDate()J Lcom/google/android/mms/pdu/MultimediaMessagePdu;->getPriority()I @@ -2268,15 +4303,31 @@ Lcom/google/android/mms/pdu/MultimediaMessagePdu;->setBody(Lcom/google/android/m Lcom/google/android/mms/pdu/MultimediaMessagePdu;->setDate(J)V Lcom/google/android/mms/pdu/MultimediaMessagePdu;->setPriority(I)V Lcom/google/android/mms/pdu/MultimediaMessagePdu;->setSubject(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/NotificationInd;->()V +Lcom/google/android/mms/pdu/NotificationInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V +Lcom/google/android/mms/pdu/NotificationInd;->getContentClass()I Lcom/google/android/mms/pdu/NotificationInd;->getContentLocation()[B +Lcom/google/android/mms/pdu/NotificationInd;->getDeliveryReport()I Lcom/google/android/mms/pdu/NotificationInd;->getExpiry()J Lcom/google/android/mms/pdu/NotificationInd;->getFrom()Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/NotificationInd;->getMessageClass()[B Lcom/google/android/mms/pdu/NotificationInd;->getMessageSize()J Lcom/google/android/mms/pdu/NotificationInd;->getSubject()Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/NotificationInd;->getTransactionId()[B +Lcom/google/android/mms/pdu/NotificationInd;->setContentClass(I)V Lcom/google/android/mms/pdu/NotificationInd;->setContentLocation([B)V +Lcom/google/android/mms/pdu/NotificationInd;->setDeliveryReport(I)V +Lcom/google/android/mms/pdu/NotificationInd;->setExpiry(J)V +Lcom/google/android/mms/pdu/NotificationInd;->setFrom(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/NotificationInd;->setMessageClass([B)V +Lcom/google/android/mms/pdu/NotificationInd;->setMessageSize(J)V +Lcom/google/android/mms/pdu/NotificationInd;->setSubject(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/NotificationInd;->setTransactionId([B)V Lcom/google/android/mms/pdu/NotifyRespInd;->(I[BI)V +Lcom/google/android/mms/pdu/NotifyRespInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V +Lcom/google/android/mms/pdu/NotifyRespInd;->setReportAllowed(I)V +Lcom/google/android/mms/pdu/NotifyRespInd;->setStatus(I)V +Lcom/google/android/mms/pdu/NotifyRespInd;->setTransactionId([B)V Lcom/google/android/mms/pdu/PduBody;->()V Lcom/google/android/mms/pdu/PduBody;->addPart(ILcom/google/android/mms/pdu/PduPart;)V Lcom/google/android/mms/pdu/PduBody;->addPart(Lcom/google/android/mms/pdu/PduPart;)Z @@ -2285,516 +4336,1114 @@ Lcom/google/android/mms/pdu/PduBody;->getPartByContentId(Ljava/lang/String;)Lcom Lcom/google/android/mms/pdu/PduBody;->getPartByContentLocation(Ljava/lang/String;)Lcom/google/android/mms/pdu/PduPart; Lcom/google/android/mms/pdu/PduBody;->getPartByFileName(Ljava/lang/String;)Lcom/google/android/mms/pdu/PduPart; Lcom/google/android/mms/pdu/PduBody;->getPartByName(Ljava/lang/String;)Lcom/google/android/mms/pdu/PduPart; +Lcom/google/android/mms/pdu/PduBody;->getPartIndex(Lcom/google/android/mms/pdu/PduPart;)I Lcom/google/android/mms/pdu/PduBody;->getPartsNum()I +Lcom/google/android/mms/pdu/PduBody;->removePart(I)Lcom/google/android/mms/pdu/PduPart; +Lcom/google/android/mms/pdu/PduComposer$BufferStack;->copy()V +Lcom/google/android/mms/pdu/PduComposer$BufferStack;->mark()Lcom/google/android/mms/pdu/PduComposer$PositionMarker; +Lcom/google/android/mms/pdu/PduComposer$BufferStack;->newbuf()V +Lcom/google/android/mms/pdu/PduComposer$BufferStack;->pop()V +Lcom/google/android/mms/pdu/PduComposer$PositionMarker;->getLength()I Lcom/google/android/mms/pdu/PduComposer;->(Landroid/content/Context;Lcom/google/android/mms/pdu/GenericPdu;)V +Lcom/google/android/mms/pdu/PduComposer;->appendEncodedString(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/PduComposer;->appendHeader(I)I +Lcom/google/android/mms/pdu/PduComposer;->appendLongInteger(J)V +Lcom/google/android/mms/pdu/PduComposer;->appendOctet(I)V +Lcom/google/android/mms/pdu/PduComposer;->appendQuotedString(Ljava/lang/String;)V +Lcom/google/android/mms/pdu/PduComposer;->appendQuotedString([B)V +Lcom/google/android/mms/pdu/PduComposer;->appendShortInteger(I)V +Lcom/google/android/mms/pdu/PduComposer;->appendTextString(Ljava/lang/String;)V +Lcom/google/android/mms/pdu/PduComposer;->appendTextString([B)V +Lcom/google/android/mms/pdu/PduComposer;->appendUintvarInteger(J)V +Lcom/google/android/mms/pdu/PduComposer;->appendValueLength(J)V +Lcom/google/android/mms/pdu/PduComposer;->arraycopy([BII)V Lcom/google/android/mms/pdu/PduComposer;->make()[B +Lcom/google/android/mms/pdu/PduComposer;->mContentTypeMap:Ljava/util/HashMap; +Lcom/google/android/mms/pdu/PduComposer;->mMessage:Ljava/io/ByteArrayOutputStream; +Lcom/google/android/mms/pdu/PduComposer;->mPdu:Lcom/google/android/mms/pdu/GenericPdu; +Lcom/google/android/mms/pdu/PduComposer;->mPduHeader:Lcom/google/android/mms/pdu/PduHeaders; +Lcom/google/android/mms/pdu/PduComposer;->mPosition:I +Lcom/google/android/mms/pdu/PduComposer;->mResolver:Landroid/content/ContentResolver; +Lcom/google/android/mms/pdu/PduComposer;->mStack:Lcom/google/android/mms/pdu/PduComposer$BufferStack; +Lcom/google/android/mms/pdu/PduContentTypes;->contentTypes:[Ljava/lang/String; +Lcom/google/android/mms/pdu/PduHeaders;->()V +Lcom/google/android/mms/pdu/PduHeaders;->appendEncodedStringValue(Lcom/google/android/mms/pdu/EncodedStringValue;I)V +Lcom/google/android/mms/pdu/PduHeaders;->getEncodedStringValue(I)Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/PduHeaders;->getEncodedStringValues(I)[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/PduHeaders;->getLongInteger(I)J +Lcom/google/android/mms/pdu/PduHeaders;->getOctet(I)I +Lcom/google/android/mms/pdu/PduHeaders;->getTextString(I)[B +Lcom/google/android/mms/pdu/PduHeaders;->setEncodedStringValue(Lcom/google/android/mms/pdu/EncodedStringValue;I)V +Lcom/google/android/mms/pdu/PduHeaders;->setLongInteger(JI)V +Lcom/google/android/mms/pdu/PduHeaders;->setOctet(II)V +Lcom/google/android/mms/pdu/PduParser;->$assertionsDisabled:Z +Lcom/google/android/mms/pdu/PduParser;->([BZ)V +Lcom/google/android/mms/pdu/PduParser;->checkPartPosition(Lcom/google/android/mms/pdu/PduPart;)I +Lcom/google/android/mms/pdu/PduParser;->log(Ljava/lang/String;)V Lcom/google/android/mms/pdu/PduParser;->parse()Lcom/google/android/mms/pdu/GenericPdu; +Lcom/google/android/mms/pdu/PduParser;->parseContentType(Ljava/io/ByteArrayInputStream;Ljava/util/HashMap;)[B +Lcom/google/android/mms/pdu/PduParser;->parsePartHeaders(Ljava/io/ByteArrayInputStream;Lcom/google/android/mms/pdu/PduPart;I)Z +Lcom/google/android/mms/pdu/PduParser;->parseShortInteger(Ljava/io/ByteArrayInputStream;)I +Lcom/google/android/mms/pdu/PduParser;->parseUnsignedInt(Ljava/io/ByteArrayInputStream;)I +Lcom/google/android/mms/pdu/PduParser;->parseValueLength(Ljava/io/ByteArrayInputStream;)I +Lcom/google/android/mms/pdu/PduParser;->parseWapString(Ljava/io/ByteArrayInputStream;I)[B Lcom/google/android/mms/pdu/PduPart;->()V Lcom/google/android/mms/pdu/PduPart;->generateLocation()Ljava/lang/String; Lcom/google/android/mms/pdu/PduPart;->getCharset()I +Lcom/google/android/mms/pdu/PduPart;->getContentDisposition()[B +Lcom/google/android/mms/pdu/PduPart;->getContentId()[B Lcom/google/android/mms/pdu/PduPart;->getContentLocation()[B +Lcom/google/android/mms/pdu/PduPart;->getContentTransferEncoding()[B Lcom/google/android/mms/pdu/PduPart;->getContentType()[B Lcom/google/android/mms/pdu/PduPart;->getData()[B +Lcom/google/android/mms/pdu/PduPart;->getDataLength()I Lcom/google/android/mms/pdu/PduPart;->getDataUri()Landroid/net/Uri; Lcom/google/android/mms/pdu/PduPart;->getFilename()[B Lcom/google/android/mms/pdu/PduPart;->getName()[B Lcom/google/android/mms/pdu/PduPart;->setCharset(I)V +Lcom/google/android/mms/pdu/PduPart;->setContentDisposition([B)V Lcom/google/android/mms/pdu/PduPart;->setContentId([B)V Lcom/google/android/mms/pdu/PduPart;->setContentLocation([B)V +Lcom/google/android/mms/pdu/PduPart;->setContentTransferEncoding([B)V Lcom/google/android/mms/pdu/PduPart;->setContentType([B)V Lcom/google/android/mms/pdu/PduPart;->setData([B)V Lcom/google/android/mms/pdu/PduPart;->setDataUri(Landroid/net/Uri;)V +Lcom/google/android/mms/pdu/PduPart;->setFilename([B)V +Lcom/google/android/mms/pdu/PduPart;->setName([B)V +Lcom/google/android/mms/pdu/PduPersister;->ADDRESS_FIELDS:[I +Lcom/google/android/mms/pdu/PduPersister;->CHARSET_COLUMN_NAME_MAP:Ljava/util/HashMap; +Lcom/google/android/mms/pdu/PduPersister;->ENCODED_STRING_COLUMN_NAME_MAP:Ljava/util/HashMap; +Lcom/google/android/mms/pdu/PduPersister;->getByteArrayFromPartColumn(Landroid/database/Cursor;I)[B Lcom/google/android/mms/pdu/PduPersister;->getBytes(Ljava/lang/String;)[B +Lcom/google/android/mms/pdu/PduPersister;->getIntegerFromPartColumn(Landroid/database/Cursor;I)Ljava/lang/Integer; +Lcom/google/android/mms/pdu/PduPersister;->getPartContentType(Lcom/google/android/mms/pdu/PduPart;)Ljava/lang/String; Lcom/google/android/mms/pdu/PduPersister;->getPduPersister(Landroid/content/Context;)Lcom/google/android/mms/pdu/PduPersister; Lcom/google/android/mms/pdu/PduPersister;->getPendingMessages(J)Landroid/database/Cursor; Lcom/google/android/mms/pdu/PduPersister;->load(Landroid/net/Uri;)Lcom/google/android/mms/pdu/GenericPdu; +Lcom/google/android/mms/pdu/PduPersister;->loadRecipients(ILjava/util/HashSet;Ljava/util/HashMap;Z)V +Lcom/google/android/mms/pdu/PduPersister;->LONG_COLUMN_NAME_MAP:Ljava/util/HashMap; +Lcom/google/android/mms/pdu/PduPersister;->mContentResolver:Landroid/content/ContentResolver; +Lcom/google/android/mms/pdu/PduPersister;->mContext:Landroid/content/Context; +Lcom/google/android/mms/pdu/PduPersister;->MESSAGE_BOX_MAP:Ljava/util/HashMap; Lcom/google/android/mms/pdu/PduPersister;->move(Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri; +Lcom/google/android/mms/pdu/PduPersister;->mTelephonyManager:Landroid/telephony/TelephonyManager; +Lcom/google/android/mms/pdu/PduPersister;->OCTET_COLUMN_NAME_MAP:Ljava/util/HashMap; +Lcom/google/android/mms/pdu/PduPersister;->PART_PROJECTION:[Ljava/lang/String; +Lcom/google/android/mms/pdu/PduPersister;->PDU_CACHE_INSTANCE:Lcom/google/android/mms/util/PduCache; Lcom/google/android/mms/pdu/PduPersister;->persist(Lcom/google/android/mms/pdu/GenericPdu;Landroid/net/Uri;ZZLjava/util/HashMap;)Landroid/net/Uri; +Lcom/google/android/mms/pdu/PduPersister;->persistAddress(JI[Lcom/google/android/mms/pdu/EncodedStringValue;)V Lcom/google/android/mms/pdu/PduPersister;->persistPart(Lcom/google/android/mms/pdu/PduPart;JLjava/util/HashMap;)Landroid/net/Uri; +Lcom/google/android/mms/pdu/PduPersister;->TEXT_STRING_COLUMN_NAME_MAP:Ljava/util/HashMap; Lcom/google/android/mms/pdu/PduPersister;->toIsoString([B)Ljava/lang/String; +Lcom/google/android/mms/pdu/PduPersister;->updateAddress(JI[Lcom/google/android/mms/pdu/EncodedStringValue;)V Lcom/google/android/mms/pdu/PduPersister;->updateHeaders(Landroid/net/Uri;Lcom/google/android/mms/pdu/SendReq;)V Lcom/google/android/mms/pdu/PduPersister;->updateParts(Landroid/net/Uri;Lcom/google/android/mms/pdu/PduBody;Ljava/util/HashMap;)V +Lcom/google/android/mms/pdu/QuotedPrintable;->decodeQuotedPrintable([B)[B +Lcom/google/android/mms/pdu/ReadOrigInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V Lcom/google/android/mms/pdu/ReadOrigInd;->getMessageId()[B +Lcom/google/android/mms/pdu/ReadOrigInd;->getReadStatus()I Lcom/google/android/mms/pdu/ReadRecInd;->(Lcom/google/android/mms/pdu/EncodedStringValue;[BII[Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/ReadRecInd;->(Lcom/google/android/mms/pdu/PduHeaders;)V +Lcom/google/android/mms/pdu/ReadRecInd;->getMessageId()[B Lcom/google/android/mms/pdu/ReadRecInd;->setDate(J)V +Lcom/google/android/mms/pdu/RetrieveConf;->()V +Lcom/google/android/mms/pdu/RetrieveConf;->(Lcom/google/android/mms/pdu/PduHeaders;Lcom/google/android/mms/pdu/PduBody;)V +Lcom/google/android/mms/pdu/RetrieveConf;->addCc(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/RetrieveConf;->getCc()[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/RetrieveConf;->getContentType()[B +Lcom/google/android/mms/pdu/RetrieveConf;->getDeliveryReport()I Lcom/google/android/mms/pdu/RetrieveConf;->getFrom()Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/RetrieveConf;->getMessageClass()[B Lcom/google/android/mms/pdu/RetrieveConf;->getMessageId()[B +Lcom/google/android/mms/pdu/RetrieveConf;->getReadReport()I +Lcom/google/android/mms/pdu/RetrieveConf;->getRetrieveStatus()I +Lcom/google/android/mms/pdu/RetrieveConf;->getRetrieveText()Lcom/google/android/mms/pdu/EncodedStringValue; Lcom/google/android/mms/pdu/RetrieveConf;->getTransactionId()[B +Lcom/google/android/mms/pdu/RetrieveConf;->setContentType([B)V +Lcom/google/android/mms/pdu/RetrieveConf;->setDeliveryReport(I)V +Lcom/google/android/mms/pdu/RetrieveConf;->setFrom(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/RetrieveConf;->setMessageClass([B)V +Lcom/google/android/mms/pdu/RetrieveConf;->setMessageId([B)V +Lcom/google/android/mms/pdu/RetrieveConf;->setReadReport(I)V +Lcom/google/android/mms/pdu/RetrieveConf;->setRetrieveStatus(I)V +Lcom/google/android/mms/pdu/RetrieveConf;->setRetrieveText(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/RetrieveConf;->setTransactionId([B)V +Lcom/google/android/mms/pdu/SendConf;->()V +Lcom/google/android/mms/pdu/SendConf;->(Lcom/google/android/mms/pdu/PduHeaders;)V Lcom/google/android/mms/pdu/SendConf;->getMessageId()[B Lcom/google/android/mms/pdu/SendConf;->getResponseStatus()I Lcom/google/android/mms/pdu/SendConf;->getTransactionId()[B Lcom/google/android/mms/pdu/SendReq;->()V +Lcom/google/android/mms/pdu/SendReq;->(Lcom/google/android/mms/pdu/PduHeaders;Lcom/google/android/mms/pdu/PduBody;)V +Lcom/google/android/mms/pdu/SendReq;->addBcc(Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/SendReq;->addCc(Lcom/google/android/mms/pdu/EncodedStringValue;)V Lcom/google/android/mms/pdu/SendReq;->getBcc()[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/SendReq;->getCc()[Lcom/google/android/mms/pdu/EncodedStringValue; +Lcom/google/android/mms/pdu/SendReq;->getContentType()[B +Lcom/google/android/mms/pdu/SendReq;->getDeliveryReport()I +Lcom/google/android/mms/pdu/SendReq;->getExpiry()J +Lcom/google/android/mms/pdu/SendReq;->getMessageClass()[B +Lcom/google/android/mms/pdu/SendReq;->getMessageSize()J +Lcom/google/android/mms/pdu/SendReq;->getReadReport()I Lcom/google/android/mms/pdu/SendReq;->getTransactionId()[B +Lcom/google/android/mms/pdu/SendReq;->setBcc([Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/SendReq;->setCc([Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/SendReq;->setContentType([B)V Lcom/google/android/mms/pdu/SendReq;->setDeliveryReport(I)V Lcom/google/android/mms/pdu/SendReq;->setExpiry(J)V Lcom/google/android/mms/pdu/SendReq;->setMessageClass([B)V Lcom/google/android/mms/pdu/SendReq;->setMessageSize(J)V Lcom/google/android/mms/pdu/SendReq;->setReadReport(I)V Lcom/google/android/mms/pdu/SendReq;->setTo([Lcom/google/android/mms/pdu/EncodedStringValue;)V +Lcom/google/android/mms/pdu/SendReq;->setTransactionId([B)V +Lcom/google/android/mms/util/AbstractCache;->()V Lcom/google/android/mms/util/AbstractCache;->get(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/mms/util/AbstractCache;->purge(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/mms/util/AbstractCache;->purgeAll()V +Lcom/google/android/mms/util/AbstractCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Z +Lcom/google/android/mms/util/DownloadDrmHelper;->isDrmConvertNeeded(Ljava/lang/String;)Z +Lcom/google/android/mms/util/DownloadDrmHelper;->modifyDrmFwLockFileExtension(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/mms/util/DrmConvertSession;->close(Ljava/lang/String;)I +Lcom/google/android/mms/util/DrmConvertSession;->convert([BI)[B +Lcom/google/android/mms/util/DrmConvertSession;->open(Landroid/content/Context;Ljava/lang/String;)Lcom/google/android/mms/util/DrmConvertSession; +Lcom/google/android/mms/util/PduCache;->()V Lcom/google/android/mms/util/PduCache;->getInstance()Lcom/google/android/mms/util/PduCache; Lcom/google/android/mms/util/PduCache;->isUpdating(Landroid/net/Uri;)Z Lcom/google/android/mms/util/PduCache;->purge(Landroid/net/Uri;)Lcom/google/android/mms/util/PduCacheEntry; Lcom/google/android/mms/util/PduCache;->purgeAll()V +Lcom/google/android/mms/util/PduCacheEntry;->(Lcom/google/android/mms/pdu/GenericPdu;IJ)V +Lcom/google/android/mms/util/PduCacheEntry;->getMessageBox()I Lcom/google/android/mms/util/PduCacheEntry;->getPdu()Lcom/google/android/mms/pdu/GenericPdu; +Lcom/google/android/mms/util/PduCacheEntry;->getThreadId()J +Lcom/google/android/mms/util/SqliteWrapper;->checkSQLiteException(Landroid/content/Context;Landroid/database/sqlite/SQLiteException;)V +Lcom/google/android/mms/util/SqliteWrapper;->delete(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I Lcom/google/android/mms/util/SqliteWrapper;->insert(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; -Ldalvik/system/BaseDexClassLoader;->(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V -Ldalvik/system/BaseDexClassLoader;->addDexPath(Ljava/lang/String;)V -Ldalvik/system/BaseDexClassLoader;->addDexPath(Ljava/lang/String;Z)V -Ldalvik/system/BaseDexClassLoader;->getLdLibraryPath()Ljava/lang/String; -Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; -Ldalvik/system/BlockGuard$BlockGuardPolicyException;->(IILjava/lang/String;)V -Ldalvik/system/BlockGuard$BlockGuardPolicyException;->mMessage:Ljava/lang/String; -Ldalvik/system/BlockGuard$BlockGuardPolicyException;->mPolicyState:I -Ldalvik/system/BlockGuard$BlockGuardPolicyException;->mPolicyViolated:I -Ldalvik/system/BlockGuard$Policy;->onNetwork()V -Ldalvik/system/BlockGuard$Policy;->onReadFromDisk()V -Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; -Ldalvik/system/BlockGuard;->LAX_POLICY:Ldalvik/system/BlockGuard$Policy; -Ldalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V -Ldalvik/system/BlockGuard;->threadPolicy:Ljava/lang/ThreadLocal; -Ldalvik/system/CloseGuard$DefaultReporter;->()V -Ldalvik/system/CloseGuard$Reporter;->report(Ljava/lang/String;Ljava/lang/Throwable;)V -Ldalvik/system/CloseGuard;->()V -Ldalvik/system/CloseGuard;->close()V -Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; -Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V -Ldalvik/system/CloseGuard;->setEnabled(Z)V -Ldalvik/system/CloseGuard;->setReporter(Ldalvik/system/CloseGuard$Reporter;)V -Ldalvik/system/CloseGuard;->warnIfOpen()V -Ldalvik/system/DexFile$DFEnum;->mNameList:[Ljava/lang/String; -Ldalvik/system/DexFile;->getClassNameList(Ljava/lang/Object;)[Ljava/lang/String; -Ldalvik/system/DexFile;->isBackedByOatFile()Z -Ldalvik/system/DexFile;->loadClassBinaryName(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class; -Ldalvik/system/DexFile;->loadDex(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ldalvik/system/DexFile; -Ldalvik/system/DexFile;->mCookie:Ljava/lang/Object; -Ldalvik/system/DexFile;->mFileName:Ljava/lang/String; -Ldalvik/system/DexFile;->mInternalCookie:Ljava/lang/Object; -Ldalvik/system/DexFile;->openDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; -Ldalvik/system/DexFile;->openDexFileNative(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; -Ldalvik/system/DexPathList$Element;->(Ldalvik/system/DexFile;Ljava/io/File;)V -Ldalvik/system/DexPathList$Element;->(Ljava/io/File;ZLjava/io/File;Ldalvik/system/DexFile;)V -Ldalvik/system/DexPathList$Element;->dexFile:Ldalvik/system/DexFile; -Ldalvik/system/DexPathList$Element;->path:Ljava/io/File; -Ldalvik/system/DexPathList$NativeLibraryElement;->(Ljava/io/File;)V -Ldalvik/system/DexPathList$NativeLibraryElement;->path:Ljava/io/File; -Ldalvik/system/DexPathList;->(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)V -Ldalvik/system/DexPathList;->addDexPath(Ljava/lang/String;Ljava/io/File;)V -Ldalvik/system/DexPathList;->addNativePath(Ljava/util/Collection;)V -Ldalvik/system/DexPathList;->definingContext:Ljava/lang/ClassLoader; -Ldalvik/system/DexPathList;->dexElements:[Ldalvik/system/DexPathList$Element; -Ldalvik/system/DexPathList;->dexElementsSuppressedExceptions:[Ljava/io/IOException; -Ldalvik/system/DexPathList;->loadDexFile(Ljava/io/File;Ljava/io/File;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ldalvik/system/DexFile; -Ldalvik/system/DexPathList;->makeDexElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;Ljava/lang/ClassLoader;)[Ldalvik/system/DexPathList$Element; -Ldalvik/system/DexPathList;->makeInMemoryDexElements([Ljava/nio/ByteBuffer;Ljava/util/List;)[Ldalvik/system/DexPathList$Element; -Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;)[Ldalvik/system/DexPathList$NativeLibraryElement; -Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;)[Ldalvik/system/DexPathList$Element; -Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List; -Ldalvik/system/DexPathList;->nativeLibraryPathElements:[Ldalvik/system/DexPathList$NativeLibraryElement; -Ldalvik/system/DexPathList;->splitPaths(Ljava/lang/String;Z)Ljava/util/List; -Ldalvik/system/DexPathList;->systemNativeLibraryDirectories:Ljava/util/List; -Ldalvik/system/SocketTagger;->get()Ldalvik/system/SocketTagger; -Ldalvik/system/SocketTagger;->tag(Ljava/net/Socket;)V -Ldalvik/system/SocketTagger;->untag(Ljava/net/Socket;)V -Ldalvik/system/VMDebug;->allowHiddenApiReflectionFrom(Ljava/lang/Class;)V -Ldalvik/system/VMDebug;->dumpReferenceTables()V -Ldalvik/system/VMDebug;->isDebuggerConnected()Z -Ldalvik/system/VMRuntime;->addressOf(Ljava/lang/Object;)J -Ldalvik/system/VMRuntime;->clearGrowthLimit()V -Ldalvik/system/VMRuntime;->gcSoftReferences()V -Ldalvik/system/VMRuntime;->getCurrentInstructionSet()Ljava/lang/String; -Ldalvik/system/VMRuntime;->getExternalBytesAllocated()J -Ldalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String; -Ldalvik/system/VMRuntime;->getMinimumHeapSize()J -Ldalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime; -Ldalvik/system/VMRuntime;->is64Bit()Z -Ldalvik/system/VMRuntime;->is64BitAbi(Ljava/lang/String;)Z -Ldalvik/system/VMRuntime;->newNonMovableArray(Ljava/lang/Class;I)Ljava/lang/Object; -Ldalvik/system/VMRuntime;->registerNativeAllocation(I)V -Ldalvik/system/VMRuntime;->registerNativeFree(I)V -Ldalvik/system/VMRuntime;->runFinalization(J)V -Ldalvik/system/VMRuntime;->runFinalizationSync()V -Ldalvik/system/VMRuntime;->setMinimumHeapSize(J)J -Ldalvik/system/VMRuntime;->setTargetHeapUtilization(F)F -Ldalvik/system/VMRuntime;->setTargetSdkVersion(I)V -Ldalvik/system/VMRuntime;->trackExternalAllocation(J)Z -Ldalvik/system/VMRuntime;->trackExternalFree(J)V -Ldalvik/system/VMRuntime;->vmInstructionSet()Ljava/lang/String; -Ldalvik/system/VMRuntime;->vmLibrary()Ljava/lang/String; -Ldalvik/system/VMStack;->fillStackTraceElements(Ljava/lang/Thread;[Ljava/lang/StackTraceElement;)I -Ldalvik/system/VMStack;->getCallingClassLoader()Ljava/lang/ClassLoader; -Ldalvik/system/VMStack;->getStackClass2()Ljava/lang/Class; -Ldalvik/system/VMStack;->getThreadStackTrace(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement; -Ljava/io/Console;->encoding()Ljava/lang/String; -Ljava/io/File;->filePath:Ljava/nio/file/Path; -Ljava/io/File;->fs:Ljava/io/FileSystem; -Ljava/io/File;->path:Ljava/lang/String; -Ljava/io/File;->prefixLength:I -Ljava/io/File;->status:Ljava/io/File$PathStatus; -Ljava/io/FileDescriptor;->descriptor:I -Ljava/io/FileDescriptor;->getInt$()I -Ljava/io/FileDescriptor;->isSocket$()Z -Ljava/io/FileDescriptor;->setInt$(I)V -Ljava/io/FileInputStream;->fd:Ljava/io/FileDescriptor; -Ljava/io/FileOutputStream;->channel:Ljava/nio/channels/FileChannel; -Ljava/io/FileOutputStream;->fd:Ljava/io/FileDescriptor; -Ljava/io/FileSystem;->canonicalize(Ljava/lang/String;)Ljava/lang/String; -Ljava/io/FileSystem;->checkAccess(Ljava/io/File;I)Z -Ljava/io/FileSystem;->compare(Ljava/io/File;Ljava/io/File;)I -Ljava/io/FileSystem;->createDirectory(Ljava/io/File;)Z -Ljava/io/FileSystem;->createFileExclusively(Ljava/lang/String;)Z -Ljava/io/FileSystem;->delete(Ljava/io/File;)Z -Ljava/io/FileSystem;->fromURIPath(Ljava/lang/String;)Ljava/lang/String; -Ljava/io/FileSystem;->getBooleanAttributes(Ljava/io/File;)I -Ljava/io/FileSystem;->getDefaultParent()Ljava/lang/String; -Ljava/io/FileSystem;->getLastModifiedTime(Ljava/io/File;)J -Ljava/io/FileSystem;->getLength(Ljava/io/File;)J -Ljava/io/FileSystem;->getPathSeparator()C -Ljava/io/FileSystem;->getSeparator()C -Ljava/io/FileSystem;->getSpace(Ljava/io/File;I)J -Ljava/io/FileSystem;->hashCode(Ljava/io/File;)I -Ljava/io/FileSystem;->isAbsolute(Ljava/io/File;)Z -Ljava/io/FileSystem;->list(Ljava/io/File;)[Ljava/lang/String; -Ljava/io/FileSystem;->listRoots()[Ljava/io/File; -Ljava/io/FileSystem;->normalize(Ljava/lang/String;)Ljava/lang/String; -Ljava/io/FileSystem;->prefixLength(Ljava/lang/String;)I -Ljava/io/FileSystem;->rename(Ljava/io/File;Ljava/io/File;)Z -Ljava/io/FileSystem;->resolve(Ljava/io/File;)Ljava/lang/String; -Ljava/io/FileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -Ljava/io/FileSystem;->setLastModifiedTime(Ljava/io/File;J)Z -Ljava/io/FileSystem;->setPermission(Ljava/io/File;IZZ)Z -Ljava/io/FileSystem;->setReadOnly(Ljava/io/File;)Z -Ljava/io/ObjectInputStream;->bin:Ljava/io/ObjectInputStream$BlockDataInputStream; -Ljava/io/ObjectInputStream;->bytesToDoubles([BI[DII)V -Ljava/io/ObjectInputStream;->bytesToFloats([BI[FII)V -Ljava/io/ObjectOutputStream;->protocol:I -Ljava/io/ObjectStreamClass;->computeDefaultSUID(Ljava/lang/Class;)J -Ljava/io/ObjectStreamClass;->computeFieldOffsets()V -Ljava/io/ObjectStreamClass;->fields:[Ljava/io/ObjectStreamField; -Ljava/io/ObjectStreamClass;->getConstructorId(Ljava/lang/Class;)J -Ljava/io/ObjectStreamClass;->getLocalDesc()Ljava/io/ObjectStreamClass; -Ljava/io/ObjectStreamClass;->getNumObjFields()I -Ljava/io/ObjectStreamClass;->getPrimDataSize()I -Ljava/io/ObjectStreamClass;->hasReadObjectMethod()Z -Ljava/io/ObjectStreamClass;->hasReadObjectNoDataMethod()Z -Ljava/io/ObjectStreamClass;->hasWriteObjectData()Z -Ljava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object; -Ljava/io/ObjectStreamClass;->newInstance(Ljava/lang/Class;J)Ljava/lang/Object; -Ljava/io/ObjectStreamField;->getField()Ljava/lang/reflect/Field; -Ljava/io/RandomAccessFile;->fd:Ljava/io/FileDescriptor; -Ljava/lang/AbstractStringBuilder;->value:[C -Ljava/lang/Boolean;->value:Z -Ljava/lang/Byte;->toHexString(BZ)Ljava/lang/String; -Ljava/lang/Byte;->value:B -Ljava/lang/Character;->value:C -Ljava/lang/Class;->()V -Ljava/lang/Class;->accessFlags:I -Ljava/lang/Class;->classLoader:Ljava/lang/ClassLoader; -Ljava/lang/Class;->clinitThreadId:I -Ljava/lang/Class;->dexCache:Ljava/lang/Object; -Ljava/lang/Class;->dexClassDefIndex:I -Ljava/lang/Class;->getDeclaredMethodsUnchecked(Z)[Ljava/lang/reflect/Method; -Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method; -Ljava/lang/Class;->ifTable:[Ljava/lang/Object; -Ljava/lang/Class;->name:Ljava/lang/String; -Ljava/lang/Class;->objectSize:I -Ljava/lang/Class;->status:I -Ljava/lang/ClassLoader;->parent:Ljava/lang/ClassLoader; -Ljava/lang/Daemons$Daemon;->isRunning()Z -Ljava/lang/Daemons$Daemon;->start()V -Ljava/lang/Daemons$Daemon;->stop()V -Ljava/lang/Daemons$Daemon;->thread:Ljava/lang/Thread; -Ljava/lang/Daemons$FinalizerDaemon;->finalizingObject:Ljava/lang/Object; -Ljava/lang/Daemons$FinalizerDaemon;->INSTANCE:Ljava/lang/Daemons$FinalizerDaemon; -Ljava/lang/Daemons$FinalizerWatchdogDaemon;->INSTANCE:Ljava/lang/Daemons$FinalizerWatchdogDaemon; -Ljava/lang/Daemons$ReferenceQueueDaemon;->INSTANCE:Ljava/lang/Daemons$ReferenceQueueDaemon; -Ljava/lang/Daemons;->MAX_FINALIZE_NANOS:J -Ljava/lang/Daemons;->requestHeapTrim()V -Ljava/lang/Daemons;->start()V -Ljava/lang/Daemons;->stop()V -Ljava/lang/Double;->value:D -Ljava/lang/Enum;->getSharedConstants(Ljava/lang/Class;)[Ljava/lang/Enum; -Ljava/lang/Enum;->name:Ljava/lang/String; -Ljava/lang/Enum;->ordinal:I -Ljava/lang/Float;->value:F -Ljava/lang/Integer;->value:I -Ljava/lang/invoke/MethodHandles$Lookup;->(Ljava/lang/Class;I)V -Ljava/lang/Long;->value:J -Ljava/lang/Object;->identityHashCode(Ljava/lang/Object;)I -Ljava/lang/ref/FinalizerReference;->add(Ljava/lang/Object;)V -Ljava/lang/ref/FinalizerReference;->head:Ljava/lang/ref/FinalizerReference; -Ljava/lang/ref/FinalizerReference;->next:Ljava/lang/ref/FinalizerReference; -Ljava/lang/ref/FinalizerReference;->queue:Ljava/lang/ref/ReferenceQueue; -Ljava/lang/ref/FinalizerReference;->remove(Ljava/lang/ref/FinalizerReference;)V -Ljava/lang/ref/Reference;->getReferent()Ljava/lang/Object; -Ljava/lang/ref/Reference;->referent:Ljava/lang/Object; -Ljava/lang/ref/ReferenceQueue;->add(Ljava/lang/ref/Reference;)V -Ljava/lang/reflect/AccessibleObject;->override:Z -Ljava/lang/reflect/Constructor;->serializationCopy(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Constructor; -Ljava/lang/reflect/Executable;->artMethod:J -Ljava/lang/reflect/Field;->accessFlags:I -Ljava/lang/reflect/Field;->getOffset()I -Ljava/lang/reflect/Parameter;->(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V -Ljava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; -Ljava/lang/Runtime;->()V -Ljava/lang/Runtime;->load(Ljava/lang/String;Ljava/lang/ClassLoader;)V -Ljava/lang/Runtime;->loadLibrary(Ljava/lang/String;Ljava/lang/ClassLoader;)V -Ljava/lang/Runtime;->loadLibrary0(Ljava/lang/ClassLoader;Ljava/lang/String;)V -Ljava/lang/Runtime;->mLibPaths:[Ljava/lang/String; -Ljava/lang/Runtime;->nativeLoad(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String; -Ljava/lang/Short;->value:S -Ljava/lang/StackTraceElement;->declaringClass:Ljava/lang/String; -Ljava/lang/StackTraceElement;->fileName:Ljava/lang/String; -Ljava/lang/StackTraceElement;->lineNumber:I -Ljava/lang/StackTraceElement;->methodName:Ljava/lang/String; -Ljava/lang/String;->(II[C)V -Ljava/lang/String;->count:I -Ljava/lang/String;->getCharsNoCheck(II[CI)V -Ljava/lang/String;->hash:I -Ljava/lang/String;->indexOf([CII[CIII)I -Ljava/lang/String;->lastIndexOf([CII[CIII)I -Ljava/lang/System;->()V -Ljava/lang/System;->arraycopy([CI[CII)V -Ljava/lang/System;->arraycopy([FI[FII)V -Ljava/lang/System;->arraycopy([II[III)V -Ljava/lang/System;->arraycopy([JI[JII)V -Ljava/lang/System;->arraycopy([SI[SII)V -Ljava/lang/System;->arraycopy([ZI[ZII)V -Ljava/lang/System;->log(CLjava/lang/String;Ljava/lang/Throwable;)V -Ljava/lang/System;->logE(Ljava/lang/String;)V -Ljava/lang/System;->logE(Ljava/lang/String;Ljava/lang/Throwable;)V -Ljava/lang/System;->logW(Ljava/lang/String;Ljava/lang/Throwable;)V -Ljava/lang/Thread;->(Ljava/lang/ThreadGroup;Ljava/lang/String;IZ)V -Ljava/lang/Thread;->contextClassLoader:Ljava/lang/ClassLoader; -Ljava/lang/Thread;->daemon:Z -Ljava/lang/Thread;->dispatchUncaughtException(Ljava/lang/Throwable;)V -Ljava/lang/Thread;->getUncaughtExceptionPreHandler()Ljava/lang/Thread$UncaughtExceptionHandler; -Ljava/lang/Thread;->group:Ljava/lang/ThreadGroup; -Ljava/lang/Thread;->inheritableThreadLocals:Ljava/lang/ThreadLocal$ThreadLocalMap; -Ljava/lang/Thread;->inheritedAccessControlContext:Ljava/security/AccessControlContext; -Ljava/lang/Thread;->lock:Ljava/lang/Object; -Ljava/lang/Thread;->name:Ljava/lang/String; -Ljava/lang/Thread;->nativePeer:J -Ljava/lang/Thread;->parkBlocker:Ljava/lang/Object; -Ljava/lang/Thread;->priority:I -Ljava/lang/Thread;->target:Ljava/lang/Runnable; -Ljava/lang/Thread;->threadLocals:Ljava/lang/ThreadLocal$ThreadLocalMap; -Ljava/lang/Thread;->threadSeqNumber:J -Ljava/lang/ThreadGroup;->add(Ljava/lang/Thread;)V -Ljava/lang/ThreadGroup;->groups:[Ljava/lang/ThreadGroup; -Ljava/lang/ThreadGroup;->mainThreadGroup:Ljava/lang/ThreadGroup; -Ljava/lang/ThreadGroup;->name:Ljava/lang/String; -Ljava/lang/ThreadGroup;->ngroups:I -Ljava/lang/ThreadGroup;->parent:Ljava/lang/ThreadGroup; -Ljava/lang/ThreadGroup;->systemThreadGroup:Ljava/lang/ThreadGroup; -Ljava/lang/ThreadGroup;->threadTerminated(Ljava/lang/Thread;)V -Ljava/lang/ThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap; -Ljava/lang/Throwable;->backtrace:Ljava/lang/Object; -Ljava/lang/Throwable;->cause:Ljava/lang/Throwable; -Ljava/lang/Throwable;->detailMessage:Ljava/lang/String; -Ljava/lang/Throwable;->getOurStackTrace()[Ljava/lang/StackTraceElement; -Ljava/lang/Throwable;->nativeFillInStackTrace()Ljava/lang/Object; -Ljava/lang/Throwable;->printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V -Ljava/lang/Throwable;->stackTrace:[Ljava/lang/StackTraceElement; -Ljava/lang/Throwable;->suppressedExceptions:Ljava/util/List; -Ljava/lang/Void;->()V -Ljava/net/Authenticator;->theAuthenticator:Ljava/net/Authenticator; -Ljava/net/DatagramSocket;->getFileDescriptor$()Ljava/io/FileDescriptor; -Ljava/net/DatagramSocket;->impl:Ljava/net/DatagramSocketImpl; -Ljava/net/HttpCookie;->assignors:Ljava/util/Map; -Ljava/net/HttpCookie;->comment:Ljava/lang/String; -Ljava/net/HttpCookie;->commentURL:Ljava/lang/String; -Ljava/net/HttpCookie;->domain:Ljava/lang/String; -Ljava/net/HttpCookie;->header:Ljava/lang/String; -Ljava/net/HttpCookie;->httpOnly:Z -Ljava/net/HttpCookie;->maxAge:J -Ljava/net/HttpCookie;->name:Ljava/lang/String; -Ljava/net/HttpCookie;->path:Ljava/lang/String; -Ljava/net/HttpCookie;->portlist:Ljava/lang/String; -Ljava/net/HttpCookie;->secure:Z -Ljava/net/HttpCookie;->toDiscard:Z -Ljava/net/HttpCookie;->tspecials:Ljava/lang/String; -Ljava/net/HttpCookie;->value:Ljava/lang/String; -Ljava/net/HttpCookie;->version:I -Ljava/net/HttpCookie;->whenCreated:J -Ljava/net/Inet4Address;->()V -Ljava/net/Inet6Address$Inet6AddressHolder;->ipaddress:[B -Ljava/net/Inet6Address$Inet6AddressHolder;->scope_id:I -Ljava/net/Inet6Address$Inet6AddressHolder;->scope_id_set:Z -Ljava/net/Inet6Address$Inet6AddressHolder;->scope_ifname:Ljava/net/NetworkInterface; -Ljava/net/Inet6Address;->()V -Ljava/net/Inet6Address;->holder6:Ljava/net/Inet6Address$Inet6AddressHolder; -Ljava/net/InetAddress$InetAddressHolder;->address:I -Ljava/net/InetAddress$InetAddressHolder;->family:I -Ljava/net/InetAddress$InetAddressHolder;->hostName:Ljava/lang/String; -Ljava/net/InetAddress$InetAddressHolder;->originalHostName:Ljava/lang/String; -Ljava/net/InetAddress;->clearDnsCache()V -Ljava/net/InetAddress;->getAllByNameOnNet(Ljava/lang/String;I)[Ljava/net/InetAddress; -Ljava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder; -Ljava/net/InetAddress;->holder:Ljava/net/InetAddress$InetAddressHolder; -Ljava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z -Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress; -Ljava/net/InetSocketAddress;->holder:Ljava/net/InetSocketAddress$InetSocketAddressHolder; -Ljava/net/InterfaceAddress;->()V -Ljava/net/Proxy;->()V -Ljava/net/ServerSocket;->factory:Ljava/net/SocketImplFactory; -Ljava/net/Socket;->factory:Ljava/net/SocketImplFactory; -Ljava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor; -Ljava/net/Socket;->impl:Ljava/net/SocketImpl; -Ljava/net/SocketException;->(Ljava/lang/String;Ljava/lang/Throwable;)V -Ljava/net/SocketImpl;->serverSocket:Ljava/net/ServerSocket; -Ljava/net/SocketImpl;->socket:Ljava/net/Socket; -Ljava/net/SocksSocketImpl;->()V -Ljava/net/URI;->fragment:Ljava/lang/String; -Ljava/net/URI;->host:Ljava/lang/String; -Ljava/net/URI;->port:I -Ljava/net/URI;->query:Ljava/lang/String; -Ljava/net/URI;->string:Ljava/lang/String; -Ljava/net/URL;->factory:Ljava/net/URLStreamHandlerFactory; -Ljava/net/URL;->handler:Ljava/net/URLStreamHandler; -Ljava/net/URL;->handlers:Ljava/util/Hashtable; -Ljava/net/URL;->protocol:Ljava/lang/String; -Ljava/net/URLClassLoader;->acc:Ljava/security/AccessControlContext; -Ljava/net/URLClassLoader;->ucp:Lsun/misc/URLClassPath; -Ljava/nio/Buffer;->address:J -Ljava/nio/Buffer;->capacity:I -Ljava/nio/Buffer;->limit:I -Ljava/nio/Buffer;->position:I -Ljava/nio/Buffer;->_elementSizeShift:I -Ljava/nio/ByteBuffer;->hb:[B -Ljava/nio/ByteBuffer;->isReadOnly:Z -Ljava/nio/ByteBuffer;->offset:I -Ljava/nio/CharBuffer;->toString(II)Ljava/lang/String; -Ljava/nio/charset/Charset;->defaultCharset:Ljava/nio/charset/Charset; -Ljava/nio/charset/CharsetEncoder;->canEncode(Ljava/nio/CharBuffer;)Z -Ljava/nio/DirectByteBuffer;->(JI)V -Ljava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object; -Ljava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I -Ljava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J -Ljava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V -Ljava/nio/NioUtils;->unsafeArray(Ljava/nio/ByteBuffer;)[B -Ljava/nio/NioUtils;->unsafeArrayOffset(Ljava/nio/ByteBuffer;)I -Ljava/security/KeyPairGenerator;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/KeyPairGenerator; -Ljava/security/KeyStore;->keyStoreSpi:Ljava/security/KeyStoreSpi; -Ljava/security/Signature;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/Signature; -Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; -Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V -Ljava/text/Collator;->icuColl:Landroid/icu/text/Collator; -Ljava/text/DateFormat;->is24Hour:Ljava/lang/Boolean; -Ljava/text/DecimalFormatSymbols;->getPercentString()Ljava/lang/String; -Ljava/text/NumberFormat;->getInstance(Ljava/util/Locale;I)Ljava/text/NumberFormat; -Ljava/time/Duration;->toSeconds()Ljava/math/BigDecimal; -Ljava/time/OffsetDateTime;->(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)V -Ljava/time/ZoneId;->of(Ljava/lang/String;Z)Ljava/time/ZoneId; -Ljava/util/ArrayDeque;->elements:[Ljava/lang/Object; -Ljava/util/ArrayDeque;->head:I -Ljava/util/ArrayDeque;->tail:I -Ljava/util/ArrayList$SubList;->offset:I -Ljava/util/ArrayList$SubList;->parent:Ljava/util/AbstractList; -Ljava/util/ArrayList$SubList;->parentOffset:I -Ljava/util/ArrayList$SubList;->size:I -Ljava/util/ArrayList;->elementData:[Ljava/lang/Object; -Ljava/util/ArrayList;->size:I -Ljava/util/Arrays$ArrayList;->a:[Ljava/lang/Object; -Ljava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V -Ljava/util/Calendar;->zone:Ljava/util/TimeZone; -Ljava/util/Collections$EmptyList;->()V -Ljava/util/Collections$EmptyMap;->()V -Ljava/util/Collections$SynchronizedCollection;->c:Ljava/util/Collection; -Ljava/util/Collections$SynchronizedList;->list:Ljava/util/List; -Ljava/util/Collections$SynchronizedMap;->m:Ljava/util/Map; -Ljava/util/Collections$UnmodifiableCollection;->c:Ljava/util/Collection; -Ljava/util/Collections$UnmodifiableMap;->m:Ljava/util/Map; -Ljava/util/concurrent/atomic/AtomicInteger;->value:I -Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasMoreElements()Z -Ljava/util/concurrent/CopyOnWriteArrayList;->elements:[Ljava/lang/Object; -Ljava/util/concurrent/CopyOnWriteArraySet;->al:Ljava/util/concurrent/CopyOnWriteArrayList; -Ljava/util/concurrent/Executors$RunnableAdapter;->task:Ljava/lang/Runnable; -Ljava/util/concurrent/FutureTask;->callable:Ljava/util/concurrent/Callable; -Ljava/util/concurrent/FutureTask;->EXCEPTIONAL:I -Ljava/util/concurrent/FutureTask;->outcome:Ljava/lang/Object; -Ljava/util/concurrent/FutureTask;->state:I -Ljava/util/concurrent/LinkedBlockingDeque;->first:Ljava/util/concurrent/LinkedBlockingDeque$Node; -Ljava/util/concurrent/LinkedBlockingDeque;->lock:Ljava/util/concurrent/locks/ReentrantLock; -Ljava/util/concurrent/LinkedBlockingQueue;->capacity:I -Ljava/util/concurrent/LinkedBlockingQueue;->head:Ljava/util/concurrent/LinkedBlockingQueue$Node; -Ljava/util/concurrent/LinkedBlockingQueue;->putLock:Ljava/util/concurrent/locks/ReentrantLock; -Ljava/util/concurrent/LinkedBlockingQueue;->takeLock:Ljava/util/concurrent/locks/ReentrantLock; -Ljava/util/concurrent/locks/ReentrantLock;->sync:Ljava/util/concurrent/locks/ReentrantLock$Sync; -Ljava/util/concurrent/PriorityBlockingQueue;->dequeue()Ljava/lang/Object; -Ljava/util/concurrent/PriorityBlockingQueue;->lock:Ljava/util/concurrent/locks/ReentrantLock; -Ljava/util/concurrent/PriorityBlockingQueue;->notEmpty:Ljava/util/concurrent/locks/Condition; -Ljava/util/concurrent/ThreadPoolExecutor;->allowCoreThreadTimeOut:Z -Ljava/util/concurrent/ThreadPoolExecutor;->ctl:Ljava/util/concurrent/atomic/AtomicInteger; -Ljava/util/concurrent/ThreadPoolExecutor;->defaultHandler:Ljava/util/concurrent/RejectedExecutionHandler; -Ljava/util/concurrent/ThreadPoolExecutor;->mainLock:Ljava/util/concurrent/locks/ReentrantLock; -Ljava/util/EnumMap;->keyType:Ljava/lang/Class; -Ljava/util/EnumSet;->elementType:Ljava/lang/Class; -Ljava/util/HashMap$HashIterator;->hasNext()Z -Ljava/util/HashMap$HashIterator;->remove()V -Ljava/util/HashMap$Node;->key:Ljava/lang/Object; -Ljava/util/HashMap$Node;->next:Ljava/util/HashMap$Node; -Ljava/util/HashMap$Node;->value:Ljava/lang/Object; -Ljava/util/HashMap;->modCount:I -Ljava/util/HashMap;->table:[Ljava/util/HashMap$Node; -Ljava/util/HashSet;->map:Ljava/util/HashMap; -Ljava/util/jar/JarFile;->manifest:Ljava/util/jar/Manifest; -Ljava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z -Ljava/util/LinkedHashMap;->accessOrder:Z -Ljava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry; -Ljava/util/LinkedList$Node;->item:Ljava/lang/Object; -Ljava/util/LinkedList$Node;->next:Ljava/util/LinkedList$Node; -Ljava/util/LinkedList;->first:Ljava/util/LinkedList$Node; -Ljava/util/LinkedList;->size:I -Ljava/util/Locale;->createConstant(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; -Ljava/util/Locale;->getInstance(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; -Ljava/util/logging/Handler;->sealed:Z -Ljava/util/logging/Logger;->treeLock:Ljava/lang/Object; -Ljava/util/logging/LogManager;->getFormatterProperty(Ljava/lang/String;Ljava/util/logging/Formatter;)Ljava/util/logging/Formatter; -Ljava/util/PriorityQueue;->modCount:I -Ljava/util/PriorityQueue;->queue:[Ljava/lang/Object; -Ljava/util/PriorityQueue;->size:I -Ljava/util/Properties;->saveConvert(Ljava/lang/String;ZZ)Ljava/lang/String; -Ljava/util/Random;->seedUniquifier()J -Ljava/util/regex/Matcher;->appendPos:I -Ljava/util/TimerTask;->period:J -Ljava/util/UUID;->leastSigBits:J -Ljava/util/UUID;->mostSigBits:J -Ljava/util/Vector;->elementData(I)Ljava/lang/Object; -Ljava/util/zip/Adler32;->update(II)I -Ljava/util/zip/CRC32;->update(II)I -Ljava/util/zip/Deflater;->buf:[B -Ljava/util/zip/Deflater;->finish:Z -Ljava/util/zip/Deflater;->finished:Z -Ljava/util/zip/Deflater;->len:I -Ljava/util/zip/Deflater;->level:I -Ljava/util/zip/Deflater;->off:I -Ljava/util/zip/Deflater;->setParams:Z -Ljava/util/zip/Deflater;->strategy:I -Ljava/util/zip/Inflater;->buf:[B -Ljava/util/zip/Inflater;->finished:Z -Ljava/util/zip/Inflater;->len:I -Ljava/util/zip/Inflater;->needDict:Z -Ljava/util/zip/Inflater;->off:I -Ljava/util/zip/ZipEntry;->(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V -Ljava/util/zip/ZipEntry;->method:I -Ljava/util/zip/ZipFile;->close(J)V -Ljava/util/zip/ZipFile;->getEntry(J[BZ)J -Ljava/util/zip/ZipFile;->jzfile:J -Ljava/util/zip/ZipInputStream;->flag:I -Ljava/util/zip/ZipInputStream;->tmpbuf:[B -Ljava/util/zip/ZipOutputStream;->method:I -Ljava/util/zip/ZipOutputStream;->names:Ljava/util/HashSet; -Ljava/util/zip/ZipOutputStream;->written:J -Ljavax/net/ssl/SSLServerSocketFactory;->defaultServerSocketFactory:Ljavax/net/ssl/SSLServerSocketFactory; -Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/io/InputStream;Z)Ljava/net/Socket; -Ljavax/net/ssl/SSLSocketFactory;->defaultSocketFactory:Ljavax/net/ssl/SSLSocketFactory; -Llibcore/icu/ICU;->addLikelySubtags(Ljava/util/Locale;)Ljava/util/Locale; -Llibcore/util/BasicLruCache;->map:Ljava/util/LinkedHashMap; -Llibcore/util/ZoneInfo;->mTransitions:[J +Lcom/google/android/mms/util/SqliteWrapper;->query(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +Lcom/google/android/mms/util/SqliteWrapper;->requery(Landroid/content/Context;Landroid/database/Cursor;)Z +Lcom/google/android/mms/util/SqliteWrapper;->update(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I +Lcom/google/android/util/AbstractMessageParser$Token$Type;->ACRONYM:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->FLICKR:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->FORMAT:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->GOOGLE_VIDEO:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->HTML:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->LINK:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->MUSIC:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->PHOTO:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->SMILEY:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->values()[Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/google/android/util/AbstractMessageParser$Token$Type;->YOUTUBE_VIDEO:Lcom/google/android/util/AbstractMessageParser$Token$Type; +Lcom/sun/nio/file/ExtendedWatchEventModifier;->FILE_TREE:Lcom/sun/nio/file/ExtendedWatchEventModifier; +Lgov/nist/core/Debug;->printStackTrace(Ljava/lang/Exception;)V +Lgov/nist/core/GenericObject;->()V +Lgov/nist/core/GenericObject;->dbgPrint()V +Lgov/nist/core/GenericObject;->debugDump(I)Ljava/lang/String; +Lgov/nist/core/GenericObject;->encode()Ljava/lang/String; +Lgov/nist/core/GenericObject;->getMatcher()Lgov/nist/core/Match; +Lgov/nist/core/GenericObject;->indentation:I +Lgov/nist/core/GenericObject;->isMySubclass(Ljava/lang/Class;)Z +Lgov/nist/core/GenericObject;->match(Ljava/lang/Object;)Z +Lgov/nist/core/GenericObject;->matchExpression:Lgov/nist/core/Match; +Lgov/nist/core/GenericObject;->merge(Ljava/lang/Object;)V +Lgov/nist/core/GenericObject;->sprint(Ljava/lang/String;)V +Lgov/nist/core/GenericObject;->stringRepresentation:Ljava/lang/String; +Lgov/nist/core/GenericObjectList;->()V +Lgov/nist/core/GenericObjectList;->(Ljava/lang/String;)V +Lgov/nist/core/GenericObjectList;->(Ljava/lang/String;Ljava/lang/Class;)V +Lgov/nist/core/GenericObjectList;->(Ljava/lang/String;Ljava/lang/String;)V +Lgov/nist/core/GenericObjectList;->concatenate(Lgov/nist/core/GenericObjectList;)V +Lgov/nist/core/GenericObjectList;->concatenate(Lgov/nist/core/GenericObjectList;Z)V +Lgov/nist/core/GenericObjectList;->debugDump(I)Ljava/lang/String; +Lgov/nist/core/GenericObjectList;->first()Lgov/nist/core/GenericObject; +Lgov/nist/core/GenericObjectList;->getIndentation()Ljava/lang/String; +Lgov/nist/core/GenericObjectList;->indentation:I +Lgov/nist/core/GenericObjectList;->isMySubclass(Ljava/lang/Class;)Z +Lgov/nist/core/GenericObjectList;->match(Ljava/lang/Object;)Z +Lgov/nist/core/GenericObjectList;->myClass:Ljava/lang/Class; +Lgov/nist/core/GenericObjectList;->next()Lgov/nist/core/GenericObject; +Lgov/nist/core/GenericObjectList;->next(Ljava/util/ListIterator;)Lgov/nist/core/GenericObject; +Lgov/nist/core/GenericObjectList;->setMyClass(Ljava/lang/Class;)V +Lgov/nist/core/GenericObjectList;->stringRep:Ljava/lang/String; +Lgov/nist/core/Host;->()V +Lgov/nist/core/Host;->(Ljava/lang/String;)V +Lgov/nist/core/Host;->encode()Ljava/lang/String; +Lgov/nist/core/Host;->getAddress()Ljava/lang/String; +Lgov/nist/core/Host;->getHostname()Ljava/lang/String; +Lgov/nist/core/Host;->isIPv6Reference(Ljava/lang/String;)Z +Lgov/nist/core/Host;->setAddress(Ljava/lang/String;)V +Lgov/nist/core/Host;->setHostname(Ljava/lang/String;)V +Lgov/nist/core/HostNameParser;->(Lgov/nist/core/LexerCore;)V +Lgov/nist/core/HostNameParser;->(Ljava/lang/String;)V +Lgov/nist/core/HostNameParser;->host()Lgov/nist/core/Host; +Lgov/nist/core/HostNameParser;->hostPort(Z)Lgov/nist/core/HostPort; +Lgov/nist/core/HostPort;->()V +Lgov/nist/core/HostPort;->encode()Ljava/lang/String; +Lgov/nist/core/HostPort;->encode(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer; +Lgov/nist/core/HostPort;->getHost()Lgov/nist/core/Host; +Lgov/nist/core/HostPort;->getInetAddress()Ljava/net/InetAddress; +Lgov/nist/core/HostPort;->getPort()I +Lgov/nist/core/HostPort;->hasPort()Z +Lgov/nist/core/HostPort;->removePort()V +Lgov/nist/core/HostPort;->setHost(Lgov/nist/core/Host;)V +Lgov/nist/core/HostPort;->setPort(I)V +Lgov/nist/core/InternalErrorHandler;->handleException(Ljava/lang/Exception;)V +Lgov/nist/core/InternalErrorHandler;->handleException(Ljava/lang/String;)V +Lgov/nist/core/LexerCore;->(Ljava/lang/String;Ljava/lang/String;)V +Lgov/nist/core/LexerCore;->byteStringNoSemicolon()Ljava/lang/String; +Lgov/nist/core/LexerCore;->byteStringNoSlash()Ljava/lang/String; +Lgov/nist/core/LexerCore;->charAsString(I)Ljava/lang/String; +Lgov/nist/core/LexerCore;->comment()Ljava/lang/String; +Lgov/nist/core/LexerCore;->createParseException()Ljava/text/ParseException; +Lgov/nist/core/LexerCore;->currentLexer:Ljava/util/Hashtable; +Lgov/nist/core/LexerCore;->getBuffer()Ljava/lang/String; +Lgov/nist/core/LexerCore;->getNextId()Ljava/lang/String; +Lgov/nist/core/LexerCore;->getNextToken()Lgov/nist/core/Token; +Lgov/nist/core/LexerCore;->getPtr()I +Lgov/nist/core/LexerCore;->getRest()Ljava/lang/String; +Lgov/nist/core/LexerCore;->getString(C)Ljava/lang/String; +Lgov/nist/core/LexerCore;->isTokenChar(C)Z +Lgov/nist/core/LexerCore;->lexerTables:Ljava/util/Hashtable; +Lgov/nist/core/LexerCore;->markInputPosition()I +Lgov/nist/core/LexerCore;->match(I)Lgov/nist/core/Token; +Lgov/nist/core/LexerCore;->number()Ljava/lang/String; +Lgov/nist/core/LexerCore;->peekNextToken()Lgov/nist/core/Token; +Lgov/nist/core/LexerCore;->peekNextToken(I)[Lgov/nist/core/Token; +Lgov/nist/core/LexerCore;->quotedString()Ljava/lang/String; +Lgov/nist/core/LexerCore;->rewindInputPosition(I)V +Lgov/nist/core/LexerCore;->selectLexer(Ljava/lang/String;)V +Lgov/nist/core/LexerCore;->SPorHT()V +Lgov/nist/core/LexerCore;->startsId()Z +Lgov/nist/core/LexerCore;->ttoken()Ljava/lang/String; +Lgov/nist/core/LexerCore;->ttokenSafe()Ljava/lang/String; +Lgov/nist/core/Match;->match(Ljava/lang/String;)Z +Lgov/nist/core/NameValue;->()V +Lgov/nist/core/NameValue;->(Ljava/lang/String;Ljava/lang/Object;)V +Lgov/nist/core/NameValue;->(Ljava/lang/String;Ljava/lang/Object;Z)V +Lgov/nist/core/NameValue;->encode()Ljava/lang/String; +Lgov/nist/core/NameValue;->encode(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer; +Lgov/nist/core/NameValue;->getName()Ljava/lang/String; +Lgov/nist/core/NameValue;->getValueAsObject()Ljava/lang/Object; +Lgov/nist/core/NameValue;->setName(Ljava/lang/String;)V +Lgov/nist/core/NameValue;->setQuotedValue()V +Lgov/nist/core/NameValue;->setSeparator(Ljava/lang/String;)V +Lgov/nist/core/NameValue;->setValueAsObject(Ljava/lang/Object;)V +Lgov/nist/core/NameValueList;->()V +Lgov/nist/core/NameValueList;->(Z)V +Lgov/nist/core/NameValueList;->delete(Ljava/lang/String;)Z +Lgov/nist/core/NameValueList;->encode()Ljava/lang/String; +Lgov/nist/core/NameValueList;->encode(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer; +Lgov/nist/core/NameValueList;->getNames()Ljava/util/Iterator; +Lgov/nist/core/NameValueList;->getNameValue(Ljava/lang/String;)Lgov/nist/core/NameValue; +Lgov/nist/core/NameValueList;->getParameter(Ljava/lang/String;)Ljava/lang/String; +Lgov/nist/core/NameValueList;->getValue(Ljava/lang/String;)Ljava/lang/Object; +Lgov/nist/core/NameValueList;->hasNameValue(Ljava/lang/String;)Z +Lgov/nist/core/NameValueList;->iterator()Ljava/util/Iterator; +Lgov/nist/core/NameValueList;->set(Lgov/nist/core/NameValue;)V +Lgov/nist/core/NameValueList;->set(Ljava/lang/String;Ljava/lang/Object;)V +Lgov/nist/core/NameValueList;->setSeparator(Ljava/lang/String;)V +Lgov/nist/core/net/DefaultNetworkLayer;->SINGLETON:Lgov/nist/core/net/DefaultNetworkLayer; +Lgov/nist/core/net/NetworkLayer;->createDatagramSocket()Ljava/net/DatagramSocket; +Lgov/nist/core/net/NetworkLayer;->createDatagramSocket(ILjava/net/InetAddress;)Ljava/net/DatagramSocket; +Lgov/nist/core/net/NetworkLayer;->createServerSocket(IILjava/net/InetAddress;)Ljava/net/ServerSocket; +Lgov/nist/core/net/NetworkLayer;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket; +Lgov/nist/core/net/NetworkLayer;->createSSLServerSocket(IILjava/net/InetAddress;)Ljavax/net/ssl/SSLServerSocket; +Lgov/nist/core/net/NetworkLayer;->createSSLSocket(Ljava/net/InetAddress;I)Ljavax/net/ssl/SSLSocket; +Lgov/nist/core/ParserCore;->()V +Lgov/nist/core/ParserCore;->lexer:Lgov/nist/core/LexerCore; +Lgov/nist/core/StringTokenizer;->ptr:I +Lgov/nist/core/ThreadAuditor$ThreadHandle;->getPingIntervalInMillisecs()J +Lgov/nist/core/ThreadAuditor$ThreadHandle;->ping()V +Lgov/nist/core/ThreadAuditor;->()V +Lgov/nist/core/ThreadAuditor;->addCurrentThread()Lgov/nist/core/ThreadAuditor$ThreadHandle; +Lgov/nist/core/ThreadAuditor;->getPingIntervalInMillisecs()J +Lgov/nist/core/ThreadAuditor;->isEnabled()Z +Lgov/nist/core/ThreadAuditor;->setPingIntervalInMillisecs(J)V +Lgov/nist/core/Token;->()V +Lgov/nist/core/Token;->getTokenType()I +Lgov/nist/core/Token;->getTokenValue()Ljava/lang/String; +Lgov/nist/javax/sip/address/GenericURI;->()V +Lgov/nist/javax/sip/address/GenericURI;->encode()Ljava/lang/String; +Lgov/nist/javax/sip/address/GenericURI;->getScheme()Ljava/lang/String; +Lgov/nist/javax/sip/address/SipUri;->getHost()Ljava/lang/String; +Lgov/nist/javax/sip/address/SipUri;->getParameter(Ljava/lang/String;)Ljava/lang/String; +Lgov/nist/javax/sip/address/SipUri;->getPort()I +Lgov/nist/javax/sip/address/SipUri;->getUser()Ljava/lang/String; +Lgov/nist/javax/sip/address/SipUri;->removeParameter(Ljava/lang/String;)V +Lgov/nist/javax/sip/address/SipUri;->setParameter(Ljava/lang/String;Ljava/lang/String;)V +Lgov/nist/javax/sip/address/SipUri;->setUserParam(Ljava/lang/String;)V +Lgov/nist/javax/sip/parser/URLParser;->(Ljava/lang/String;)V +Lgov/nist/javax/sip/parser/URLParser;->sipURL(Z)Lgov/nist/javax/sip/address/SipUri; +Ljava/lang/DexCache;->dexFile:J +Ljava/lang/invoke/SerializedLambda;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V +Ljava/lang/invoke/SerializedLambda;->getCapturedArg(I)Ljava/lang/Object; +Ljava/lang/invoke/SerializedLambda;->getCapturedArgCount()I +Ljava/lang/invoke/SerializedLambda;->getCapturingClass()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getFunctionalInterfaceClass()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getFunctionalInterfaceMethodName()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getFunctionalInterfaceMethodSignature()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getImplClass()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getImplMethodKind()I +Ljava/lang/invoke/SerializedLambda;->getImplMethodName()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getImplMethodSignature()Ljava/lang/String; +Ljava/lang/invoke/SerializedLambda;->getInstantiatedMethodType()Ljava/lang/String; +Ljava/lang/UNIXProcess;->pid:I +Ljava/net/AddressCache$AddressCacheEntry;->(Ljava/lang/Object;)V +Ljava/net/AddressCache$AddressCacheEntry;->expiryNanos:J +Ljava/net/AddressCache$AddressCacheEntry;->value:Ljava/lang/Object; +Ljava/net/AddressCache$AddressCacheKey;->mHostname:Ljava/lang/String; +Ljava/net/AddressCache;->cache:Llibcore/util/BasicLruCache; +Ljava/net/Inet6AddressImpl;->addressCache:Ljava/net/AddressCache; +Ljava/net/PlainSocketImpl;->()V +Ljava/nio/DirectByteBuffer;->cleaner()Lsun/misc/Cleaner; +Ljava/nio/file/FileTreeWalker;->followLinks:Z +Ljava/nio/file/FileTreeWalker;->linkOptions:[Ljava/nio/file/LinkOption; +Ljava/nio/file/FileTreeWalker;->maxDepth:I +Ljava/util/zip/ZipFile$ZipEntryIterator;->nextElement()Ljava/util/zip/ZipEntry; +Ljunit/framework/TestCase;->fName:Ljava/lang/String; +Ljunit/framework/TestSuite;->isPublicTestMethod(Ljava/lang/reflect/Method;)Z +Ljunit/framework/TestSuite;->isTestMethod(Ljava/lang/reflect/Method;)Z +Llibcore/icu/DateIntervalFormat;->formatDateRange(JJILjava/lang/String;)Ljava/lang/String; +Llibcore/icu/ICU;->CACHED_PATTERNS:Llibcore/util/BasicLruCache; +Llibcore/icu/ICU;->getBestDateTimePattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String; +Llibcore/icu/ICU;->getBestDateTimePatternNative(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Llibcore/icu/ICU;->getDateFormatOrder(Ljava/lang/String;)[C +Llibcore/icu/LocaleData;->firstDayOfWeek:Ljava/lang/Integer; +Llibcore/icu/LocaleData;->get(Ljava/util/Locale;)Llibcore/icu/LocaleData; +Llibcore/icu/LocaleData;->longStandAloneWeekdayNames:[Ljava/lang/String; +Llibcore/icu/LocaleData;->mapInvalidAndNullLocales(Ljava/util/Locale;)Ljava/util/Locale; +Llibcore/icu/LocaleData;->minimalDaysInFirstWeek:Ljava/lang/Integer; +Llibcore/icu/LocaleData;->shortMonthNames:[Ljava/lang/String; +Llibcore/icu/LocaleData;->shortStandAloneMonthNames:[Ljava/lang/String; +Llibcore/icu/LocaleData;->shortStandAloneWeekdayNames:[Ljava/lang/String; +Llibcore/icu/LocaleData;->timeFormat_Hm:Ljava/lang/String; +Llibcore/icu/LocaleData;->timeFormat_hm:Ljava/lang/String; +Llibcore/icu/LocaleData;->today:Ljava/lang/String; +Llibcore/icu/LocaleData;->tomorrow:Ljava/lang/String; +Llibcore/icu/LocaleData;->zeroDigit:C +Llibcore/icu/TimeZoneNames;->forLocale(Ljava/util/Locale;)[Ljava/lang/String; +Llibcore/io/AsynchronousCloseMonitor;->signalBlockedThreads(Ljava/io/FileDescriptor;)V +Llibcore/io/BlockGuardOs;->(Llibcore/io/Os;)V +Llibcore/io/BlockGuardOs;->chmod(Ljava/lang/String;I)V +Llibcore/io/BlockGuardOs;->chown(Ljava/lang/String;II)V +Llibcore/io/BlockGuardOs;->close(Ljava/io/FileDescriptor;)V +Llibcore/io/BlockGuardOs;->fchmod(Ljava/io/FileDescriptor;I)V +Llibcore/io/BlockGuardOs;->fchown(Ljava/io/FileDescriptor;II)V +Llibcore/io/BlockGuardOs;->fdatasync(Ljava/io/FileDescriptor;)V +Llibcore/io/BlockGuardOs;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat; +Llibcore/io/BlockGuardOs;->fstatvfs(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs; +Llibcore/io/BlockGuardOs;->lchown(Ljava/lang/String;II)V +Llibcore/io/BlockGuardOs;->link(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/BlockGuardOs;->lseek(Ljava/io/FileDescriptor;JI)J +Llibcore/io/BlockGuardOs;->lstat(Ljava/lang/String;)Landroid/system/StructStat; +Llibcore/io/BlockGuardOs;->mkdir(Ljava/lang/String;I)V +Llibcore/io/BlockGuardOs;->mkfifo(Ljava/lang/String;I)V +Llibcore/io/BlockGuardOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor; +Llibcore/io/BlockGuardOs;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V +Llibcore/io/BlockGuardOs;->pread(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I +Llibcore/io/BlockGuardOs;->pread(Ljava/io/FileDescriptor;[BIIJ)I +Llibcore/io/BlockGuardOs;->pwrite(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I +Llibcore/io/BlockGuardOs;->pwrite(Ljava/io/FileDescriptor;[BIIJ)I +Llibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I +Llibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;[BII)I +Llibcore/io/BlockGuardOs;->readlink(Ljava/lang/String;)Ljava/lang/String; +Llibcore/io/BlockGuardOs;->readv(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I +Llibcore/io/BlockGuardOs;->realpath(Ljava/lang/String;)Ljava/lang/String; +Llibcore/io/BlockGuardOs;->remove(Ljava/lang/String;)V +Llibcore/io/BlockGuardOs;->rename(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat; +Llibcore/io/BlockGuardOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs; +Llibcore/io/BlockGuardOs;->symlink(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I +Llibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;[BII)I +Llibcore/io/BlockGuardOs;->writev(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I +Llibcore/io/BufferIterator;->readByte()B +Llibcore/io/BufferIterator;->readByteArray([BII)V +Llibcore/io/BufferIterator;->readInt()I +Llibcore/io/BufferIterator;->readIntArray([III)V +Llibcore/io/BufferIterator;->seek(I)V +Llibcore/io/BufferIterator;->skip(I)V +Llibcore/io/DropBox;->addText(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->(Llibcore/io/Os;)V +Llibcore/io/ForwardingOs;->access(Ljava/lang/String;I)Z +Llibcore/io/ForwardingOs;->chmod(Ljava/lang/String;I)V +Llibcore/io/ForwardingOs;->chown(Ljava/lang/String;II)V +Llibcore/io/ForwardingOs;->getenv(Ljava/lang/String;)Ljava/lang/String; +Llibcore/io/ForwardingOs;->lchown(Ljava/lang/String;II)V +Llibcore/io/ForwardingOs;->link(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->lstat(Ljava/lang/String;)Landroid/system/StructStat; +Llibcore/io/ForwardingOs;->mkdir(Ljava/lang/String;I)V +Llibcore/io/ForwardingOs;->mkfifo(Ljava/lang/String;I)V +Llibcore/io/ForwardingOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor; +Llibcore/io/ForwardingOs;->os:Llibcore/io/Os; +Llibcore/io/ForwardingOs;->readlink(Ljava/lang/String;)Ljava/lang/String; +Llibcore/io/ForwardingOs;->remove(Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->removexattr(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->rename(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->setenv(Ljava/lang/String;Ljava/lang/String;Z)V +Llibcore/io/ForwardingOs;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V +Llibcore/io/ForwardingOs;->setxattr(Ljava/lang/String;Ljava/lang/String;[BI)V +Llibcore/io/ForwardingOs;->stat(Ljava/lang/String;)Landroid/system/StructStat; +Llibcore/io/ForwardingOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs; +Llibcore/io/ForwardingOs;->symlink(Ljava/lang/String;Ljava/lang/String;)V +Llibcore/io/ForwardingOs;->sysconf(I)J +Llibcore/io/ForwardingOs;->unlink(Ljava/lang/String;)V +Llibcore/io/IoBridge;->isConnected(Ljava/io/FileDescriptor;Ljava/net/InetAddress;III)Z +Llibcore/io/IoUtils;->closeQuietly(Ljava/io/FileDescriptor;)V +Llibcore/io/IoUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V +Llibcore/io/IoUtils;->closeQuietly(Ljava/net/Socket;)V +Llibcore/io/IoUtils;->readFileAsByteArray(Ljava/lang/String;)[B +Llibcore/io/IoUtils;->readFileAsString(Ljava/lang/String;)Ljava/lang/String; +Llibcore/io/IoUtils;->setBlocking(Ljava/io/FileDescriptor;Z)V +Llibcore/io/MemoryMappedFile;->bigEndianIterator()Llibcore/io/BufferIterator; +Llibcore/io/MemoryMappedFile;->mmapRO(Ljava/lang/String;)Llibcore/io/MemoryMappedFile; +Llibcore/io/Os;->chmod(Ljava/lang/String;I)V +Llibcore/io/Os;->close(Ljava/io/FileDescriptor;)V +Llibcore/io/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V +Llibcore/io/Os;->gai_strerror(I)Ljava/lang/String; +Llibcore/io/Os;->remove(Ljava/lang/String;)V +Llibcore/io/Os;->setenv(Ljava/lang/String;Ljava/lang/String;Z)V +Llibcore/io/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V +Llibcore/io/Os;->stat(Ljava/lang/String;)Landroid/system/StructStat; +Llibcore/io/Os;->strerror(I)Ljava/lang/String; +Llibcore/io/Os;->sysconf(I)J +Llibcore/io/Streams;->readAsciiLine(Ljava/io/InputStream;)Ljava/lang/String; +Llibcore/io/Streams;->readFully(Ljava/io/InputStream;)[B +Llibcore/io/Streams;->readFully(Ljava/io/InputStream;[B)V +Llibcore/io/Streams;->readSingleByte(Ljava/io/InputStream;)I +Llibcore/io/Streams;->skipAll(Ljava/io/InputStream;)V +Llibcore/io/Streams;->writeSingleByte(Ljava/io/OutputStream;I)V +Llibcore/net/event/NetworkEventDispatcher;->addListener(Llibcore/net/event/NetworkEventListener;)V +Llibcore/net/event/NetworkEventDispatcher;->getInstance()Llibcore/net/event/NetworkEventDispatcher; +Llibcore/net/event/NetworkEventListener;->()V +Llibcore/net/http/HttpDate;->format(Ljava/util/Date;)Ljava/lang/String; +Llibcore/net/http/HttpDate;->parse(Ljava/lang/String;)Ljava/util/Date; +Llibcore/net/MimeUtils;->guessExtensionFromMimeType(Ljava/lang/String;)Ljava/lang/String; +Llibcore/net/MimeUtils;->guessMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String; +Llibcore/net/NetworkSecurityPolicy;->isCleartextTrafficPermitted()Z +Llibcore/util/BasicLruCache;->(I)V +Llibcore/util/BasicLruCache;->evictAll()V +Llibcore/util/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; +Llibcore/util/BasicLruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Llibcore/util/EmptyArray;->BYTE:[B +Llibcore/util/EmptyArray;->INT:[I +Llibcore/util/EmptyArray;->OBJECT:[Ljava/lang/Object; +Llibcore/util/ZoneInfoDB$TzData;->()V +Lorg/apache/harmony/dalvik/ddmc/Chunk;->(ILjava/nio/ByteBuffer;)V +Lorg/apache/harmony/dalvik/ddmc/ChunkHandler;->CHUNK_ORDER:Ljava/nio/ByteOrder; +Lorg/apache/harmony/dalvik/ddmc/DdmServer;->broadcast(I)V +Lorg/apache/harmony/dalvik/ddmc/DdmServer;->sendChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)V +Lorg/apache/harmony/dalvik/ddmc/DdmVmInternal;->getThreadStats()[B +Lorg/apache/harmony/xml/dom/ElementImpl;->localName:Ljava/lang/String; +Lorg/apache/harmony/xml/ExpatAttributes;->()V +Lorg/apache/harmony/xml/ExpatParser$EntityParser;->depth:I +Lorg/apache/harmony/xml/ExpatParser;->(Ljava/lang/String;Lorg/apache/harmony/xml/ExpatReader;ZLjava/lang/String;Ljava/lang/String;)V +Lorg/apache/harmony/xml/ExpatParser;->append([BII)V +Lorg/apache/harmony/xml/ExpatParser;->append([CII)V +Lorg/apache/harmony/xml/ExpatParser;->attributes:Lorg/apache/harmony/xml/ExpatAttributes; +Lorg/apache/harmony/xml/ExpatParser;->cloneAttributes()Lorg/xml/sax/Attributes; +Lorg/apache/harmony/xml/ExpatParser;->finish()V +Lorg/apache/harmony/xml/ExpatParser;->xmlReader:Lorg/apache/harmony/xml/ExpatReader; +Lorg/apache/harmony/xml/ExpatReader;->()V +Lorg/apache/harmony/xml/ExpatReader;->contentHandler:Lorg/xml/sax/ContentHandler; +Lorg/apache/xalan/extensions/ExpressionContext;->getContextNode()Lorg/w3c/dom/Node; +Lorg/apache/xalan/extensions/ExpressionContext;->getErrorListener()Ljavax/xml/transform/ErrorListener; +Lorg/apache/xalan/extensions/ExpressionContext;->getVariableOrParam(Lorg/apache/xml/utils/QName;)Lorg/apache/xpath/objects/XObject; +Lorg/apache/xalan/extensions/ExpressionContext;->getXPathContext()Lorg/apache/xpath/XPathContext; +Lorg/apache/xalan/extensions/ExtensionHandler;->(Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xalan/extensions/ExtensionHandler;->callFunction(Ljava/lang/String;Ljava/util/Vector;Ljava/lang/Object;Lorg/apache/xalan/extensions/ExpressionContext;)Ljava/lang/Object; +Lorg/apache/xalan/extensions/ExtensionHandler;->getClassForName(Ljava/lang/String;)Ljava/lang/Class; +Lorg/apache/xalan/extensions/ObjectFactory$ConfigurationError;->(Ljava/lang/String;Ljava/lang/Exception;)V +Lorg/apache/xalan/extensions/ObjectFactory;->findClassLoader()Ljava/lang/ClassLoader; +Lorg/apache/xalan/extensions/ObjectFactory;->findProviderClass(Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/lang/Class; +Lorg/apache/xalan/processor/TransformerFactoryImpl;->()V +Lorg/apache/xalan/res/XSLMessages;->createMessage(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +Lorg/apache/xalan/res/XSLTErrorResources;->()V +Lorg/apache/xalan/serialize/SerializerUtils;->outputResultTreeFragment(Lorg/apache/xml/serializer/SerializationHandler;Lorg/apache/xpath/objects/XObject;Lorg/apache/xpath/XPathContext;)V +Lorg/apache/xalan/templates/AVT;->evaluate(Lorg/apache/xpath/XPathContext;ILorg/apache/xml/utils/PrefixResolver;)Ljava/lang/String; +Lorg/apache/xalan/templates/ElemElement;->execute(Lorg/apache/xalan/transformer/TransformerImpl;)V +Lorg/apache/xalan/templates/ElemExsltFunction;->execute(Lorg/apache/xalan/transformer/TransformerImpl;[Lorg/apache/xpath/objects/XObject;)V +Lorg/apache/xalan/templates/ElemExtensionCall;->getAttribute(Ljava/lang/String;Lorg/w3c/dom/Node;Lorg/apache/xalan/transformer/TransformerImpl;)Ljava/lang/String; +Lorg/apache/xalan/templates/ElemLiteralResult;->getLiteralResultAttribute(Ljava/lang/String;)Lorg/apache/xalan/templates/AVT; +Lorg/apache/xalan/templates/ElemTemplate;->getMatch()Lorg/apache/xpath/XPath; +Lorg/apache/xalan/templates/ElemTemplate;->getName()Lorg/apache/xml/utils/QName; +Lorg/apache/xalan/templates/ElemTemplateElement;->getFirstChildElem()Lorg/apache/xalan/templates/ElemTemplateElement; +Lorg/apache/xalan/templates/ElemTemplateElement;->getNextSiblingElem()Lorg/apache/xalan/templates/ElemTemplateElement; +Lorg/apache/xalan/templates/ElemTemplateElement;->getParentElem()Lorg/apache/xalan/templates/ElemTemplateElement; +Lorg/apache/xalan/templates/ElemTemplateElement;->getStylesheetRoot()Lorg/apache/xalan/templates/StylesheetRoot; +Lorg/apache/xalan/templates/ElemTemplateElement;->getXSLToken()I +Lorg/apache/xalan/templates/ElemTextLiteral;->getChars()[C +Lorg/apache/xalan/templates/KeyDeclaration;->getName()Lorg/apache/xml/utils/QName; +Lorg/apache/xalan/templates/KeyDeclaration;->getUse()Lorg/apache/xpath/XPath; +Lorg/apache/xalan/templates/StylesheetRoot;->getDefaultRootRule()Lorg/apache/xalan/templates/ElemTemplate; +Lorg/apache/xalan/templates/StylesheetRoot;->getDefaultRule()Lorg/apache/xalan/templates/ElemTemplate; +Lorg/apache/xalan/templates/StylesheetRoot;->getDefaultTextRule()Lorg/apache/xalan/templates/ElemTemplate; +Lorg/apache/xalan/templates/StylesheetRoot;->getTemplateComposed(Lorg/apache/xml/utils/QName;)Lorg/apache/xalan/templates/ElemTemplate; +Lorg/apache/xalan/transformer/ClonerToResultTree;->cloneToResultTree(IILorg/apache/xml/dtm/DTM;Lorg/apache/xml/serializer/SerializationHandler;Z)V +Lorg/apache/xalan/transformer/DecimalToRoman;->(JLjava/lang/String;JLjava/lang/String;)V +Lorg/apache/xalan/transformer/DecimalToRoman;->m_postLetter:Ljava/lang/String; +Lorg/apache/xalan/transformer/DecimalToRoman;->m_postValue:J +Lorg/apache/xalan/transformer/DecimalToRoman;->m_preLetter:Ljava/lang/String; +Lorg/apache/xalan/transformer/DecimalToRoman;->m_preValue:J +Lorg/apache/xalan/transformer/MsgMgr;->error(Ljavax/xml/transform/SourceLocator;Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;Ljava/lang/String;)V +Lorg/apache/xalan/transformer/TransformerImpl;->createSerializationHandler(Ljavax/xml/transform/Result;Lorg/apache/xalan/templates/OutputProperties;)Lorg/apache/xml/serializer/SerializationHandler; +Lorg/apache/xalan/transformer/TransformerImpl;->executeChildTemplates(Lorg/apache/xalan/templates/ElemTemplateElement;Lorg/w3c/dom/Node;Lorg/apache/xml/utils/QName;Lorg/xml/sax/ContentHandler;)V +Lorg/apache/xalan/transformer/TransformerImpl;->executeChildTemplates(Lorg/apache/xalan/templates/ElemTemplateElement;Z)V +Lorg/apache/xalan/transformer/TransformerImpl;->getCountersTable()Lorg/apache/xalan/transformer/CountersTable; +Lorg/apache/xalan/transformer/TransformerImpl;->getCurrentTemplateElements()Lorg/apache/xml/utils/ObjectStack; +Lorg/apache/xalan/transformer/TransformerImpl;->getCurrentTemplateElementsCount()I +Lorg/apache/xalan/transformer/TransformerImpl;->getMatchedNode()I +Lorg/apache/xalan/transformer/TransformerImpl;->getMatchedTemplate()Lorg/apache/xalan/templates/ElemTemplate; +Lorg/apache/xalan/transformer/TransformerImpl;->getMode()Lorg/apache/xml/utils/QName; +Lorg/apache/xalan/transformer/TransformerImpl;->getMsgMgr()Lorg/apache/xalan/transformer/MsgMgr; +Lorg/apache/xalan/transformer/TransformerImpl;->getOutputFormat()Lorg/apache/xalan/templates/OutputProperties; +Lorg/apache/xalan/transformer/TransformerImpl;->getResultTreeHandler()Lorg/apache/xml/serializer/SerializationHandler; +Lorg/apache/xalan/transformer/TransformerImpl;->getSerializationHandler()Lorg/apache/xml/serializer/SerializationHandler; +Lorg/apache/xalan/transformer/TransformerImpl;->getXPathContext()Lorg/apache/xpath/XPathContext; +Lorg/apache/xalan/transformer/TransformerImpl;->m_attrSetStack:Ljava/util/Stack; +Lorg/apache/xalan/transformer/TransformerImpl;->m_currentMatchedNodes:Lorg/apache/xml/utils/NodeVector; +Lorg/apache/xalan/transformer/TransformerImpl;->m_currentMatchTemplates:Ljava/util/Stack; +Lorg/apache/xalan/transformer/TransformerImpl;->m_currentTemplateElements:Lorg/apache/xml/utils/ObjectStack; +Lorg/apache/xalan/transformer/TransformerImpl;->m_currentTemplateRuleIsNull:Lorg/apache/xml/utils/BoolStack; +Lorg/apache/xalan/transformer/TransformerImpl;->m_inputContentHandler:Lorg/xml/sax/ContentHandler; +Lorg/apache/xalan/transformer/TransformerImpl;->m_outputTarget:Ljavax/xml/transform/Result; +Lorg/apache/xalan/transformer/TransformerImpl;->m_stringWriterObjectPool:Lorg/apache/xml/utils/ObjectPool; +Lorg/apache/xalan/transformer/TransformerImpl;->m_urlOfSource:Ljava/lang/String; +Lorg/apache/xalan/transformer/TransformerImpl;->m_xcontext:Lorg/apache/xpath/XPathContext; +Lorg/apache/xalan/transformer/TransformerImpl;->popCurrentFuncResult()Ljava/lang/Object; +Lorg/apache/xalan/transformer/TransformerImpl;->pushCurrentFuncResult(Ljava/lang/Object;)V +Lorg/apache/xalan/transformer/TransformerImpl;->pushElemTemplateElement(Lorg/apache/xalan/templates/ElemTemplateElement;)V +Lorg/apache/xalan/Version;->getVersion()Ljava/lang/String; +Lorg/apache/xalan/xslt/EnvironmentCheck;->()V +Lorg/apache/xalan/xslt/EnvironmentCheck;->appendEnvironmentReport(Lorg/w3c/dom/Node;Lorg/w3c/dom/Document;Ljava/util/Hashtable;)V +Lorg/apache/xalan/xslt/EnvironmentCheck;->getEnvironmentHash()Ljava/util/Hashtable; +Lorg/apache/xalan/xslt/ObjectFactory;->findClassLoader()Ljava/lang/ClassLoader; +Lorg/apache/xalan/xslt/ObjectFactory;->newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/lang/Object; +Lorg/apache/xml/dtm/Axis;->getNames(I)Ljava/lang/String; +Lorg/apache/xml/dtm/Axis;->isReverse(I)Z +Lorg/apache/xml/dtm/DTM;->getDocument()I +Lorg/apache/xml/dtm/DTM;->getDocumentRoot(I)I +Lorg/apache/xml/dtm/DTM;->getFirstChild(I)I +Lorg/apache/xml/dtm/DTM;->getNextSibling(I)I +Lorg/apache/xml/dtm/DTM;->getNode(I)Lorg/w3c/dom/Node; +Lorg/apache/xml/dtm/DTM;->getNodeName(I)Ljava/lang/String; +Lorg/apache/xml/dtm/DTM;->getNodeType(I)S +Lorg/apache/xml/dtm/DTM;->getParent(I)I +Lorg/apache/xml/dtm/DTM;->getSourceLocatorFor(I)Ljavax/xml/transform/SourceLocator; +Lorg/apache/xml/dtm/DTM;->getStringValue(I)Lorg/apache/xml/utils/XMLString; +Lorg/apache/xml/dtm/DTM;->migrateTo(Lorg/apache/xml/dtm/DTMManager;)V +Lorg/apache/xml/dtm/DTMAxisIterator;->cloneIterator()Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/DTMAxisIterator;->getLast()I +Lorg/apache/xml/dtm/DTMAxisIterator;->getNodeByPosition(I)I +Lorg/apache/xml/dtm/DTMAxisIterator;->getPosition()I +Lorg/apache/xml/dtm/DTMAxisIterator;->gotoMark()V +Lorg/apache/xml/dtm/DTMAxisIterator;->isReverse()Z +Lorg/apache/xml/dtm/DTMAxisIterator;->next()I +Lorg/apache/xml/dtm/DTMAxisIterator;->reset()Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/DTMAxisIterator;->setMark()V +Lorg/apache/xml/dtm/DTMAxisIterator;->setRestartable(Z)V +Lorg/apache/xml/dtm/DTMAxisIterator;->setStartNode(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/DTMException;->(Ljava/lang/String;)V +Lorg/apache/xml/dtm/DTMFilter;->acceptNode(II)S +Lorg/apache/xml/dtm/DTMIterator;->cloneWithReset()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xml/dtm/DTMIterator;->getCurrentPos()I +Lorg/apache/xml/dtm/DTMIterator;->getDTM(I)Lorg/apache/xml/dtm/DTM; +Lorg/apache/xml/dtm/DTMIterator;->nextNode()I +Lorg/apache/xml/dtm/DTMIterator;->runTo(I)V +Lorg/apache/xml/dtm/DTMIterator;->setCurrentPos(I)V +Lorg/apache/xml/dtm/DTMIterator;->setRoot(ILjava/lang/Object;)V +Lorg/apache/xml/dtm/DTMIterator;->setShouldCacheNodes(Z)V +Lorg/apache/xml/dtm/DTMManager;->getDTM(Ljavax/xml/transform/Source;ZLorg/apache/xml/dtm/DTMWSFilter;ZZ)Lorg/apache/xml/dtm/DTM; +Lorg/apache/xml/dtm/DTMManager;->getXMLStringFactory()Lorg/apache/xml/utils/XMLStringFactory; +Lorg/apache/xml/dtm/DTMManager;->release(Lorg/apache/xml/dtm/DTM;Z)Z +Lorg/apache/xml/dtm/ref/CoroutineManager;->()V +Lorg/apache/xml/dtm/ref/CoroutineManager;->co_joinCoroutineSet(I)I +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->()V +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->includeSelf()Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->reset()Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->resetPosition()Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->returnNode(I)I +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->setRestartable(Z)V +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_includeSelf:Z +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_isRestartable:Z +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_last:I +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_markedNode:I +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_position:I +Lorg/apache/xml/dtm/ref/DTMAxisIteratorBase;->_startNode:I +Lorg/apache/xml/dtm/ref/DTMAxisIterNodeList;->(Lorg/apache/xml/dtm/DTM;Lorg/apache/xml/dtm/DTMAxisIterator;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->appendChild(IZZ)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->appendTextChild(Ljava/lang/String;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->declareNamespaceInContext(II)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->documentRegistration()V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->documentRelease()V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->ensureSizeOfIndex(II)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->error(Ljava/lang/String;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->findGTE([IIII)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->findInSortedSuballocatedIntVector(Lorg/apache/xml/utils/SuballocatedIntVector;I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->findNamespaceContext(I)Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocument()I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentAllDeclarationsProcessed()Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentBaseURI()Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentEncoding(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentRoot(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentStandalone(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentSystemIdentifier(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDocumentVersion(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getDTMIDs()Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getExpandedTypeID(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getExpandedTypeID(Ljava/lang/String;Ljava/lang/String;I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getFirstChild(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getFirstNamespaceNode(IZ)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getLastChild(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getLevel(I)S +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getLocalNameFromExpandedNameID(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getManager()Lorg/apache/xml/dtm/DTMManager; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNamespaceFromExpandedNameID(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNamespaceType(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNextAttribute(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNextNamespaceNode(IIZ)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNextSibling(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNode(I)Lorg/w3c/dom/Node; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNodeHandle(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNodeIdent(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getNodeType(I)S +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getOwnerDocument(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getParent(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getPreviousSibling(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getShouldStripWhitespace()Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getStringValueChunk(II[I)[C +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->getStringValueChunkCount(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->hasChildNodes(I)Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->indexNode(II)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->isCharacterElementContentWhitespace(I)Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->isDocumentAllDeclarationsProcessed(I)Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->isNodeAfter(II)Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->isSupported(Ljava/lang/String;Ljava/lang/String;)Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->makeNodeHandle(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->makeNodeIdentity(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_expandedNameTable:Lorg/apache/xml/dtm/ref/ExpandedNameTable; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_exptype:Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_firstch:Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_nextsib:Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_parent:Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_prevsib:Lorg/apache/xml/utils/SuballocatedIntVector; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_size:I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_wsfilter:Lorg/apache/xml/dtm/DTMWSFilter; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->m_xstrf:Lorg/apache/xml/utils/XMLStringFactory; +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->popShouldStripWhitespace()V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->pushShouldStripWhitespace(Z)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->setDocumentBaseURI(Ljava/lang/String;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->setFeature(Ljava/lang/String;Z)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->setShouldStripWhitespace(Z)V +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->supportsPreStripping()Z +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_exptype(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_firstch(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_level(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_nextsib(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_parent(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_prevsib(I)I +Lorg/apache/xml/dtm/ref/DTMDefaultBase;->_type(I)S +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$InternalAxisIteratorBase;->(Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$InternalAxisIteratorBase;->_currentNode:I +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$NamespaceIterator;->(Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$NamespaceIterator;->next()I +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$NamespaceIterator;->setStartNode(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$NthDescendantIterator;->(Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;I)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$SingletonIterator;->(Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators$SingletonIterator;->(Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;I)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;->(Lorg/apache/xml/dtm/DTMManager;Ljavax/xml/transform/Source;ILorg/apache/xml/dtm/DTMWSFilter;Lorg/apache/xml/utils/XMLStringFactory;Z)V +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;->getAxisIterator(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMDefaultBaseIterators;->getTypedAxisIterator(II)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/DTMDefaultBaseTraversers;->getAxisTraverser(I)Lorg/apache/xml/dtm/DTMAxisTraverser; +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->()V +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->addDTM(Lorg/apache/xml/dtm/DTM;I)V +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->addDTM(Lorg/apache/xml/dtm/DTM;II)V +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->getFirstFreeDTMID()I +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->getXMLReader(Ljavax/xml/transform/Source;)Lorg/xml/sax/XMLReader; +Lorg/apache/xml/dtm/ref/DTMManagerDefault;->releaseXMLReader(Lorg/xml/sax/XMLReader;)V +Lorg/apache/xml/dtm/ref/DTMNodeIterator;->(Lorg/apache/xml/dtm/DTMIterator;)V +Lorg/apache/xml/dtm/ref/DTMNodeIterator;->getDTMIterator()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xml/dtm/ref/DTMNodeIterator;->getRoot()Lorg/w3c/dom/Node; +Lorg/apache/xml/dtm/ref/DTMNodeList;->(Lorg/apache/xml/dtm/DTMIterator;)V +Lorg/apache/xml/dtm/ref/DTMNodeProxy;->(Lorg/apache/xml/dtm/DTM;I)V +Lorg/apache/xml/dtm/ref/DTMNodeProxy;->getDTM()Lorg/apache/xml/dtm/DTM; +Lorg/apache/xml/dtm/ref/DTMNodeProxy;->getDTMNodeNumber()I +Lorg/apache/xml/dtm/ref/DTMNodeProxy;->getStringValue()Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMStringPool;->()V +Lorg/apache/xml/dtm/ref/DTMStringPool;->indexToString(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/DTMStringPool;->m_intToString:Ljava/util/Vector; +Lorg/apache/xml/dtm/ref/DTMStringPool;->removeAllElements()V +Lorg/apache/xml/dtm/ref/DTMStringPool;->stringToIndex(Ljava/lang/String;)I +Lorg/apache/xml/dtm/ref/ExpandedNameTable;->getExpandedTypeID(Ljava/lang/String;Ljava/lang/String;I)I +Lorg/apache/xml/dtm/ref/ExpandedNameTable;->getExpandedTypeID(Ljava/lang/String;Ljava/lang/String;IZ)I +Lorg/apache/xml/dtm/ref/ExpandedNameTable;->getLocalName(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/ExpandedNameTable;->getSize()I +Lorg/apache/xml/dtm/ref/ExpandedNameTable;->getType(I)S +Lorg/apache/xml/dtm/ref/IncrementalSAXSource;->deliverMoreNodes(Z)Ljava/lang/Object; +Lorg/apache/xml/dtm/ref/IncrementalSAXSource;->setContentHandler(Lorg/xml/sax/ContentHandler;)V +Lorg/apache/xml/dtm/ref/IncrementalSAXSource;->setLexicalHandler(Lorg/xml/sax/ext/LexicalHandler;)V +Lorg/apache/xml/dtm/ref/IncrementalSAXSource;->startParse(Lorg/xml/sax/InputSource;)V +Lorg/apache/xml/dtm/ref/IncrementalSAXSource_Filter;->()V +Lorg/apache/xml/dtm/ref/IncrementalSAXSource_Filter;->setXMLReader(Lorg/xml/sax/XMLReader;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$AncestorIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$AncestorIterator;->next()I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$AncestorIterator;->setStartNode(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$AttributeIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$ChildrenIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$ChildrenIterator;->setStartNode(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$DescendantIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$FollowingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$FollowingSiblingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$ParentIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$ParentIterator;->setNodeType(I)Lorg/apache/xml/dtm/DTMAxisIterator; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$PrecedingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$PrecedingSiblingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedAncestorIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedAttributeIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedChildrenIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedDescendantIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedFollowingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedFollowingSiblingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedPrecedingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedPrecedingSiblingIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2$TypedSingletonIterator;->(Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;I)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->(Lorg/apache/xml/dtm/DTMManager;Ljavax/xml/transform/Source;ILorg/apache/xml/dtm/DTMWSFilter;Lorg/apache/xml/utils/XMLStringFactory;ZIZZZ)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->copyAttribute(IILorg/apache/xml/serializer/SerializationHandler;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->copyAttributes(ILorg/apache/xml/serializer/SerializationHandler;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->copyElement(IILorg/apache/xml/serializer/SerializationHandler;)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->copyNS(ILorg/apache/xml/serializer/SerializationHandler;Z)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->copyTextNode(ILorg/apache/xml/serializer/SerializationHandler;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->dispatchCharactersEvents(ILorg/xml/sax/ContentHandler;Z)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getFirstAttribute(I)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getIdForNamespace(Ljava/lang/String;)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getLocalName(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getNodeName(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getNodeNameX(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getNodeValue(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getStringValue()Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getStringValue(I)Lorg/apache/xml/utils/XMLString; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->getStringValueX(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->m_buildIdIndex:Z +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->_exptype2(I)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->_exptype2Type(I)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->_firstch2(I)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM2;->_nextsib2(I)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->dispatchToEvents(ILorg/xml/sax/ContentHandler;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getAttributeNode(ILjava/lang/String;Ljava/lang/String;)I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getContentHandler()Lorg/xml/sax/ContentHandler; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getDeclHandler()Lorg/xml/sax/ext/DeclHandler; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getDocumentTypeDeclarationPublicIdentifier()Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getDocumentTypeDeclarationSystemIdentifier()Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getDTDHandler()Lorg/xml/sax/DTDHandler; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getEntityResolver()Lorg/xml/sax/EntityResolver; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getErrorHandler()Lorg/xml/sax/ErrorHandler; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getLexicalHandler()Lorg/xml/sax/ext/LexicalHandler; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getNamespaceURI(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getNumberOfNodes()I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getPrefix(I)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getSourceLocatorFor(I)Ljavax/xml/transform/SourceLocator; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->getUnparsedEntityURI(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->isAttributeSpecified(I)Z +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->migrateTo(Lorg/apache/xml/dtm/DTMManager;)V +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->m_idAttributes:Ljava/util/Hashtable; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->m_parents:Lorg/apache/xml/utils/IntStack; +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->m_previous:I +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->needsTwoThreads()Z +Lorg/apache/xml/dtm/ref/sax2dtm/SAX2DTM;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V +Lorg/apache/xml/dtm/ref/SecuritySupport;->getContextClassLoader()Ljava/lang/ClassLoader; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getFileExists(Ljava/io/File;)Z +Lorg/apache/xml/dtm/ref/SecuritySupport;->getFileInputStream(Ljava/io/File;)Ljava/io/FileInputStream; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getInstance()Lorg/apache/xml/dtm/ref/SecuritySupport; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getLastModified(Ljava/io/File;)J +Lorg/apache/xml/dtm/ref/SecuritySupport;->getParentClassLoader(Ljava/lang/ClassLoader;)Ljava/lang/ClassLoader; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getResourceAsStream(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/io/InputStream; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getSystemClassLoader()Ljava/lang/ClassLoader; +Lorg/apache/xml/dtm/ref/SecuritySupport;->getSystemProperty(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/res/XMLErrorResources;->()V +Lorg/apache/xml/res/XMLMessages;->createXMLMessage(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +Lorg/apache/xml/serializer/CharInfo$CharKey;->(C)V +Lorg/apache/xml/serializer/CharInfo;->(Ljava/lang/String;Ljava/lang/String;Z)V +Lorg/apache/xml/serializer/CharInfo;->get(I)Z +Lorg/apache/xml/serializer/CharInfo;->getCharInfo(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/xml/serializer/CharInfo; +Lorg/apache/xml/serializer/CharInfo;->set(I)V +Lorg/apache/xml/serializer/dom3/LSSerializerImpl;->()V +Lorg/apache/xml/serializer/DOMSerializer;->serialize(Lorg/w3c/dom/Node;)V +Lorg/apache/xml/serializer/ElemContext;->m_elementName:Ljava/lang/String; +Lorg/apache/xml/serializer/ElemContext;->m_elementURI:Ljava/lang/String; +Lorg/apache/xml/serializer/ElemContext;->m_startTagOpen:Z +Lorg/apache/xml/serializer/ElemContext;->push(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/xml/serializer/ElemContext; +Lorg/apache/xml/serializer/ElemDesc;->isAttrFlagSet(Ljava/lang/String;I)Z +Lorg/apache/xml/serializer/Encodings;->convertMime2JavaEncoding(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/serializer/Encodings;->getMimeEncoding(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/serializer/Encodings;->getWriter(Ljava/io/OutputStream;Ljava/lang/String;)Ljava/io/Writer; +Lorg/apache/xml/serializer/NamespaceMappings;->()V +Lorg/apache/xml/serializer/NamespaceMappings;->generateNextPrefix()Ljava/lang/String; +Lorg/apache/xml/serializer/NamespaceMappings;->lookupNamespace(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/serializer/NamespaceMappings;->lookupPrefix(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/serializer/OutputPropertiesFactory;->getDefaultMethodProperties(Ljava/lang/String;)Ljava/util/Properties; +Lorg/apache/xml/serializer/OutputPropertyUtils;->getBooleanProperty(Ljava/lang/String;Ljava/util/Properties;)Z +Lorg/apache/xml/serializer/OutputPropertyUtils;->getIntProperty(Ljava/lang/String;Ljava/util/Properties;)I +Lorg/apache/xml/serializer/SerializationHandler;->close()V +Lorg/apache/xml/serializer/SerializationHandler;->flushPending()V +Lorg/apache/xml/serializer/SerializationHandler;->setEscaping(Z)Z +Lorg/apache/xml/serializer/SerializationHandler;->setIndentAmount(I)V +Lorg/apache/xml/serializer/SerializationHandler;->setNamespaceMappings(Lorg/apache/xml/serializer/NamespaceMappings;)V +Lorg/apache/xml/serializer/Serializer;->asContentHandler()Lorg/xml/sax/ContentHandler; +Lorg/apache/xml/serializer/Serializer;->asDOMSerializer()Lorg/apache/xml/serializer/DOMSerializer; +Lorg/apache/xml/serializer/Serializer;->getOutputFormat()Ljava/util/Properties; +Lorg/apache/xml/serializer/Serializer;->getOutputStream()Ljava/io/OutputStream; +Lorg/apache/xml/serializer/Serializer;->getWriter()Ljava/io/Writer; +Lorg/apache/xml/serializer/Serializer;->reset()Z +Lorg/apache/xml/serializer/Serializer;->setOutputFormat(Ljava/util/Properties;)V +Lorg/apache/xml/serializer/Serializer;->setOutputStream(Ljava/io/OutputStream;)V +Lorg/apache/xml/serializer/Serializer;->setWriter(Ljava/io/Writer;)V +Lorg/apache/xml/serializer/SerializerBase;->fireCharEvent([CII)V +Lorg/apache/xml/serializer/SerializerBase;->fireCommentEvent([CII)V +Lorg/apache/xml/serializer/SerializerBase;->fireEndDoc()V +Lorg/apache/xml/serializer/SerializerBase;->fireEndElem(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->fireEscapingEvent(Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->getDoctypePublic()Ljava/lang/String; +Lorg/apache/xml/serializer/SerializerBase;->getDoctypeSystem()Ljava/lang/String; +Lorg/apache/xml/serializer/SerializerBase;->getEncoding()Ljava/lang/String; +Lorg/apache/xml/serializer/SerializerBase;->getPrefixPart(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/serializer/SerializerBase;->getVersion()Ljava/lang/String; +Lorg/apache/xml/serializer/SerializerBase;->m_attributes:Lorg/apache/xml/serializer/AttributesImplSerializer; +Lorg/apache/xml/serializer/SerializerBase;->m_charsBuff:[C +Lorg/apache/xml/serializer/SerializerBase;->m_elemContext:Lorg/apache/xml/serializer/ElemContext; +Lorg/apache/xml/serializer/SerializerBase;->m_needToCallStartDocument:Z +Lorg/apache/xml/serializer/SerializerBase;->m_tracer:Lorg/apache/xml/serializer/SerializerTrace; +Lorg/apache/xml/serializer/SerializerBase;->setDoctypePublic(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->setDoctypeSystem(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->setIndent(Z)V +Lorg/apache/xml/serializer/SerializerBase;->setMediaType(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->setOmitXMLDeclaration(Z)V +Lorg/apache/xml/serializer/SerializerBase;->setStandalone(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->setStandaloneInternal(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerBase;->setVersion(Ljava/lang/String;)V +Lorg/apache/xml/serializer/SerializerFactory;->getSerializer(Ljava/util/Properties;)Lorg/apache/xml/serializer/Serializer; +Lorg/apache/xml/serializer/SerializerTraceWriter;->(Ljava/io/Writer;Lorg/apache/xml/serializer/SerializerTrace;)V +Lorg/apache/xml/serializer/ToHTMLStream;->()V +Lorg/apache/xml/serializer/ToHTMLStream;->getElemDesc(Ljava/lang/String;)Lorg/apache/xml/serializer/ElemDesc; +Lorg/apache/xml/serializer/ToSAXHandler;->(Lorg/xml/sax/ContentHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToSAXHandler;->(Lorg/xml/sax/ContentHandler;Lorg/xml/sax/ext/LexicalHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToSAXHandler;->m_lexHandler:Lorg/xml/sax/ext/LexicalHandler; +Lorg/apache/xml/serializer/ToSAXHandler;->m_saxHandler:Lorg/xml/sax/ContentHandler; +Lorg/apache/xml/serializer/ToSAXHandler;->reset()Z +Lorg/apache/xml/serializer/ToSAXHandler;->startDocumentInternal()V +Lorg/apache/xml/serializer/ToSAXHandler;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToStream;->setCdataSectionElements(Ljava/lang/String;Ljava/util/Properties;)V +Lorg/apache/xml/serializer/ToStream;->setEncoding(Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToStream;->setIndentAmount(I)V +Lorg/apache/xml/serializer/ToTextSAXHandler;->(Lorg/xml/sax/ContentHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToTextSAXHandler;->(Lorg/xml/sax/ContentHandler;Lorg/xml/sax/ext/LexicalHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToTextStream;->()V +Lorg/apache/xml/serializer/ToUnknownStream;->()V +Lorg/apache/xml/serializer/ToXMLSAXHandler;->(Lorg/xml/sax/ContentHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToXMLSAXHandler;->(Lorg/xml/sax/ContentHandler;Lorg/xml/sax/ext/LexicalHandler;Ljava/lang/String;)V +Lorg/apache/xml/serializer/ToXMLStream;->()V +Lorg/apache/xml/serializer/WriterToASCI;->(Ljava/io/OutputStream;)V +Lorg/apache/xml/serializer/WriterToUTF8Buffered;->(Ljava/io/OutputStream;)V +Lorg/apache/xml/utils/DefaultErrorHandler;->()V +Lorg/apache/xml/utils/DefaultErrorHandler;->printLocation(Ljava/io/PrintWriter;Ljava/lang/Throwable;)V +Lorg/apache/xml/utils/DOMHelper;->isNodeAfter(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Z +Lorg/apache/xml/utils/DOMHelper;->isNodeTheSame(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Z +Lorg/apache/xml/utils/FastStringBuffer;->append(Ljava/lang/String;)V +Lorg/apache/xml/utils/FastStringBuffer;->getString(II)Ljava/lang/String; +Lorg/apache/xml/utils/FastStringBuffer;->length()I +Lorg/apache/xml/utils/IntStack;->peek()I +Lorg/apache/xml/utils/ObjectVector;->elementAt(I)Ljava/lang/Object; +Lorg/apache/xml/utils/ObjectVector;->size()I +Lorg/apache/xml/utils/PrefixResolverDefault;->(Lorg/w3c/dom/Node;)V +Lorg/apache/xml/utils/PrefixResolverDefault;->getNamespaceForPrefix(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/utils/QName;->(Ljava/lang/String;)V +Lorg/apache/xml/utils/QName;->(Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xml/utils/QName;->getLocalName()Ljava/lang/String; +Lorg/apache/xml/utils/SAXSourceLocator;->(Lorg/xml/sax/SAXParseException;)V +Lorg/apache/xml/utils/StringBufferPool;->free(Lorg/apache/xml/utils/FastStringBuffer;)V +Lorg/apache/xml/utils/StringBufferPool;->get()Lorg/apache/xml/utils/FastStringBuffer; +Lorg/apache/xml/utils/StringVector;->elementAt(I)Ljava/lang/String; +Lorg/apache/xml/utils/StringVector;->size()I +Lorg/apache/xml/utils/StylesheetPIHandler;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xml/utils/StylesheetPIHandler;->getAssociatedStylesheet()Ljavax/xml/transform/Source; +Lorg/apache/xml/utils/StylesheetPIHandler;->setBaseId(Ljava/lang/String;)V +Lorg/apache/xml/utils/StylesheetPIHandler;->setURIResolver(Ljavax/xml/transform/URIResolver;)V +Lorg/apache/xml/utils/SuballocatedIntVector;->(I)V +Lorg/apache/xml/utils/SuballocatedIntVector;->elementAt(I)I +Lorg/apache/xml/utils/SuballocatedIntVector;->setElementAt(II)V +Lorg/apache/xml/utils/SuballocatedIntVector;->size()I +Lorg/apache/xml/utils/SystemIDResolver;->getAbsoluteURI(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/utils/SystemIDResolver;->getAbsoluteURI(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/utils/SystemIDResolver;->getAbsoluteURIFromRelative(Ljava/lang/String;)Ljava/lang/String; +Lorg/apache/xml/utils/SystemIDResolver;->isAbsoluteURI(Ljava/lang/String;)Z +Lorg/apache/xml/utils/URI$MalformedURIException;->(Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->(Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->(Lorg/apache/xml/utils/URI;)V +Lorg/apache/xml/utils/URI;->(Lorg/apache/xml/utils/URI;Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->getFragment()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->getHost()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->getPath()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->getPort()I +Lorg/apache/xml/utils/URI;->getQueryString()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->getScheme()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->getUserinfo()Ljava/lang/String; +Lorg/apache/xml/utils/URI;->setFragment(Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->setHost(Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->setPort(I)V +Lorg/apache/xml/utils/URI;->setScheme(Ljava/lang/String;)V +Lorg/apache/xml/utils/URI;->setUserinfo(Ljava/lang/String;)V +Lorg/apache/xml/utils/WrappedRuntimeException;->(Ljava/lang/Exception;)V +Lorg/apache/xml/utils/WrappedRuntimeException;->getException()Ljava/lang/Exception; +Lorg/apache/xml/utils/XML11Char;->isXML11ValidNCName(Ljava/lang/String;)Z +Lorg/apache/xml/utils/XML11Char;->isXML11ValidQName(Ljava/lang/String;)Z +Lorg/apache/xml/utils/XMLReaderManager;->getInstance()Lorg/apache/xml/utils/XMLReaderManager; +Lorg/apache/xml/utils/XMLReaderManager;->getXMLReader()Lorg/xml/sax/XMLReader; +Lorg/apache/xml/utils/XMLReaderManager;->releaseXMLReader(Lorg/xml/sax/XMLReader;)V +Lorg/apache/xml/utils/XMLString;->dispatchCharactersEvents(Lorg/xml/sax/ContentHandler;)V +Lorg/apache/xml/utils/XMLString;->equals(Lorg/apache/xml/utils/XMLString;)Z +Lorg/apache/xml/utils/XMLString;->fixWhiteSpace(ZZZ)Lorg/apache/xml/utils/XMLString; +Lorg/apache/xml/utils/XMLStringDefault;->(Ljava/lang/String;)V +Lorg/apache/xml/utils/XMLStringFactory;->()V +Lorg/apache/xml/utils/XMLStringFactory;->emptystr()Lorg/apache/xml/utils/XMLString; +Lorg/apache/xml/utils/XMLStringFactory;->newstr(Ljava/lang/String;)Lorg/apache/xml/utils/XMLString; +Lorg/apache/xpath/axes/ChildTestIterator;->(Lorg/apache/xml/dtm/DTMAxisTraverser;)V +Lorg/apache/xpath/axes/DescendantIterator;->()V +Lorg/apache/xpath/axes/LocPathIterator;->getDTM(I)Lorg/apache/xml/dtm/DTM; +Lorg/apache/xpath/axes/LocPathIterator;->getPrefixResolver()Lorg/apache/xml/utils/PrefixResolver; +Lorg/apache/xpath/axes/LocPathIterator;->getXPathContext()Lorg/apache/xpath/XPathContext; +Lorg/apache/xpath/axes/NodeSequence;->getContainedIter()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xpath/axes/NodeSequence;->nextNode()I +Lorg/apache/xpath/axes/OneStepIterator;->(Lorg/apache/xml/dtm/DTMAxisIterator;I)V +Lorg/apache/xpath/CachedXPathAPI;->()V +Lorg/apache/xpath/CachedXPathAPI;->(Lorg/apache/xpath/CachedXPathAPI;)V +Lorg/apache/xpath/CachedXPathAPI;->eval(Lorg/w3c/dom/Node;Ljava/lang/String;)Lorg/apache/xpath/objects/XObject; +Lorg/apache/xpath/CachedXPathAPI;->getXPathContext()Lorg/apache/xpath/XPathContext; +Lorg/apache/xpath/CachedXPathAPI;->selectNodeList(Lorg/w3c/dom/Node;Ljava/lang/String;)Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/CachedXPathAPI;->selectNodeList(Lorg/w3c/dom/Node;Ljava/lang/String;Lorg/w3c/dom/Node;)Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/CachedXPathAPI;->selectSingleNode(Lorg/w3c/dom/Node;Ljava/lang/String;)Lorg/w3c/dom/Node; +Lorg/apache/xpath/CachedXPathAPI;->selectSingleNode(Lorg/w3c/dom/Node;Ljava/lang/String;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node; +Lorg/apache/xpath/compiler/FunctionTable;->()V +Lorg/apache/xpath/compiler/FunctionTable;->installFunction(Ljava/lang/String;Ljava/lang/Class;)I +Lorg/apache/xpath/Expression;->assertion(ZLjava/lang/String;)V +Lorg/apache/xpath/Expression;->error(Lorg/apache/xpath/XPathContext;Ljava/lang/String;[Ljava/lang/Object;)V +Lorg/apache/xpath/Expression;->exprGetParent()Lorg/apache/xpath/ExpressionNode; +Lorg/apache/xpath/ExpressionNode;->exprGetParent()Lorg/apache/xpath/ExpressionNode; +Lorg/apache/xpath/functions/FuncCurrent;->()V +Lorg/apache/xpath/functions/FuncExtFunction;->getFunctionName()Ljava/lang/String; +Lorg/apache/xpath/functions/FuncExtFunction;->getMethodKey()Ljava/lang/Object; +Lorg/apache/xpath/functions/Function;->()V +Lorg/apache/xpath/functions/WrongNumberArgsException;->(Ljava/lang/String;)V +Lorg/apache/xpath/NodeSet;->()V +Lorg/apache/xpath/NodeSet;->(Lorg/w3c/dom/Node;)V +Lorg/apache/xpath/NodeSet;->(Lorg/w3c/dom/NodeList;)V +Lorg/apache/xpath/NodeSet;->(Lorg/w3c/dom/traversal/NodeIterator;)V +Lorg/apache/xpath/NodeSet;->addElement(Lorg/w3c/dom/Node;)V +Lorg/apache/xpath/NodeSet;->addNode(Lorg/w3c/dom/Node;)V +Lorg/apache/xpath/NodeSet;->contains(Lorg/w3c/dom/Node;)Z +Lorg/apache/xpath/NodeSet;->elementAt(I)Lorg/w3c/dom/Node; +Lorg/apache/xpath/NodeSet;->setShouldCacheNodes(Z)V +Lorg/apache/xpath/NodeSetDTM;->(Lorg/w3c/dom/NodeList;Lorg/apache/xpath/XPathContext;)V +Lorg/apache/xpath/NodeSetDTM;->(Lorg/w3c/dom/traversal/NodeIterator;Lorg/apache/xpath/XPathContext;)V +Lorg/apache/xpath/NodeSetDTM;->addNode(I)V +Lorg/apache/xpath/NodeSetDTM;->detach()V +Lorg/apache/xpath/NodeSetDTM;->getLength()I +Lorg/apache/xpath/NodeSetDTM;->item(I)I +Lorg/apache/xpath/objects/XBoolean;->(Z)V +Lorg/apache/xpath/objects/XBoolean;->bool()Z +Lorg/apache/xpath/objects/XBoolean;->str()Ljava/lang/String; +Lorg/apache/xpath/objects/XBooleanStatic;->(Z)V +Lorg/apache/xpath/objects/XNodeSet;->(ILorg/apache/xml/dtm/DTMManager;)V +Lorg/apache/xpath/objects/XNodeSet;->(Lorg/apache/xml/dtm/DTMIterator;)V +Lorg/apache/xpath/objects/XNodeSet;->(Lorg/apache/xml/dtm/DTMManager;)V +Lorg/apache/xpath/objects/XNodeSet;->iterRaw()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xpath/objects/XNodeSet;->mutableNodeset()Lorg/apache/xpath/NodeSetDTM; +Lorg/apache/xpath/objects/XNodeSet;->nodelist()Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/objects/XNumber;->(D)V +Lorg/apache/xpath/objects/XNumber;->num()D +Lorg/apache/xpath/objects/XNumber;->str()Ljava/lang/String; +Lorg/apache/xpath/objects/XObject;->bool()Z +Lorg/apache/xpath/objects/XObject;->create(Ljava/lang/Object;)Lorg/apache/xpath/objects/XObject; +Lorg/apache/xpath/objects/XObject;->getType()I +Lorg/apache/xpath/objects/XObject;->getTypeString()Ljava/lang/String; +Lorg/apache/xpath/objects/XObject;->iter()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xpath/objects/XObject;->nodelist()Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/objects/XObject;->nodeset()Lorg/w3c/dom/traversal/NodeIterator; +Lorg/apache/xpath/objects/XObject;->num()D +Lorg/apache/xpath/objects/XObject;->object()Ljava/lang/Object; +Lorg/apache/xpath/objects/XObject;->str()Ljava/lang/String; +Lorg/apache/xpath/objects/XObject;->xstr()Lorg/apache/xml/utils/XMLString; +Lorg/apache/xpath/objects/XRTreeFrag;->(ILorg/apache/xpath/XPathContext;)V +Lorg/apache/xpath/objects/XRTreeFrag;->asNodeIterator()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xpath/objects/XRTreeFrag;->convertToNodeset()Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/objects/XString;->(Ljava/lang/String;)V +Lorg/apache/xpath/objects/XString;->num()D +Lorg/apache/xpath/patterns/NodeTest;->setWhatToShow(I)V +Lorg/apache/xpath/res/XPATHErrorResources;->()V +Lorg/apache/xpath/res/XPATHMessages;->createXPATHMessage(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +Lorg/apache/xpath/XPath;->(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Lorg/apache/xml/utils/PrefixResolver;I)V +Lorg/apache/xpath/XPath;->(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Lorg/apache/xml/utils/PrefixResolver;ILjavax/xml/transform/ErrorListener;)V +Lorg/apache/xpath/XPath;->execute(Lorg/apache/xpath/XPathContext;ILorg/apache/xml/utils/PrefixResolver;)Lorg/apache/xpath/objects/XObject; +Lorg/apache/xpath/XPath;->execute(Lorg/apache/xpath/XPathContext;Lorg/w3c/dom/Node;Lorg/apache/xml/utils/PrefixResolver;)Lorg/apache/xpath/objects/XObject; +Lorg/apache/xpath/XPath;->getPatternString()Ljava/lang/String; +Lorg/apache/xpath/XPathAPI;->selectNodeList(Lorg/w3c/dom/Node;Ljava/lang/String;)Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/XPathAPI;->selectNodeList(Lorg/w3c/dom/Node;Ljava/lang/String;Lorg/w3c/dom/Node;)Lorg/w3c/dom/NodeList; +Lorg/apache/xpath/XPathAPI;->selectSingleNode(Lorg/w3c/dom/Node;Ljava/lang/String;)Lorg/w3c/dom/Node; +Lorg/apache/xpath/XPathAPI;->selectSingleNode(Lorg/w3c/dom/Node;Ljava/lang/String;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node; +Lorg/apache/xpath/XPathContext$XPathExpressionContext;->getDTMManager()Lorg/apache/xml/dtm/DTMManager; +Lorg/apache/xpath/XPathContext$XPathExpressionContext;->getXPathContext()Lorg/apache/xpath/XPathContext; +Lorg/apache/xpath/XPathContext;->()V +Lorg/apache/xpath/XPathContext;->(Ljava/lang/Object;)V +Lorg/apache/xpath/XPathContext;->getAxesIteratorStackStacks()Ljava/util/Stack; +Lorg/apache/xpath/XPathContext;->getContextNodeList()Lorg/apache/xml/dtm/DTMIterator; +Lorg/apache/xpath/XPathContext;->getContextNodeListsStack()Ljava/util/Stack; +Lorg/apache/xpath/XPathContext;->getCurrentExpressionNodeStack()Lorg/apache/xml/utils/IntStack; +Lorg/apache/xpath/XPathContext;->getCurrentNode()I +Lorg/apache/xpath/XPathContext;->getCurrentNodeStack()Lorg/apache/xml/utils/IntStack; +Lorg/apache/xpath/XPathContext;->getDTM(I)Lorg/apache/xml/dtm/DTM; +Lorg/apache/xpath/XPathContext;->getDTMHandleFromNode(Lorg/w3c/dom/Node;)I +Lorg/apache/xpath/XPathContext;->getDTMManager()Lorg/apache/xml/dtm/DTMManager; +Lorg/apache/xpath/XPathContext;->getExpressionContext()Lorg/apache/xalan/extensions/ExpressionContext; +Lorg/apache/xpath/XPathContext;->getNamespaceContext()Lorg/apache/xml/utils/PrefixResolver; +Lorg/apache/xpath/XPathContext;->getOwnerObject()Ljava/lang/Object; +Lorg/apache/xpath/XPathContext;->getSAXLocator()Ljavax/xml/transform/SourceLocator; +Lorg/apache/xpath/XPathContext;->getVarStack()Lorg/apache/xpath/VariableStack; +Lorg/apache/xpath/XPathContext;->m_dtmManager:Lorg/apache/xml/dtm/DTMManager; +Lorg/apache/xpath/XPathContext;->popContextNodeList()V +Lorg/apache/xpath/XPathContext;->popCurrentNode()V +Lorg/apache/xpath/XPathContext;->pushContextNodeList(Lorg/apache/xml/dtm/DTMIterator;)V +Lorg/apache/xpath/XPathContext;->pushCurrentNode(I)V +Lorg/apache/xpath/XPathContext;->reset()V +Lorg/apache/xpath/XPathContext;->setAxesIteratorStackStacks(Ljava/util/Stack;)V +Lorg/apache/xpath/XPathContext;->setContextNodeListsStack(Ljava/util/Stack;)V +Lorg/apache/xpath/XPathContext;->setCurrentExpressionNodeStack(Lorg/apache/xml/utils/IntStack;)V +Lorg/apache/xpath/XPathContext;->setCurrentNodeStack(Lorg/apache/xml/utils/IntStack;)V +Lorg/apache/xpath/XPathContext;->setSecureProcessing(Z)V +Lorg/apache/xpath/XPathContext;->setVarStack(Lorg/apache/xpath/VariableStack;)V +Lorg/ccil/cowan/tagsoup/AttributesImpl;->(Lorg/xml/sax/Attributes;)V +Lorg/ccil/cowan/tagsoup/AttributesImpl;->addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V Lorg/ccil/cowan/tagsoup/AttributesImpl;->data:[Ljava/lang/String; Lorg/ccil/cowan/tagsoup/AttributesImpl;->length:I +Lorg/ccil/cowan/tagsoup/AttributesImpl;->setAttribute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/ccil/cowan/tagsoup/AttributesImpl;->setValue(ILjava/lang/String;)V +Lorg/ccil/cowan/tagsoup/AutoDetector;->autoDetectingReader(Ljava/io/InputStream;)Ljava/io/Reader; +Lorg/ccil/cowan/tagsoup/Element;->(Lorg/ccil/cowan/tagsoup/ElementType;Z)V +Lorg/ccil/cowan/tagsoup/Element;->anonymize()V +Lorg/ccil/cowan/tagsoup/Element;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl; +Lorg/ccil/cowan/tagsoup/Element;->canContain(Lorg/ccil/cowan/tagsoup/Element;)Z +Lorg/ccil/cowan/tagsoup/Element;->clean()V +Lorg/ccil/cowan/tagsoup/Element;->flags()I +Lorg/ccil/cowan/tagsoup/Element;->localName()Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Element;->name()Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Element;->namespace()Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Element;->next()Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Element;->parent()Lorg/ccil/cowan/tagsoup/ElementType; +Lorg/ccil/cowan/tagsoup/Element;->preclosed:Z +Lorg/ccil/cowan/tagsoup/Element;->setAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/ccil/cowan/tagsoup/Element;->setNext(Lorg/ccil/cowan/tagsoup/Element;)V +Lorg/ccil/cowan/tagsoup/Element;->theAtts:Lorg/ccil/cowan/tagsoup/AttributesImpl; +Lorg/ccil/cowan/tagsoup/Element;->theNext:Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Element;->theType:Lorg/ccil/cowan/tagsoup/ElementType; +Lorg/ccil/cowan/tagsoup/ElementType;->(Ljava/lang/String;IIILorg/ccil/cowan/tagsoup/Schema;)V +Lorg/ccil/cowan/tagsoup/ElementType;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl; +Lorg/ccil/cowan/tagsoup/ElementType;->setAttribute(Lorg/ccil/cowan/tagsoup/AttributesImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V Lorg/ccil/cowan/tagsoup/ElementType;->theAtts:Lorg/ccil/cowan/tagsoup/AttributesImpl; Lorg/ccil/cowan/tagsoup/ElementType;->theFlags:I Lorg/ccil/cowan/tagsoup/ElementType;->theLocalName:Ljava/lang/String; @@ -2804,185 +5453,500 @@ Lorg/ccil/cowan/tagsoup/ElementType;->theName:Ljava/lang/String; Lorg/ccil/cowan/tagsoup/ElementType;->theNamespace:Ljava/lang/String; Lorg/ccil/cowan/tagsoup/ElementType;->theParent:Lorg/ccil/cowan/tagsoup/ElementType; Lorg/ccil/cowan/tagsoup/ElementType;->theSchema:Lorg/ccil/cowan/tagsoup/Schema; +Lorg/ccil/cowan/tagsoup/HTMLScanner;->()V Lorg/ccil/cowan/tagsoup/HTMLSchema;->()V +Lorg/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl;->()V +Lorg/ccil/cowan/tagsoup/jaxp/SAXParserImpl;->()V +Lorg/ccil/cowan/tagsoup/jaxp/SAXParserImpl;->newInstance(Ljava/util/Map;)Lorg/ccil/cowan/tagsoup/jaxp/SAXParserImpl; Lorg/ccil/cowan/tagsoup/Parser;->()V +Lorg/ccil/cowan/tagsoup/Parser;->bogonsEmpty:Z +Lorg/ccil/cowan/tagsoup/Parser;->CDATAElements:Z +Lorg/ccil/cowan/tagsoup/Parser;->cleanPublicid(Ljava/lang/String;)Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->defaultAttributes:Z +Lorg/ccil/cowan/tagsoup/Parser;->etagchars:[C +Lorg/ccil/cowan/tagsoup/Parser;->expandEntities(Ljava/lang/String;)Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->getInputStream(Ljava/lang/String;Ljava/lang/String;)Ljava/io/InputStream; +Lorg/ccil/cowan/tagsoup/Parser;->ignorableWhitespace:Z +Lorg/ccil/cowan/tagsoup/Parser;->ignoreBogons:Z +Lorg/ccil/cowan/tagsoup/Parser;->lookupEntity([CII)I +Lorg/ccil/cowan/tagsoup/Parser;->makeName([CII)Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->pop()V +Lorg/ccil/cowan/tagsoup/Parser;->push(Lorg/ccil/cowan/tagsoup/Element;)V +Lorg/ccil/cowan/tagsoup/Parser;->rectify(Lorg/ccil/cowan/tagsoup/Element;)V +Lorg/ccil/cowan/tagsoup/Parser;->restart(Lorg/ccil/cowan/tagsoup/Element;)V +Lorg/ccil/cowan/tagsoup/Parser;->restartablyPop()V +Lorg/ccil/cowan/tagsoup/Parser;->rootBogons:Z +Lorg/ccil/cowan/tagsoup/Parser;->schemaProperty:Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->split(Ljava/lang/String;)[Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->theAttributeName:Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->theAutoDetector:Lorg/ccil/cowan/tagsoup/AutoDetector; +Lorg/ccil/cowan/tagsoup/Parser;->theContentHandler:Lorg/xml/sax/ContentHandler; +Lorg/ccil/cowan/tagsoup/Parser;->theDoctypeIsPresent:Z +Lorg/ccil/cowan/tagsoup/Parser;->theDoctypeSystemId:Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->theFeatures:Ljava/util/HashMap; +Lorg/ccil/cowan/tagsoup/Parser;->theLexicalHandler:Lorg/xml/sax/ext/LexicalHandler; +Lorg/ccil/cowan/tagsoup/Parser;->theNewElement:Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Parser;->thePCDATA:Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Parser;->thePITarget:Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->theSaved:Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Parser;->theScanner:Lorg/ccil/cowan/tagsoup/Scanner; +Lorg/ccil/cowan/tagsoup/Parser;->theSchema:Lorg/ccil/cowan/tagsoup/Schema; +Lorg/ccil/cowan/tagsoup/Parser;->theStack:Lorg/ccil/cowan/tagsoup/Element; +Lorg/ccil/cowan/tagsoup/Parser;->trimquotes(Ljava/lang/String;)Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Parser;->virginStack:Z +Lorg/ccil/cowan/tagsoup/PYXScanner;->()V +Lorg/ccil/cowan/tagsoup/PYXWriter;->(Ljava/io/Writer;)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->aname([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->aval([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->entity([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->eof([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->etag([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->gi([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->pcdata([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->pi([CII)V +Lorg/ccil/cowan/tagsoup/ScanHandler;->stagc([CII)V +Lorg/ccil/cowan/tagsoup/Scanner;->startCDATA()V +Lorg/ccil/cowan/tagsoup/Schema;->elementType(Ljava/lang/String;III)V +Lorg/ccil/cowan/tagsoup/Schema;->getElementType(Ljava/lang/String;)Lorg/ccil/cowan/tagsoup/ElementType; +Lorg/ccil/cowan/tagsoup/Schema;->getEntity(Ljava/lang/String;)I +Lorg/ccil/cowan/tagsoup/Schema;->getPrefix()Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Schema;->getURI()Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/Schema;->parent(Ljava/lang/String;Ljava/lang/String;)V Lorg/ccil/cowan/tagsoup/Schema;->theElementTypes:Ljava/util/HashMap; Lorg/ccil/cowan/tagsoup/Schema;->theEntities:Ljava/util/HashMap; Lorg/ccil/cowan/tagsoup/Schema;->thePrefix:Ljava/lang/String; Lorg/ccil/cowan/tagsoup/Schema;->theRoot:Lorg/ccil/cowan/tagsoup/ElementType; Lorg/ccil/cowan/tagsoup/Schema;->theURI:Ljava/lang/String; -Lorg/json/JSONArray;->values:Ljava/util/List; -Lorg/json/JSONArray;->writeTo(Lorg/json/JSONStringer;)V -Lorg/json/JSONObject;->append(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; -Lorg/json/JSONObject;->checkName(Ljava/lang/String;)Ljava/lang/String; -Lorg/json/JSONObject;->keySet()Ljava/util/Set; -Lorg/json/JSONObject;->nameValuePairs:Ljava/util/LinkedHashMap; -Lorg/json/JSONObject;->NEGATIVE_ZERO:Ljava/lang/Double; -Lorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V -Lorg/json/JSONStringer;->(I)V -Lorg/json/JSONStringer;->beforeKey()V -Lorg/json/JSONStringer;->beforeValue()V -Lorg/json/JSONStringer;->close(Lorg/json/JSONStringer$Scope;Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer; -Lorg/json/JSONStringer;->indent:Ljava/lang/String; -Lorg/json/JSONStringer;->newline()V -Lorg/json/JSONStringer;->open(Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer; -Lorg/json/JSONStringer;->out:Ljava/lang/StringBuilder; -Lorg/json/JSONStringer;->peek()Lorg/json/JSONStringer$Scope; -Lorg/json/JSONStringer;->replaceTop(Lorg/json/JSONStringer$Scope;)V -Lorg/json/JSONStringer;->stack:Ljava/util/List; -Lorg/json/JSONStringer;->string(Ljava/lang/String;)V -Lorg/json/JSONTokener;->in:Ljava/lang/String; -Lorg/json/JSONTokener;->nextCleanInternal()I -Lorg/json/JSONTokener;->nextToInternal(Ljava/lang/String;)Ljava/lang/String; -Lorg/json/JSONTokener;->pos:I -Lorg/json/JSONTokener;->readArray()Lorg/json/JSONArray; -Lorg/json/JSONTokener;->readEscapeCharacter()C -Lorg/json/JSONTokener;->readLiteral()Ljava/lang/Object; -Lorg/json/JSONTokener;->readObject()Lorg/json/JSONObject; -Lorg/json/JSONTokener;->skipToEndOfLine()V -Lorg/w3c/dom/ls/LSSerializerFilter;->getWhatToShow()I -Lorg/w3c/dom/traversal/NodeFilter;->acceptNode(Lorg/w3c/dom/Node;)S -Lorg/w3c/dom/traversal/NodeIterator;->detach()V -Lorg/w3c/dom/traversal/NodeIterator;->nextNode()Lorg/w3c/dom/Node; -Lorg/xml/sax/ext/Attributes2Impl;->declared:[Z -Lorg/xml/sax/ext/Attributes2Impl;->specified:[Z -Lorg/xml/sax/ext/Locator2Impl;->encoding:Ljava/lang/String; -Lorg/xml/sax/ext/Locator2Impl;->version:Ljava/lang/String; -Lorg/xml/sax/helpers/AttributesImpl;->badIndex(I)V -Lorg/xml/sax/helpers/AttributesImpl;->data:[Ljava/lang/String; -Lorg/xml/sax/helpers/AttributesImpl;->ensureCapacity(I)V -Lorg/xml/sax/helpers/AttributesImpl;->length:I -Lorg/xml/sax/helpers/LocatorImpl;->columnNumber:I -Lorg/xml/sax/helpers/LocatorImpl;->lineNumber:I -Lorg/xml/sax/helpers/LocatorImpl;->publicId:Ljava/lang/String; -Lorg/xml/sax/helpers/LocatorImpl;->systemId:Ljava/lang/String; -Lorg/xml/sax/helpers/NamespaceSupport;->contextPos:I -Lorg/xml/sax/helpers/NamespaceSupport;->contexts:[Lorg/xml/sax/helpers/NamespaceSupport$Context; -Lorg/xml/sax/helpers/NamespaceSupport;->currentContext:Lorg/xml/sax/helpers/NamespaceSupport$Context; -Lorg/xml/sax/helpers/NamespaceSupport;->EMPTY_ENUMERATION:Ljava/util/Enumeration; -Lorg/xml/sax/helpers/NamespaceSupport;->namespaceDeclUris:Z -Lorg/xml/sax/helpers/ParserAdapter;->attAdapter:Lorg/xml/sax/helpers/ParserAdapter$AttributeListAdapter; -Lorg/xml/sax/helpers/ParserAdapter;->atts:Lorg/xml/sax/helpers/AttributesImpl; -Lorg/xml/sax/helpers/ParserAdapter;->checkNotParsing(Ljava/lang/String;Ljava/lang/String;)V -Lorg/xml/sax/helpers/ParserAdapter;->contentHandler:Lorg/xml/sax/ContentHandler; -Lorg/xml/sax/helpers/ParserAdapter;->dtdHandler:Lorg/xml/sax/DTDHandler; -Lorg/xml/sax/helpers/ParserAdapter;->entityResolver:Lorg/xml/sax/EntityResolver; -Lorg/xml/sax/helpers/ParserAdapter;->errorHandler:Lorg/xml/sax/ErrorHandler; -Lorg/xml/sax/helpers/ParserAdapter;->locator:Lorg/xml/sax/Locator; -Lorg/xml/sax/helpers/ParserAdapter;->makeException(Ljava/lang/String;)Lorg/xml/sax/SAXParseException; -Lorg/xml/sax/helpers/ParserAdapter;->nameParts:[Ljava/lang/String; -Lorg/xml/sax/helpers/ParserAdapter;->namespaces:Z -Lorg/xml/sax/helpers/ParserAdapter;->nsSupport:Lorg/xml/sax/helpers/NamespaceSupport; -Lorg/xml/sax/helpers/ParserAdapter;->parser:Lorg/xml/sax/Parser; -Lorg/xml/sax/helpers/ParserAdapter;->parsing:Z -Lorg/xml/sax/helpers/ParserAdapter;->prefixes:Z -Lorg/xml/sax/helpers/ParserAdapter;->processName(Ljava/lang/String;ZZ)[Ljava/lang/String; -Lorg/xml/sax/helpers/ParserAdapter;->reportError(Ljava/lang/String;)V -Lorg/xml/sax/helpers/ParserAdapter;->setup(Lorg/xml/sax/Parser;)V -Lorg/xml/sax/helpers/ParserAdapter;->setupParser()V -Lorg/xml/sax/helpers/ParserAdapter;->uris:Z -Lorg/xml/sax/helpers/XMLFilterImpl;->contentHandler:Lorg/xml/sax/ContentHandler; -Lorg/xml/sax/helpers/XMLFilterImpl;->dtdHandler:Lorg/xml/sax/DTDHandler; -Lorg/xml/sax/helpers/XMLFilterImpl;->entityResolver:Lorg/xml/sax/EntityResolver; -Lorg/xml/sax/helpers/XMLFilterImpl;->errorHandler:Lorg/xml/sax/ErrorHandler; -Lorg/xml/sax/helpers/XMLFilterImpl;->locator:Lorg/xml/sax/Locator; -Lorg/xml/sax/helpers/XMLFilterImpl;->parent:Lorg/xml/sax/XMLReader; -Lorg/xml/sax/helpers/XMLFilterImpl;->setupParse()V -Lorg/xml/sax/helpers/XMLReaderAdapter;->documentHandler:Lorg/xml/sax/DocumentHandler; -Lorg/xml/sax/helpers/XMLReaderAdapter;->qAtts:Lorg/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter; -Lorg/xml/sax/helpers/XMLReaderAdapter;->setup(Lorg/xml/sax/XMLReader;)V -Lorg/xml/sax/helpers/XMLReaderAdapter;->setupXMLReader()V -Lorg/xml/sax/helpers/XMLReaderAdapter;->xmlReader:Lorg/xml/sax/XMLReader; -Lorg/xml/sax/helpers/XMLReaderFactory;->loadClass(Ljava/lang/ClassLoader;Ljava/lang/String;)Lorg/xml/sax/XMLReader; -Lorg/xml/sax/InputSource;->byteStream:Ljava/io/InputStream; -Lorg/xml/sax/InputSource;->characterStream:Ljava/io/Reader; -Lorg/xml/sax/InputSource;->encoding:Ljava/lang/String; -Lorg/xml/sax/InputSource;->publicId:Ljava/lang/String; -Lorg/xml/sax/InputSource;->systemId:Ljava/lang/String; -Lorg/xml/sax/SAXException;->exception:Ljava/lang/Exception; -Lorg/xml/sax/SAXParseException;->columnNumber:I -Lorg/xml/sax/SAXParseException;->init(Ljava/lang/String;Ljava/lang/String;II)V -Lorg/xml/sax/SAXParseException;->lineNumber:I -Lorg/xml/sax/SAXParseException;->publicId:Ljava/lang/String; -Lorg/xml/sax/SAXParseException;->systemId:Ljava/lang/String; -Lsun/misc/Cleaner;->clean()V -Lsun/misc/Unsafe;->addressSize()I -Lsun/misc/Unsafe;->allocateInstance(Ljava/lang/Class;)Ljava/lang/Object; -Lsun/misc/Unsafe;->allocateMemory(J)J -Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I -Lsun/misc/Unsafe;->arrayIndexScale(Ljava/lang/Class;)I -Lsun/misc/Unsafe;->compareAndSwapInt(Ljava/lang/Object;JII)Z -Lsun/misc/Unsafe;->compareAndSwapLong(Ljava/lang/Object;JJJ)Z -Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z -Lsun/misc/Unsafe;->copyMemory(JJJ)V -Lsun/misc/Unsafe;->copyMemoryFromPrimitiveArray(Ljava/lang/Object;JJJ)V -Lsun/misc/Unsafe;->copyMemoryToPrimitiveArray(JLjava/lang/Object;JJ)V -Lsun/misc/Unsafe;->freeMemory(J)V -Lsun/misc/Unsafe;->fullFence()V -Lsun/misc/Unsafe;->getAndAddInt(Ljava/lang/Object;JI)I -Lsun/misc/Unsafe;->getAndAddLong(Ljava/lang/Object;JJ)J -Lsun/misc/Unsafe;->getAndSetInt(Ljava/lang/Object;JI)I -Lsun/misc/Unsafe;->getAndSetLong(Ljava/lang/Object;JJ)J -Lsun/misc/Unsafe;->getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object; -Lsun/misc/Unsafe;->getArrayBaseOffsetForComponentType(Ljava/lang/Class;)I -Lsun/misc/Unsafe;->getArrayIndexScaleForComponentType(Ljava/lang/Class;)I -Lsun/misc/Unsafe;->getBoolean(Ljava/lang/Object;J)Z -Lsun/misc/Unsafe;->getByte(J)B -Lsun/misc/Unsafe;->getByte(Ljava/lang/Object;J)B -Lsun/misc/Unsafe;->getChar(J)C -Lsun/misc/Unsafe;->getChar(Ljava/lang/Object;J)C -Lsun/misc/Unsafe;->getDouble(J)D -Lsun/misc/Unsafe;->getDouble(Ljava/lang/Object;J)D -Lsun/misc/Unsafe;->getFloat(J)F -Lsun/misc/Unsafe;->getFloat(Ljava/lang/Object;J)F -Lsun/misc/Unsafe;->getInt(J)I -Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I -Lsun/misc/Unsafe;->getIntVolatile(Ljava/lang/Object;J)I -Lsun/misc/Unsafe;->getLong(J)J -Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J -Lsun/misc/Unsafe;->getLongVolatile(Ljava/lang/Object;J)J -Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; -Lsun/misc/Unsafe;->getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object; -Lsun/misc/Unsafe;->getShort(J)S -Lsun/misc/Unsafe;->getShort(Ljava/lang/Object;J)S -Lsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe; -Lsun/misc/Unsafe;->INVALID_FIELD_OFFSET:I -Lsun/misc/Unsafe;->loadFence()V -Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J -Lsun/misc/Unsafe;->pageSize()I -Lsun/misc/Unsafe;->park(ZJ)V -Lsun/misc/Unsafe;->putBoolean(Ljava/lang/Object;JZ)V -Lsun/misc/Unsafe;->putByte(JB)V -Lsun/misc/Unsafe;->putByte(Ljava/lang/Object;JB)V -Lsun/misc/Unsafe;->putChar(JC)V -Lsun/misc/Unsafe;->putChar(Ljava/lang/Object;JC)V -Lsun/misc/Unsafe;->putDouble(JD)V -Lsun/misc/Unsafe;->putDouble(Ljava/lang/Object;JD)V -Lsun/misc/Unsafe;->putFloat(JF)V -Lsun/misc/Unsafe;->putFloat(Ljava/lang/Object;JF)V -Lsun/misc/Unsafe;->putInt(JI)V -Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V -Lsun/misc/Unsafe;->putIntVolatile(Ljava/lang/Object;JI)V -Lsun/misc/Unsafe;->putLong(JJ)V -Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V -Lsun/misc/Unsafe;->putLongVolatile(Ljava/lang/Object;JJ)V -Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V -Lsun/misc/Unsafe;->putObjectVolatile(Ljava/lang/Object;JLjava/lang/Object;)V -Lsun/misc/Unsafe;->putOrderedInt(Ljava/lang/Object;JI)V -Lsun/misc/Unsafe;->putOrderedLong(Ljava/lang/Object;JJ)V -Lsun/misc/Unsafe;->putOrderedObject(Ljava/lang/Object;JLjava/lang/Object;)V -Lsun/misc/Unsafe;->putShort(JS)V -Lsun/misc/Unsafe;->putShort(Ljava/lang/Object;JS)V -Lsun/misc/Unsafe;->setMemory(JJB)V -Lsun/misc/Unsafe;->storeFence()V -Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe; -Lsun/misc/Unsafe;->THE_ONE:Lsun/misc/Unsafe; -Lsun/misc/Unsafe;->unpark(Ljava/lang/Object;)V -Lsun/misc/URLClassPath$JarLoader;->getJarFile()Ljava/util/jar/JarFile; -Lsun/misc/URLClassPath;->lmap:Ljava/util/HashMap; -Lsun/misc/URLClassPath;->loaders:Ljava/util/ArrayList; -Lsun/misc/URLClassPath;->urls:Ljava/util/Stack; -Lsun/nio/ch/DirectBuffer;->cleaner()Lsun/misc/Cleaner; -Lsun/security/x509/AlgorithmId;->get(Ljava/lang/String;)Lsun/security/x509/AlgorithmId; -Lsun/security/x509/AlgorithmId;->getName()Ljava/lang/String; -Lsun/security/x509/AVA;->hasRFC2253Keyword()Z +Lorg/ccil/cowan/tagsoup/XMLWriter;->(Ljava/io/Writer;)V +Lorg/ccil/cowan/tagsoup/XMLWriter;->htmlMode:Z +Lorg/ccil/cowan/tagsoup/XMLWriter;->setOutput(Ljava/io/Writer;)V +Lorg/ccil/cowan/tagsoup/XMLWriter;->setOutputProperty(Ljava/lang/String;Ljava/lang/String;)V +Lorg/ccil/cowan/tagsoup/XMLWriter;->setPrefix(Ljava/lang/String;Ljava/lang/String;)V +Lorg/xml/sax/helpers/NamespaceSupport$Context;->(Lorg/xml/sax/helpers/NamespaceSupport;)V +Lorg/xml/sax/helpers/ParserAdapter$AttributeListAdapter;->(Lorg/xml/sax/helpers/ParserAdapter;)V +Lsun/misc/ASCIICaseInsensitiveComparator;->CASE_INSENSITIVE_ORDER:Ljava/util/Comparator; +Lsun/misc/ASCIICaseInsensitiveComparator;->lowerCaseHashCode(Ljava/lang/String;)I +Lsun/misc/BASE64Decoder;->()V +Lsun/misc/BASE64Decoder;->pem_convert_array:[B +Lsun/misc/BASE64Encoder;->()V +Lsun/misc/BASE64Encoder;->pem_array:[C +Lsun/misc/CEFormatException;->(Ljava/lang/String;)V +Lsun/misc/CEStreamExhausted;->()V +Lsun/misc/CharacterDecoder;->()V +Lsun/misc/CharacterEncoder;->()V +Lsun/misc/CharacterEncoder;->encodeBuffer([B)Ljava/lang/String; +Lsun/misc/CharacterEncoder;->encodeBufferPrefix(Ljava/io/OutputStream;)V +Lsun/misc/CharacterEncoder;->pStream:Ljava/io/PrintStream; +Lsun/misc/Cleaner;->create(Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner; +Lsun/misc/FloatingDecimal;->$assertionsDisabled:Z +Lsun/misc/FloatingDecimal;->getHexDigit(Ljava/lang/String;I)I +Lsun/misc/FloatingDecimal;->stripLeadingZeros(Ljava/lang/String;)Ljava/lang/String; +Lsun/misc/FormattedFloatingDecimal$Form;->COMPATIBLE:Lsun/misc/FormattedFloatingDecimal$Form; +Lsun/misc/FormattedFloatingDecimal$Form;->DECIMAL_FLOAT:Lsun/misc/FormattedFloatingDecimal$Form; +Lsun/misc/FormattedFloatingDecimal$Form;->SCIENTIFIC:Lsun/misc/FormattedFloatingDecimal$Form; +Lsun/misc/FormattedFloatingDecimal;->$assertionsDisabled:Z +Lsun/misc/FpUtils;->$assertionsDisabled:Z +Lsun/misc/FpUtils;->rawCopySign(DD)D +Lsun/misc/HexDumpEncoder;->()V +Lsun/misc/HexDumpEncoder;->currentByte:I +Lsun/misc/HexDumpEncoder;->offset:I +Lsun/misc/HexDumpEncoder;->thisLine:[B +Lsun/misc/HexDumpEncoder;->thisLineLength:I +Lsun/misc/IOUtils;->readFully(Ljava/io/InputStream;IZ)[B +Lsun/misc/JarIndex;->([Ljava/lang/String;)V +Lsun/misc/JarIndex;->write(Ljava/io/OutputStream;)V +Lsun/misc/MessageUtils;->()V +Lsun/misc/MetaIndex;->forJar(Ljava/io/File;)Lsun/misc/MetaIndex; +Lsun/misc/MetaIndex;->registerDirectory(Ljava/io/File;)V +Lsun/misc/VM;->maxDirectMemory()J +Lsun/net/ftp/FtpClient;->()V +Lsun/net/util/IPAddressUtil;->isIPv4LiteralAddress(Ljava/lang/String;)Z +Lsun/net/util/IPAddressUtil;->isIPv6LiteralAddress(Ljava/lang/String;)Z +Lsun/net/www/MessageHeader;->()V +Lsun/net/www/MessageHeader;->(Ljava/io/InputStream;)V +Lsun/net/www/MessageHeader;->add(Ljava/lang/String;Ljava/lang/String;)V +Lsun/net/www/MessageHeader;->findValue(Ljava/lang/String;)Ljava/lang/String; +Lsun/net/www/MessageHeader;->prepend(Ljava/lang/String;Ljava/lang/String;)V +Lsun/net/www/MessageHeader;->print(Ljava/io/PrintStream;)V +Lsun/net/www/MessageHeader;->set(Ljava/lang/String;Ljava/lang/String;)V +Lsun/net/www/ParseUtil;->decode(Ljava/lang/String;)Ljava/lang/String; +Lsun/net/www/ParseUtil;->encodePath(Ljava/lang/String;Z)Ljava/lang/String; +Lsun/net/www/ParseUtil;->fileToEncodedURL(Ljava/io/File;)Ljava/net/URL; +Lsun/net/www/URLConnection;->(Ljava/net/URL;)V +Lsun/net/www/URLConnection;->setProperties(Lsun/net/www/MessageHeader;)V +Lsun/nio/ch/DirectBuffer;->address()J +Lsun/nio/ch/FileChannelImpl;->unmap0(JJ)I +Lsun/nio/ch/SelectorImpl;->publicSelectedKeys:Ljava/util/Set; +Lsun/nio/ch/SelectorImpl;->selectedKeys:Ljava/util/Set; +Lsun/nio/cs/HistoricallyNamedCharset;->historicalName()Ljava/lang/String; +Lsun/nio/cs/ThreadLocalCoders;->decoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetDecoder; +Lsun/nio/fs/BasicFileAttributesHolder;->get()Ljava/nio/file/attribute/BasicFileAttributes; +Lsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/Class;)V +Lsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/String;)V +Lsun/reflect/misc/ReflectUtil;->isPackageAccessible(Ljava/lang/Class;)Z +Lsun/reflect/misc/ReflectUtil;->isSubclassOf(Ljava/lang/Class;Ljava/lang/Class;)Z +Lsun/reflect/Reflection;->ensureMemberAccess(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)V +Lsun/reflect/Reflection;->isSubclassOf(Ljava/lang/Class;Ljava/lang/Class;)Z +Lsun/security/action/GetBooleanAction;->(Ljava/lang/String;)V +Lsun/security/action/GetIntegerAction;->(Ljava/lang/String;I)V +Lsun/security/action/GetPropertyAction;->(Ljava/lang/String;)V +Lsun/security/action/GetPropertyAction;->(Ljava/lang/String;Ljava/lang/String;)V +Lsun/security/jca/GetInstance$Instance;->impl:Ljava/lang/Object; +Lsun/security/jca/GetInstance$Instance;->provider:Ljava/security/Provider; +Lsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Lsun/security/jca/GetInstance$Instance; +Lsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance; +Lsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Ljava/security/Provider;)Lsun/security/jca/GetInstance$Instance; +Lsun/security/jca/JCAUtil;->getSecureRandom()Ljava/security/SecureRandom; +Lsun/security/jca/ProviderConfig;->argument:Ljava/lang/String; +Lsun/security/jca/ProviderConfig;->CL_STRING:[Ljava/lang/Class; +Lsun/security/jca/ProviderConfig;->disableLoad()V +Lsun/security/jca/ProviderConfig;->hasArgument()Z +Lsun/security/jca/ProviderList;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; +Lsun/security/jca/Providers;->getProviderList()Lsun/security/jca/ProviderList; +Lsun/security/jca/Providers;->startJarVerification()Ljava/lang/Object; +Lsun/security/jca/Providers;->stopJarVerification(Ljava/lang/Object;)V +Lsun/security/pkcs/ContentInfo;->(Lsun/security/util/ObjectIdentifier;Lsun/security/util/DerValue;)V +Lsun/security/pkcs/ContentInfo;->([B)V +Lsun/security/pkcs/ContentInfo;->DATA_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/ContentInfo;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/pkcs/ContentInfo;->getData()[B +Lsun/security/pkcs/ParsingException;->(Ljava/lang/String;)V +Lsun/security/pkcs/PKCS7;->([B)V +Lsun/security/pkcs/PKCS7;->([Lsun/security/x509/AlgorithmId;Lsun/security/pkcs/ContentInfo;[Ljava/security/cert/X509Certificate;[Ljava/security/cert/X509CRL;[Lsun/security/pkcs/SignerInfo;)V +Lsun/security/pkcs/PKCS7;->([Lsun/security/x509/AlgorithmId;Lsun/security/pkcs/ContentInfo;[Ljava/security/cert/X509Certificate;[Lsun/security/pkcs/SignerInfo;)V +Lsun/security/pkcs/PKCS7;->encodeSignedData(Ljava/io/OutputStream;)V +Lsun/security/pkcs/PKCS7;->getCertificates()[Ljava/security/cert/X509Certificate; +Lsun/security/pkcs/PKCS7;->getContentInfo()Lsun/security/pkcs/ContentInfo; +Lsun/security/pkcs/PKCS7;->getSignerInfos()[Lsun/security/pkcs/SignerInfo; +Lsun/security/pkcs/PKCS7;->verify(Lsun/security/pkcs/SignerInfo;[B)Lsun/security/pkcs/SignerInfo; +Lsun/security/pkcs/PKCS7;->verify([B)[Lsun/security/pkcs/SignerInfo; +Lsun/security/pkcs/PKCS8Key;->()V +Lsun/security/pkcs/PKCS8Key;->algid:Lsun/security/x509/AlgorithmId; +Lsun/security/pkcs/PKCS8Key;->encodedKey:[B +Lsun/security/pkcs/PKCS8Key;->key:[B +Lsun/security/pkcs/PKCS9Attribute;->(Ljava/lang/String;Ljava/lang/Object;)V +Lsun/security/pkcs/PKCS9Attribute;->(Lsun/security/util/DerValue;)V +Lsun/security/pkcs/PKCS9Attribute;->(Lsun/security/util/ObjectIdentifier;Ljava/lang/Object;)V +Lsun/security/pkcs/PKCS9Attribute;->CONTENT_TYPE_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/PKCS9Attribute;->derEncode(Ljava/io/OutputStream;)V +Lsun/security/pkcs/PKCS9Attribute;->EMAIL_ADDRESS_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/PKCS9Attribute;->getOID()Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/PKCS9Attribute;->getValue()Ljava/lang/Object; +Lsun/security/pkcs/PKCS9Attribute;->MESSAGE_DIGEST_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/PKCS9Attribute;->SIGNING_TIME_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/pkcs/PKCS9Attributes;->(Lsun/security/util/DerInputStream;)V +Lsun/security/pkcs/PKCS9Attributes;->(Lsun/security/util/DerInputStream;Z)V +Lsun/security/pkcs/PKCS9Attributes;->([Lsun/security/pkcs/PKCS9Attribute;)V +Lsun/security/pkcs/PKCS9Attributes;->encode(BLjava/io/OutputStream;)V +Lsun/security/pkcs/PKCS9Attributes;->getAttribute(Ljava/lang/String;)Lsun/security/pkcs/PKCS9Attribute; +Lsun/security/pkcs/PKCS9Attributes;->getAttributeValue(Lsun/security/util/ObjectIdentifier;)Ljava/lang/Object; +Lsun/security/pkcs/PKCS9Attributes;->getDerEncoding()[B +Lsun/security/pkcs/SignerInfo;->(Lsun/security/x509/X500Name;Ljava/math/BigInteger;Lsun/security/x509/AlgorithmId;Lsun/security/pkcs/PKCS9Attributes;Lsun/security/x509/AlgorithmId;[BLsun/security/pkcs/PKCS9Attributes;)V +Lsun/security/pkcs/SignerInfo;->(Lsun/security/x509/X500Name;Ljava/math/BigInteger;Lsun/security/x509/AlgorithmId;Lsun/security/x509/AlgorithmId;[B)V +Lsun/security/pkcs/SignerInfo;->getCertificate(Lsun/security/pkcs/PKCS7;)Ljava/security/cert/X509Certificate; +Lsun/security/pkcs/SignerInfo;->getCertificateChain(Lsun/security/pkcs/PKCS7;)Ljava/util/ArrayList; +Lsun/security/pkcs/SignerInfo;->getDigestAlgorithmId()Lsun/security/x509/AlgorithmId; +Lsun/security/pkcs/SignerInfo;->getDigestEncryptionAlgorithmId()Lsun/security/x509/AlgorithmId; +Lsun/security/pkcs/SignerInfo;->getEncryptedDigest()[B +Lsun/security/provider/certpath/X509CertificatePair;->clearCache()V +Lsun/security/provider/certpath/X509CertPath;->(Ljava/io/InputStream;)V +Lsun/security/provider/certpath/X509CertPath;->(Ljava/io/InputStream;Ljava/lang/String;)V +Lsun/security/provider/certpath/X509CertPath;->(Ljava/util/List;)V +Lsun/security/provider/certpath/X509CertPath;->certs:Ljava/util/List; +Lsun/security/provider/certpath/X509CertPath;->getEncodingsStatic()Ljava/util/Iterator; +Lsun/security/provider/X509Factory;->addToCache(Lsun/security/util/Cache;[BLjava/lang/Object;)V +Lsun/security/provider/X509Factory;->certCache:Lsun/security/util/Cache; +Lsun/security/provider/X509Factory;->crlCache:Lsun/security/util/Cache; +Lsun/security/provider/X509Factory;->getFromCache(Lsun/security/util/Cache;[B)Ljava/lang/Object; +Lsun/security/provider/X509Factory;->intern(Ljava/security/cert/X509Certificate;)Lsun/security/x509/X509CertImpl; +Lsun/security/provider/X509Factory;->intern(Ljava/security/cert/X509CRL;)Lsun/security/x509/X509CRLImpl; +Lsun/security/timestamp/TimestampToken;->([B)V +Lsun/security/timestamp/TimestampToken;->getDate()Ljava/util/Date; +Lsun/security/timestamp/TimestampToken;->getHashAlgorithm()Lsun/security/x509/AlgorithmId; +Lsun/security/timestamp/TimestampToken;->getHashedMessage()[B +Lsun/security/timestamp/TimestampToken;->getNonce()Ljava/math/BigInteger; +Lsun/security/util/BitArray;->(I[B)V +Lsun/security/util/BitArray;->toByteArray()[B +Lsun/security/util/Cache;->()V +Lsun/security/util/Cache;->clear()V +Lsun/security/util/Cache;->get(Ljava/lang/Object;)Ljava/lang/Object; +Lsun/security/util/Cache;->newHardMemoryCache(I)Lsun/security/util/Cache; +Lsun/security/util/Cache;->put(Ljava/lang/Object;Ljava/lang/Object;)V +Lsun/security/util/Debug;->getInstance(Ljava/lang/String;)Lsun/security/util/Debug; +Lsun/security/util/Debug;->println()V +Lsun/security/util/Debug;->println(Ljava/lang/String;)V +Lsun/security/util/Debug;->toHexString(Ljava/math/BigInteger;)Ljava/lang/String; +Lsun/security/util/DerIndefLenConverter;->()V +Lsun/security/util/DerIndefLenConverter;->convert([B)[B +Lsun/security/util/DerIndefLenConverter;->data:[B +Lsun/security/util/DerIndefLenConverter;->dataPos:I +Lsun/security/util/DerIndefLenConverter;->dataSize:I +Lsun/security/util/DerIndefLenConverter;->isIndefinite(I)Z +Lsun/security/util/DerIndefLenConverter;->newData:[B +Lsun/security/util/DerIndefLenConverter;->numOfTotalLenBytes:I +Lsun/security/util/DerIndefLenConverter;->parseLength()I +Lsun/security/util/DerIndefLenConverter;->parseTag()V +Lsun/security/util/DerIndefLenConverter;->parseValue(I)V +Lsun/security/util/DerIndefLenConverter;->writeLengthAndValue()V +Lsun/security/util/DerIndefLenConverter;->writeTag()V +Lsun/security/util/DerInputStream;->([B)V +Lsun/security/util/DerInputStream;->available()I +Lsun/security/util/DerInputStream;->getBigInteger()Ljava/math/BigInteger; +Lsun/security/util/DerInputStream;->getBitString()[B +Lsun/security/util/DerInputStream;->getDerValue()Lsun/security/util/DerValue; +Lsun/security/util/DerInputStream;->getInteger()I +Lsun/security/util/DerInputStream;->getOctetString()[B +Lsun/security/util/DerInputStream;->getOID()Lsun/security/util/ObjectIdentifier; +Lsun/security/util/DerInputStream;->getSequence(I)[Lsun/security/util/DerValue; +Lsun/security/util/DerInputStream;->getSet(I)[Lsun/security/util/DerValue; +Lsun/security/util/DerInputStream;->getSet(IZ)[Lsun/security/util/DerValue; +Lsun/security/util/DerInputStream;->getUTCTime()Ljava/util/Date; +Lsun/security/util/DerInputStream;->getUTF8String()Ljava/lang/String; +Lsun/security/util/DerInputStream;->mark(I)V +Lsun/security/util/DerInputStream;->peekByte()I +Lsun/security/util/DerInputStream;->reset()V +Lsun/security/util/DerInputStream;->subStream(IZ)Lsun/security/util/DerInputStream; +Lsun/security/util/DerInputStream;->tag:B +Lsun/security/util/DerOutputStream;->()V +Lsun/security/util/DerOutputStream;->(I)V +Lsun/security/util/DerOutputStream;->putBitString([B)V +Lsun/security/util/DerOutputStream;->putBoolean(Z)V +Lsun/security/util/DerOutputStream;->putDerValue(Lsun/security/util/DerValue;)V +Lsun/security/util/DerOutputStream;->putIA5String(Ljava/lang/String;)V +Lsun/security/util/DerOutputStream;->putInteger(I)V +Lsun/security/util/DerOutputStream;->putInteger(Ljava/math/BigInteger;)V +Lsun/security/util/DerOutputStream;->putNull()V +Lsun/security/util/DerOutputStream;->putOctetString([B)V +Lsun/security/util/DerOutputStream;->putOID(Lsun/security/util/ObjectIdentifier;)V +Lsun/security/util/DerOutputStream;->putOrderedSetOf(B[Lsun/security/util/DerEncoder;)V +Lsun/security/util/DerOutputStream;->putPrintableString(Ljava/lang/String;)V +Lsun/security/util/DerOutputStream;->putSequence([Lsun/security/util/DerValue;)V +Lsun/security/util/DerOutputStream;->putUTCTime(Ljava/util/Date;)V +Lsun/security/util/DerOutputStream;->putUTF8String(Ljava/lang/String;)V +Lsun/security/util/DerOutputStream;->write(BLsun/security/util/DerOutputStream;)V +Lsun/security/util/DerOutputStream;->write(B[B)V +Lsun/security/util/DerValue;->(B[B)V +Lsun/security/util/DerValue;->(Ljava/io/InputStream;)V +Lsun/security/util/DerValue;->(Ljava/lang/String;)V +Lsun/security/util/DerValue;->([B)V +Lsun/security/util/DerValue;->([BII)V +Lsun/security/util/DerValue;->buffer:Lsun/security/util/DerInputBuffer; +Lsun/security/util/DerValue;->createTag(BZB)B +Lsun/security/util/DerValue;->data:Lsun/security/util/DerInputStream; +Lsun/security/util/DerValue;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/util/DerValue;->getAsString()Ljava/lang/String; +Lsun/security/util/DerValue;->getBigInteger()Ljava/math/BigInteger; +Lsun/security/util/DerValue;->getBitString()[B +Lsun/security/util/DerValue;->getData()Lsun/security/util/DerInputStream; +Lsun/security/util/DerValue;->getDataBytes()[B +Lsun/security/util/DerValue;->getOctetString()[B +Lsun/security/util/DerValue;->getOID()Lsun/security/util/ObjectIdentifier; +Lsun/security/util/DerValue;->getPositiveBigInteger()Ljava/math/BigInteger; +Lsun/security/util/DerValue;->getUnalignedBitString()Lsun/security/util/BitArray; +Lsun/security/util/DerValue;->isConstructed()Z +Lsun/security/util/DerValue;->isContextSpecific()Z +Lsun/security/util/DerValue;->isContextSpecific(B)Z +Lsun/security/util/DerValue;->isPrintableStringChar(C)Z +Lsun/security/util/DerValue;->resetTag(B)V +Lsun/security/util/DerValue;->tag:B +Lsun/security/util/DerValue;->toByteArray()[B +Lsun/security/util/DerValue;->toDerInputStream()Lsun/security/util/DerInputStream; +Lsun/security/util/ManifestDigester$Entry;->digest(Ljava/security/MessageDigest;)[B +Lsun/security/util/ManifestDigester$Entry;->digestWorkaround(Ljava/security/MessageDigest;)[B +Lsun/security/util/ManifestDigester;->([B)V +Lsun/security/util/ManifestDigester;->get(Ljava/lang/String;Z)Lsun/security/util/ManifestDigester$Entry; +Lsun/security/util/ManifestDigester;->manifestDigest(Ljava/security/MessageDigest;)[B +Lsun/security/util/MemoryCache$HardCacheEntry;->(Ljava/lang/Object;Ljava/lang/Object;J)V +Lsun/security/util/MemoryCache$SoftCacheEntry;->(Ljava/lang/Object;Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)V +Lsun/security/util/ObjectIdentifier;->(Ljava/lang/String;)V +Lsun/security/util/ObjectIdentifier;->([I)V +Lsun/security/util/ObjectIdentifier;->equals(Lsun/security/util/ObjectIdentifier;)Z +Lsun/security/util/ObjectIdentifier;->newInternal([I)Lsun/security/util/ObjectIdentifier; +Lsun/security/util/PropertyExpander;->expand(Ljava/lang/String;)Ljava/lang/String; +Lsun/security/util/ResourcesMgr;->getString(Ljava/lang/String;)Ljava/lang/String; +Lsun/security/util/SecurityConstants;->CREATE_CLASSLOADER_PERMISSION:Ljava/lang/RuntimePermission; +Lsun/security/util/SecurityConstants;->GET_CLASSLOADER_PERMISSION:Ljava/lang/RuntimePermission; +Lsun/security/util/SecurityConstants;->MODIFY_THREADGROUP_PERMISSION:Ljava/lang/RuntimePermission; +Lsun/security/util/SecurityConstants;->MODIFY_THREAD_PERMISSION:Ljava/lang/RuntimePermission; +Lsun/security/util/SignatureFileVerifier;->isBlockOrSF(Ljava/lang/String;)Z +Lsun/security/x509/AccessDescription;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/AccessDescription;->getAccessLocation()Lsun/security/x509/GeneralName; +Lsun/security/x509/AccessDescription;->getAccessMethod()Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->()V +Lsun/security/x509/AlgorithmId;->(Lsun/security/util/ObjectIdentifier;)V +Lsun/security/x509/AlgorithmId;->(Lsun/security/util/ObjectIdentifier;Ljava/security/AlgorithmParameters;)V +Lsun/security/x509/AlgorithmId;->derEncode(Ljava/io/OutputStream;)V +Lsun/security/x509/AlgorithmId;->DSA_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->EC_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->encode()[B +Lsun/security/x509/AlgorithmId;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/x509/AlgorithmId;->equals(Lsun/security/x509/AlgorithmId;)Z +Lsun/security/x509/AlgorithmId;->getAlgorithmId(Ljava/lang/String;)Lsun/security/x509/AlgorithmId; +Lsun/security/x509/AlgorithmId;->getDigAlgFromSigAlg(Ljava/lang/String;)Ljava/lang/String; +Lsun/security/x509/AlgorithmId;->getEncAlgFromSigAlg(Ljava/lang/String;)Ljava/lang/String; +Lsun/security/x509/AlgorithmId;->getEncodedParams()[B +Lsun/security/x509/AlgorithmId;->getOID()Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->getParameters()Ljava/security/AlgorithmParameters; +Lsun/security/x509/AlgorithmId;->MD2_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->MD5_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->params:Lsun/security/util/DerValue; +Lsun/security/x509/AlgorithmId;->parse(Lsun/security/util/DerValue;)Lsun/security/x509/AlgorithmId; +Lsun/security/x509/AlgorithmId;->RSAEncryption_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->sha1WithRSAEncryption_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->SHA256_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->SHA384_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->SHA512_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AlgorithmId;->SHA_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AttributeNameEnumeration;->()V +Lsun/security/x509/AVA;->(Lsun/security/util/ObjectIdentifier;Lsun/security/util/DerValue;)V +Lsun/security/x509/AVA;->getDerValue()Lsun/security/util/DerValue; +Lsun/security/x509/AVA;->getObjectIdentifier()Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AVA;->getValueString()Ljava/lang/String; +Lsun/security/x509/AVA;->toRFC2253CanonicalString()Ljava/lang/String; +Lsun/security/x509/AVAComparator;->INSTANCE:Ljava/util/Comparator; +Lsun/security/x509/AVAKeyword;->getOID(Ljava/lang/String;ILjava/util/Map;)Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AVAKeyword;->isCompliant(I)Z +Lsun/security/x509/AVAKeyword;->keyword:Ljava/lang/String; +Lsun/security/x509/AVAKeyword;->keywordMap:Ljava/util/Map; +Lsun/security/x509/AVAKeyword;->oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/AVAKeyword;->oidMap:Ljava/util/Map; +Lsun/security/x509/CertificateAlgorithmId;->(Lsun/security/x509/AlgorithmId;)V +Lsun/security/x509/CertificateExtensions;->()V +Lsun/security/x509/CertificateExtensions;->(Lsun/security/util/DerInputStream;)V +Lsun/security/x509/CertificateExtensions;->encode(Ljava/io/OutputStream;Z)V +Lsun/security/x509/CertificateExtensions;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/CertificateExtensions;->set(Ljava/lang/String;Ljava/lang/Object;)V +Lsun/security/x509/CertificateIssuerName;->(Lsun/security/x509/X500Name;)V +Lsun/security/x509/CertificateSerialNumber;->(I)V +Lsun/security/x509/CertificateSerialNumber;->(Ljava/math/BigInteger;)V +Lsun/security/x509/CertificateSubjectName;->(Lsun/security/x509/X500Name;)V +Lsun/security/x509/CertificateSubjectName;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/CertificateValidity;->(Ljava/util/Date;Ljava/util/Date;)V +Lsun/security/x509/CertificateVersion;->(I)V +Lsun/security/x509/CertificateX509Key;->(Ljava/security/PublicKey;)V +Lsun/security/x509/CRLDistributionPointsExtension;->encodeThis()V +Lsun/security/x509/CRLNumberExtension;->(Ljava/lang/Boolean;Ljava/lang/Object;)V +Lsun/security/x509/CRLNumberExtension;->encodeThis()V +Lsun/security/x509/CRLNumberExtension;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/Extension;->(Lsun/security/x509/Extension;)V +Lsun/security/x509/Extension;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/x509/Extension;->getExtensionId()Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/GeneralName;->(Lsun/security/x509/GeneralNameInterface;)V +Lsun/security/x509/GeneralName;->getName()Lsun/security/x509/GeneralNameInterface; +Lsun/security/x509/GeneralName;->getType()I +Lsun/security/x509/GeneralNames;->()V +Lsun/security/x509/GeneralNames;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/GeneralNames;->add(Lsun/security/x509/GeneralName;)Lsun/security/x509/GeneralNames; +Lsun/security/x509/GeneralNames;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/x509/GeneralNames;->isEmpty()Z +Lsun/security/x509/KeyIdentifier;->(Ljava/security/PublicKey;)V +Lsun/security/x509/KeyIdentifier;->getIdentifier()[B +Lsun/security/x509/KeyIdentifier;->octetString:[B +Lsun/security/x509/KeyUsageExtension;->([Z)V +Lsun/security/x509/KeyUsageExtension;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/NetscapeCertTypeExtension;->([B)V +Lsun/security/x509/NetscapeCertTypeExtension;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/OIDMap$OIDInfo;->clazz:Ljava/lang/Class; +Lsun/security/x509/OIDMap;->getClass(Lsun/security/util/ObjectIdentifier;)Ljava/lang/Class; +Lsun/security/x509/OIDMap;->nameMap:Ljava/util/Map; +Lsun/security/x509/OIDMap;->oidMap:Ljava/util/Map; +Lsun/security/x509/PKIXExtensions;->CertificateIssuer_Id:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/SerialNumber;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/SubjectAlternativeNameExtension;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/SubjectKeyIdentifierExtension;->([B)V +Lsun/security/x509/UniqueIdentity;->(Lsun/security/util/DerInputStream;)V +Lsun/security/x509/UniqueIdentity;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/UniqueIdentity;->encode(Lsun/security/util/DerOutputStream;B)V +Lsun/security/x509/URIName;->getName()Ljava/lang/String; +Lsun/security/x509/URIName;->getScheme()Ljava/lang/String; +Lsun/security/x509/X500Name;->(Ljava/lang/String;)V +Lsun/security/x509/X500Name;->(Ljava/lang/String;Ljava/lang/String;)V +Lsun/security/x509/X500Name;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lsun/security/x509/X500Name;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lsun/security/x509/X500Name;->(Lsun/security/util/DerInputStream;)V +Lsun/security/x509/X500Name;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/X500Name;->([B)V +Lsun/security/x509/X500Name;->allAvas()Ljava/util/List; +Lsun/security/x509/X500Name;->asX500Name(Ljavax/security/auth/x500/X500Principal;)Lsun/security/x509/X500Name; +Lsun/security/x509/X500Name;->asX500Principal()Ljavax/security/auth/x500/X500Principal; +Lsun/security/x509/X500Name;->commonName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->countryName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->DNQUALIFIER_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->DOMAIN_COMPONENT_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->encode(Lsun/security/util/DerOutputStream;)V +Lsun/security/x509/X500Name;->GENERATIONQUALIFIER_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->getCommonName()Ljava/lang/String; +Lsun/security/x509/X500Name;->GIVENNAME_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->INITIALS_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->ipAddress_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->isEmpty()Z +Lsun/security/x509/X500Name;->localityName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->orgName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->orgUnitName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->SERIALNUMBER_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->stateName_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->streetAddress_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->SURNAME_OID:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->title_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X500Name;->userid_oid:Lsun/security/util/ObjectIdentifier; +Lsun/security/x509/X509CertImpl;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/X509CertImpl;->(Lsun/security/x509/X509CertInfo;)V +Lsun/security/x509/X509CertImpl;->([B)V +Lsun/security/x509/X509CertImpl;->algId:Lsun/security/x509/AlgorithmId; +Lsun/security/x509/X509CertImpl;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/X509CertImpl;->getEncodedInternal()[B +Lsun/security/x509/X509CertImpl;->parse(Lsun/security/util/DerValue;)V +Lsun/security/x509/X509CertImpl;->readOnly:Z +Lsun/security/x509/X509CertImpl;->sign(Ljava/security/PrivateKey;Ljava/lang/String;)V +Lsun/security/x509/X509CertImpl;->signature:[B +Lsun/security/x509/X509CertImpl;->signedCert:[B +Lsun/security/x509/X509CertInfo;->()V +Lsun/security/x509/X509CertInfo;->([B)V +Lsun/security/x509/X509CertInfo;->get(Ljava/lang/String;)Ljava/lang/Object; +Lsun/security/x509/X509CertInfo;->set(Ljava/lang/String;Ljava/lang/Object;)V +Lsun/security/x509/X509CRLEntryImpl;->getExtension(Lsun/security/util/ObjectIdentifier;)Lsun/security/x509/Extension; +Lsun/security/x509/X509CRLImpl;->(Ljava/io/InputStream;)V +Lsun/security/x509/X509CRLImpl;->(Lsun/security/util/DerValue;)V +Lsun/security/x509/X509CRLImpl;->([B)V +Lsun/security/x509/X509CRLImpl;->getEncodedInternal()[B +Lsun/security/x509/X509Key;->()V +Lsun/security/x509/X509Key;->algid:Lsun/security/x509/AlgorithmId; +Lsun/security/x509/X509Key;->encodedKey:[B +Lsun/security/x509/X509Key;->key:[B +Lsun/security/x509/X509Key;->parse(Lsun/security/util/DerValue;)Ljava/security/PublicKey; +Lsun/security/x509/X509Key;->unusedBits:I +Lsun/util/calendar/AbstractCalendar;->getDayOfWeekDateOnOrBefore(JI)J +Lsun/util/calendar/AbstractCalendar;->getTimeOfDayValue(Lsun/util/calendar/CalendarDate;)J +Lsun/util/calendar/BaseCalendar$Date;->getNormalizedYear()I +Lsun/util/calendar/BaseCalendar$Date;->setNormalizedYear(I)V +Lsun/util/calendar/CalendarDate;->getDayOfMonth()I +Lsun/util/calendar/CalendarDate;->getMonth()I +Lsun/util/calendar/CalendarDate;->getTimeOfDay()J +Lsun/util/calendar/CalendarDate;->getYear()I +Lsun/util/calendar/CalendarDate;->setDate(III)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarDate;->setDayOfMonth(I)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarDate;->setHours(I)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarDate;->setMillis(I)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarDate;->setMinutes(I)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarDate;->setSeconds(I)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarSystem;->forName(Ljava/lang/String;)Lsun/util/calendar/CalendarSystem; +Lsun/util/calendar/CalendarSystem;->getGregorianCalendar()Lsun/util/calendar/Gregorian; +Lsun/util/calendar/CalendarSystem;->getTime(Lsun/util/calendar/CalendarDate;)J +Lsun/util/calendar/CalendarSystem;->newCalendarDate(Ljava/util/TimeZone;)Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/CalendarSystem;->validate(Lsun/util/calendar/CalendarDate;)Z +Lsun/util/calendar/CalendarUtils;->floorDivide(II)I +Lsun/util/calendar/CalendarUtils;->floorDivide(JJ)J +Lsun/util/calendar/CalendarUtils;->mod(II)I +Lsun/util/calendar/CalendarUtils;->mod(JJ)J +Lsun/util/calendar/Era;->(Ljava/lang/String;Ljava/lang/String;JZ)V +Lsun/util/calendar/Era;->getAbbreviation()Ljava/lang/String; +Lsun/util/calendar/Era;->getName()Ljava/lang/String; +Lsun/util/calendar/Era;->getSinceDate()Lsun/util/calendar/CalendarDate; +Lsun/util/calendar/ImmutableGregorianDate;->unsupported()V +Lsun/util/calendar/LocalGregorianCalendar$Date;->getNormalizedYear()I +Lsun/util/calendar/LocalGregorianCalendar$Date;->setEra(Lsun/util/calendar/Era;)Lsun/util/calendar/LocalGregorianCalendar$Date; +Lsun/util/calendar/LocalGregorianCalendar$Date;->setNormalizedYear(I)V +Lsun/util/calendar/LocalGregorianCalendar$Date;->setYear(I)Lsun/util/calendar/LocalGregorianCalendar$Date; +Lsun/util/calendar/LocalGregorianCalendar;->newCalendarDate(Ljava/util/TimeZone;)Lsun/util/calendar/LocalGregorianCalendar$Date; +Lsun/util/calendar/LocalGregorianCalendar;->normalize(Lsun/util/calendar/CalendarDate;)Z +Lsun/util/calendar/LocalGregorianCalendar;->validate(Lsun/util/calendar/CalendarDate;)Z diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt index 45e38cf95de03f0e051d3fc56b5a3d55769b3615..575ba340f52a03fdafffc081a30ed22d259c3cfb 100644 --- a/config/hiddenapi-vendor-list.txt +++ b/config/hiddenapi-vendor-list.txt @@ -120,16 +120,7 @@ Landroid/os/SystemService;->stop(Ljava/lang/String;)V Landroid/os/SystemVibrator;->()V Landroid/os/UserHandle;->isSameApp(II)Z Landroid/os/UserManager;->hasUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z -Landroid/os/UserManager;->isAdminUser()Z Landroid/R$styleable;->CheckBoxPreference:[I -Landroid/system/NetlinkSocketAddress;->(II)V -Landroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V -Landroid/system/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V -Landroid/system/Os;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I -Landroid/system/Os;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String;)V -Landroid/system/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V -Landroid/system/PacketSocketAddress;->(I[B)V -Landroid/system/PacketSocketAddress;->(SI)V Landroid/telephony/ims/compat/feature/MMTelFeature;->()V Landroid/telephony/ims/compat/ImsService;->()V Landroid/telephony/ims/compat/stub/ImsCallSessionImplBase;->()V @@ -254,7 +245,3 @@ Lcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/inter Lcom/android/internal/R$styleable;->NumberPicker:[I Lcom/android/internal/R$styleable;->TwoLineListItem:[I Lcom/android/internal/telephony/ITelephony;->getDataEnabled(I)Z -Ljava/lang/System;->arraycopy([BI[BII)V -Ljava/net/Inet4Address;->ALL:Ljava/net/InetAddress; -Ljava/net/Inet4Address;->ANY:Ljava/net/InetAddress; -Ljava/net/Inet6Address;->ANY:Ljava/net/InetAddress; diff --git a/config/preloaded-classes b/config/preloaded-classes index 1a8a32ec574f8cc43ec57c466ab51f96260df54e..14597ee919bfc75b155775a692eeb123e320add3 100644 --- a/config/preloaded-classes +++ b/config/preloaded-classes @@ -1240,6 +1240,12 @@ android.graphics.fonts.FontVariationAxis android.graphics.pdf.PdfDocument android.graphics.pdf.PdfEditor android.graphics.pdf.PdfRenderer +android.graphics.text.LineBreaker +android.graphics.text.LineBreaker$Builder +android.graphics.text.LineBreaker$ParagraphConstraints +android.graphics.text.LineBreaker$Result +android.graphics.text.MeasuredText +android.graphics.text.MeasuredText$Builder android.hardware.Camera android.hardware.Camera$CameraInfo android.hardware.Camera$Face @@ -3227,14 +3233,14 @@ android.view.DisplayCutout$ParcelableWrapper$1 android.view.DisplayEventReceiver android.view.DisplayInfo android.view.DisplayInfo$1 -android.view.DisplayListCanvas +android.graphics.RecordingCanvas android.view.FallbackEventHandler android.view.FocusFinder android.view.FocusFinder$1 android.view.FocusFinder$FocusSorter android.view.FocusFinder$UserSpecifiedFocusComparator android.view.FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter -android.view.FrameInfo +android.graphics.FrameInfo android.view.FrameMetrics android.view.FrameMetricsObserver android.view.FrameStats @@ -3305,8 +3311,8 @@ android.view.OrientationEventListener android.view.OrientationEventListener$SensorEventListenerImpl android.view.PointerIcon android.view.PointerIcon$1 -android.view.RenderNode -android.view.RenderNode$NoImagePreloadHolder +android.graphics.RenderNode +android.graphics.RenderNode$NoImagePreloadHolder android.view.RenderNodeAnimator android.view.RenderNodeAnimator$1 android.view.RenderNodeAnimatorSetHelper @@ -4111,6 +4117,8 @@ com.android.internal.util.StateMachine$SmHandler$StateInfo com.android.internal.util.VirtualRefBasePtr com.android.internal.util.XmlUtils com.android.internal.util.XmlUtils$WriteMapCallback +com.android.internal.util.function.HeptConsumer +com.android.internal.util.function.HeptFunction com.android.internal.util.function.HexConsumer com.android.internal.util.function.HexFunction com.android.internal.util.function.QuadConsumer diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index d7cca15927405cdfa421362297e0cfc116e69db7..997ed25a42c6533938b381d41b470400c5459867 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -76,7 +76,8 @@ import java.util.List; * @attr ref android.R.styleable#AccessibilityService_notificationTimeout * @attr ref android.R.styleable#AccessibilityService_packageNames * @attr ref android.R.styleable#AccessibilityService_settingsActivity - * @attr ref android.R.styleable#AccessibilityService_minimumUiTimeout + * @attr ref android.R.styleable#AccessibilityService_nonInteractiveUiTimeout + * @attr ref android.R.styleable#AccessibilityService_interactiveUiTimeout * @see AccessibilityService * @see android.view.accessibility.AccessibilityEvent * @see android.view.accessibility.AccessibilityManager @@ -434,11 +435,14 @@ public class AccessibilityServiceInfo implements Parcelable { public boolean crashed; /** - * The minimum timeout in milliseconds that UI controls need to remain on the screen. - * - * @see #setMinimumUiTimeoutMillis + * A recommended timeout in milliseconds for non-interactive controls. + */ + private int mNonInteractiveUiTimeout; + + /** + * A recommended timeout in milliseconds for interactive controls. */ - private int mMinimumUiTimeout; + private int mInteractiveUiTimeout; /** * The component name the accessibility service. @@ -544,8 +548,11 @@ public class AccessibilityServiceInfo implements Parcelable { notificationTimeout = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_notificationTimeout, 0); - mMinimumUiTimeout = asAttributes.getInt( - com.android.internal.R.styleable.AccessibilityService_minimumUiTimeout, + mNonInteractiveUiTimeout = asAttributes.getInt( + com.android.internal.R.styleable.AccessibilityService_nonInteractiveUiTimeout, + 0); + mInteractiveUiTimeout = asAttributes.getInt( + com.android.internal.R.styleable.AccessibilityService_interactiveUiTimeout, 0); flags = asAttributes.getInt( com.android.internal.R.styleable.AccessibilityService_accessibilityFlags, 0); @@ -616,7 +623,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = other.packageNames; feedbackType = other.feedbackType; notificationTimeout = other.notificationTimeout; - mMinimumUiTimeout = other.mMinimumUiTimeout; + mNonInteractiveUiTimeout = other.mNonInteractiveUiTimeout; + mInteractiveUiTimeout = other.mInteractiveUiTimeout; flags = other.flags; } @@ -775,26 +783,57 @@ public class AccessibilityServiceInfo implements Parcelable { } /** - * Set the minimum time that controls need to remain on the screen to support the user. + * Set the recommended time that non-interactive controls need to remain on the screen to + * support the user. + *

+ * This value can be dynamically set at runtime by + * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}. + *

+ * + * @param timeout The timeout in milliseconds. + * + * @see android.R.styleable#AccessibilityService_nonInteractiveUiTimeout + */ + public void setNonInteractiveUiTimeoutMillis(int timeout) { + mNonInteractiveUiTimeout = timeout; + } + + /** + * Get the recommended timeout for non-interactive controls. + * + * @return The timeout in milliseconds. + * + * @see #setNonInteractiveUiTimeoutMillis(int) + */ + public int getNonInteractiveUiTimeoutMillis() { + return mNonInteractiveUiTimeout; + } + + /** + * Set the recommended time that interactive controls need to remain on the screen to + * support the user. *

- * This value can be dynamically set at runtime by - * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}. + * This value can be dynamically set at runtime by + * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}. *

* * @param timeout The timeout in milliseconds. + * + * @see android.R.styleable#AccessibilityService_interactiveUiTimeout */ - public void setMinimumUiTimeoutMillis(int timeout) { - mMinimumUiTimeout = timeout; + public void setInteractiveUiTimeoutMillis(int timeout) { + mInteractiveUiTimeout = timeout; } /** - * Get the minimum ui timeout. + * Get the recommended timeout for interactive controls. * - * @see #setMinimumUiTimeoutMillis * @return The timeout in milliseconds. + * + * @see #setInteractiveUiTimeoutMillis(int) */ - public int getMinimumUiTimeoutMillis() { - return mMinimumUiTimeout; + public int getInteractiveUiTimeoutMillis() { + return mInteractiveUiTimeout; } /** {@hide} */ @@ -815,7 +854,8 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeStringArray(packageNames); parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); - parcel.writeInt(mMinimumUiTimeout); + parcel.writeInt(mNonInteractiveUiTimeout); + parcel.writeInt(mInteractiveUiTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); @@ -833,7 +873,8 @@ public class AccessibilityServiceInfo implements Parcelable { packageNames = parcel.readStringArray(); feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); - mMinimumUiTimeout = parcel.readInt(); + mNonInteractiveUiTimeout = parcel.readInt(); + mInteractiveUiTimeout = parcel.readInt(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); @@ -884,7 +925,9 @@ public class AccessibilityServiceInfo implements Parcelable { stringBuilder.append(", "); stringBuilder.append("notificationTimeout: ").append(notificationTimeout); stringBuilder.append(", "); - stringBuilder.append("minimumUiTimeout: ").append(mMinimumUiTimeout); + stringBuilder.append("nonInteractiveUiTimeout: ").append(mNonInteractiveUiTimeout); + stringBuilder.append(", "); + stringBuilder.append("interactiveUiTimeout: ").append(mInteractiveUiTimeout); stringBuilder.append(", "); appendFlags(stringBuilder, flags); stringBuilder.append(", "); diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 696099a67ccdc3e42f0c058ef9715ede4959f222..3f95b95b7258fe24c49b00b74ab25e7f64f5c958 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -16,17 +16,15 @@ package android.accounts; -import static android.Manifest.permission.GET_ACCOUNTS; - +import android.annotation.BroadcastBehavior; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; +import android.annotation.SdkConstant.SdkConstantType; import android.annotation.Size; import android.annotation.SystemApi; import android.annotation.SystemService; -import android.annotation.SdkConstant.SdkConstantType; -import android.annotation.BroadcastBehavior; import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.content.BroadcastReceiver; @@ -36,27 +34,24 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.res.Resources; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; import android.database.SQLException; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Parcelable; -import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; import com.android.internal.R; + import com.google.android.collect.Maps; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.lang.SuppressWarnings; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -511,7 +506,7 @@ public class AccountManager { * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1}. * * @param account The account to query for user data - * @return The user data, null if the account or key doesn't exist + * @return The user data, null if the account, key doesn't exist, or the user is locked */ public String getUserData(final Account account, final String key) { android.util.SeempLog.record(23); @@ -885,7 +880,7 @@ public class AccountManager { * @param userdata String values to use for the account's userdata, null for * none * @return True if the account was successfully added, false if the account - * already exists, the account is null, or another error occurs. + * already exists, the account is null, the user is locked, or another error occurs. */ public boolean addAccountExplicitly(Account account, String password, Bundle userdata) { android.util.SeempLog.record(24); @@ -1362,7 +1357,7 @@ public class AccountManager { * @param account The account for which an auth token is to be fetched. Cannot be {@code null}. * @param authTokenType The type of auth token to fetch. Cannot be {@code null}. * @return The cached auth token for this account and type, or null if - * no auth token is cached or the account does not exist. + * no auth token is cached, the account does not exist, or the user is locked * @see #getAuthToken */ public String peekAuthToken(final Account account, final String authTokenType) { @@ -1435,7 +1430,7 @@ public class AccountManager { } /** - * Sets one userdata key for an account. Intended by use for the + * Sets one userdata key for an account. Intended by use for the * authenticator to stash state for itself, not directly by applications. * The meaning of the keys and values is up to the authenticator. * @@ -3108,7 +3103,7 @@ public class AccountManager { } /** - * Asks the user to enter a new password for an account but not updating the + * Asks the user to enter a new password for the account but not updating the * saved credentials for the account until {@link #finishSession} is called. *

* This method may be called from any thread, but the returned diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 3cc5e370bc83024dcfced3a3cc82cd2236ee4921..553acc8dcbd3e3042487f42d7ce18183ef51bf93 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -31,6 +31,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.StyleRes; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.VoiceInteractor.Request; import android.app.admin.DevicePolicyManager; @@ -120,6 +121,8 @@ import android.view.autofill.AutofillManager; import android.view.autofill.AutofillManager.AutofillClient; import android.view.autofill.AutofillPopupWindow; import android.view.autofill.IAutofillWindowPresenter; +import android.view.intelligence.ContentCaptureEvent; +import android.view.intelligence.IntelligenceManager; import android.widget.AdapterView; import android.widget.Toast; import android.widget.Toolbar; @@ -131,8 +134,6 @@ import com.android.internal.app.ToolbarActionBar; import com.android.internal.app.WindowDecorActionBar; import com.android.internal.policy.PhoneWindow; -import dalvik.system.VMRuntime; - import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.annotation.Retention; @@ -823,6 +824,10 @@ public class Activity extends ContextThemeWrapper /** The autofill manager. Always access via {@link #getAutofillManager()}. */ @Nullable private AutofillManager mAutofillManager; + /** The screen observation manager. Always access via {@link #getIntelligenceManager()}. */ + @Nullable private IntelligenceManager mIntelligenceManager; + + static final class NonConfigurationInstances { Object activity; HashMap children; @@ -996,7 +1001,7 @@ public class Activity extends ContextThemeWrapper } /** - * (Create and) return the autofill manager + * (Creates, sets and) returns the autofill manager * * @return The autofill manager */ @@ -1008,6 +1013,43 @@ public class Activity extends ContextThemeWrapper return mAutofillManager; } + /** + * (Creates, sets, and ) returns the intelligence manager + * + * @return The intelligence manager + */ + @NonNull private IntelligenceManager getIntelligenceManager() { + if (mIntelligenceManager == null) { + mIntelligenceManager = getSystemService(IntelligenceManager.class); + } + return mIntelligenceManager; + } + + private void notifyIntelligenceManagerIfNeeded(@ContentCaptureEvent.EventType int event) { + final IntelligenceManager im = getIntelligenceManager(); + if (im == null || !im.isContentCaptureEnabled()) { + return; + } + switch (event) { + case ContentCaptureEvent.TYPE_ACTIVITY_CREATED: + //TODO(b/111276913): decide whether the InteractionSessionId should be + // saved / restored in the activity bundle. + im.onActivityCreated(mToken, getComponentName()); + break; + case ContentCaptureEvent.TYPE_ACTIVITY_DESTROYED: + im.onActivityDestroyed(); + break; + case ContentCaptureEvent.TYPE_ACTIVITY_STARTED: + case ContentCaptureEvent.TYPE_ACTIVITY_RESUMED: + case ContentCaptureEvent.TYPE_ACTIVITY_PAUSED: + case ContentCaptureEvent.TYPE_ACTIVITY_STOPPED: + im.onActivityLifecycleEvent(event); + break; + default: + Log.w(TAG, "notifyIntelligenceManagerIfNeeded(): invalid type " + event); + } + } + @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -1083,6 +1125,8 @@ public class Activity extends ContextThemeWrapper } mRestoredFromBundle = savedInstanceState != null; mCalled = true; + + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_CREATED); } /** @@ -1316,6 +1360,7 @@ public class Activity extends ContextThemeWrapper if (mAutoFillResetNeeded) { getAutofillManager().onVisibleForAutofill(); } + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_STARTED); } /** @@ -1398,6 +1443,7 @@ public class Activity extends ContextThemeWrapper } } } + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_RESUMED); mCalled = true; } @@ -1791,6 +1837,7 @@ public class Activity extends ContextThemeWrapper mAutoFillIgnoreFirstResumePause = false; } } + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_PAUSED); mCalled = true; } @@ -1979,6 +2026,7 @@ public class Activity extends ContextThemeWrapper getAutofillManager().onPendingSaveUi(AutofillManager.PENDING_UI_OPERATION_CANCEL, mIntent.getIBinderExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN)); } + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_STOPPED); } } @@ -2049,6 +2097,9 @@ public class Activity extends ContextThemeWrapper } getApplication().dispatchActivityDestroyed(this); + + notifyIntelligenceManagerIfNeeded(ContentCaptureEvent.TYPE_ACTIVITY_DESTROYED); + } /** @@ -2296,6 +2347,7 @@ public class Activity extends ContextThemeWrapper * @see View#onMovedToDisplay(int, Configuration) * @hide */ + @TestApi public void onMovedToDisplay(int displayId, Configuration config) { } @@ -4788,6 +4840,7 @@ public class Activity extends ContextThemeWrapper * their launch had come from the original activity. * @param intent The Intent to start. * @param options ActivityOptions or null. + * @param permissionToken Token received from the system that permits this call to be made. * @param ignoreTargetSecurity If true, the activity manager will not check whether the * caller it is doing the start is, is actually allowed to start the target activity. * If you set this to true, you must set an explicit component in the Intent and do any @@ -4796,7 +4849,7 @@ public class Activity extends ContextThemeWrapper * @hide */ public void startActivityAsCaller(Intent intent, @Nullable Bundle options, - boolean ignoreTargetSecurity, int userId) { + IBinder permissionToken, boolean ignoreTargetSecurity, int userId) { if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } @@ -4804,7 +4857,7 @@ public class Activity extends ContextThemeWrapper Instrumentation.ActivityResult ar = mInstrumentation.execStartActivityAsCaller( this, mMainThread.getApplicationThread(), mToken, this, - intent, -1, options, ignoreTargetSecurity, userId); + intent, -1, options, permissionToken, ignoreTargetSecurity, userId); if (ar != null) { mMainThread.sendActivityResult( mToken, mEmbeddedID, -1, ar.getResultCode(), @@ -6405,9 +6458,16 @@ public class Activity extends ContextThemeWrapper void dumpInner(@NonNull String prefix, @Nullable FileDescriptor fd, @NonNull PrintWriter writer, @Nullable String[] args) { - if (args != null && args.length > 0 && args[0].equals("--autofill")) { - dumpAutofillManager(prefix, writer); - return; + if (args != null && args.length > 0) { + // Handle special cases + switch (args[0]) { + case "--autofill": + dumpAutofillManager(prefix, writer); + return; + case "--intelligence": + dumpIntelligenceManager(prefix, writer); + return; + } } writer.print(prefix); writer.print("Local Activity "); writer.print(Integer.toHexString(System.identityHashCode(this))); @@ -6437,6 +6497,7 @@ public class Activity extends ContextThemeWrapper mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix); dumpAutofillManager(prefix, writer); + dumpIntelligenceManager(prefix, writer); ResourcesManager.getInstance().dump(prefix, writer); } @@ -6452,6 +6513,15 @@ public class Activity extends ContextThemeWrapper } } + void dumpIntelligenceManager(String prefix, PrintWriter writer) { + final IntelligenceManager im = getIntelligenceManager(); + if (im != null) { + im.dump(prefix, writer); + } else { + writer.print(prefix); writer.println("No IntelligenceManager"); + } + } + /** * Bit indicating that this activity is "immersive" and should not be * interrupted by notifications if possible. @@ -7272,31 +7342,6 @@ public class Activity extends ContextThemeWrapper } } - // This property is set for all non-user builds except final release - boolean isApiWarningEnabled = SystemProperties.getInt("ro.art.hiddenapi.warning", 0) == 1; - - if (isAppDebuggable || isApiWarningEnabled) { - if (!mMainThread.mHiddenApiWarningShown && VMRuntime.getRuntime().hasUsedHiddenApi()) { - // Only show the warning once per process. - mMainThread.mHiddenApiWarningShown = true; - - String appName = getApplicationInfo().loadLabel(getPackageManager()) - .toString(); - String warning = "Detected problems with API compatibility\n" - + "(visit g.co/dev/appcompat for more info)"; - if (isAppDebuggable) { - new AlertDialog.Builder(this) - .setTitle(appName) - .setMessage(warning) - .setPositiveButton(android.R.string.ok, null) - .setCancelable(false) - .show(); - } else { - Toast.makeText(this, appName + "\n" + warning, Toast.LENGTH_LONG).show(); - } - } - } - mActivityTransitionState.enterReady(this); getApplication().dispatchActivityPostStarted(this); } diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 14b8ae45d989cac5629dfb5397a28033f15cbee4..1cf042fd12b4651a92afa99734bc6fecd2b2ddde 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -137,6 +137,17 @@ public class ActivityManager { private static final int FIRST_START_NON_FATAL_ERROR_CODE = 100; private static final int LAST_START_NON_FATAL_ERROR_CODE = 199; + /** + * Disable hidden API checks for the newly started instrumentation. + * @hide + */ + public static final int INSTR_FLAG_DISABLE_HIDDEN_API_CHECKS = 1 << 0; + /** + * Mount full external storage for the newly started instrumentation. + * @hide + */ + public static final int INSTR_FLAG_MOUNT_EXTERNAL_STORAGE_FULL = 1 << 1; + static final class UidObserver extends IUidObserver.Stub { final OnUidImportanceListener mListener; final Context mContext; @@ -1740,6 +1751,8 @@ public class ActivityManager { */ public static class TaskSnapshot implements Parcelable { + // Top activity in task when snapshot was taken + private final ComponentName mTopActivityComponent; private final GraphicBuffer mSnapshot; private final int mOrientation; private final Rect mContentInsets; @@ -1754,9 +1767,11 @@ public class ActivityManager { private final int mSystemUiVisibility; private final boolean mIsTranslucent; - public TaskSnapshot(GraphicBuffer snapshot, int orientation, Rect contentInsets, - boolean reducedResolution, float scale, boolean isRealSnapshot, int windowingMode, - int systemUiVisibility, boolean isTranslucent) { + public TaskSnapshot(@NonNull ComponentName topActivityComponent, GraphicBuffer snapshot, + int orientation, Rect contentInsets, boolean reducedResolution, float scale, + boolean isRealSnapshot, int windowingMode, int systemUiVisibility, + boolean isTranslucent) { + mTopActivityComponent = topActivityComponent; mSnapshot = snapshot; mOrientation = orientation; mContentInsets = new Rect(contentInsets); @@ -1769,6 +1784,7 @@ public class ActivityManager { } private TaskSnapshot(Parcel source) { + mTopActivityComponent = ComponentName.readFromParcel(source); mSnapshot = source.readParcelable(null /* classLoader */); mOrientation = source.readInt(); mContentInsets = source.readParcelable(null /* classLoader */); @@ -1780,6 +1796,13 @@ public class ActivityManager { mIsTranslucent = source.readBoolean(); } + /** + * @return The top activity component for the task at the point this snapshot was taken. + */ + public ComponentName getTopActivityComponent() { + return mTopActivityComponent; + } + /** * @return The graphic buffer representing the screenshot. */ @@ -1860,6 +1883,7 @@ public class ActivityManager { @Override public void writeToParcel(Parcel dest, int flags) { + ComponentName.writeToParcel(mTopActivityComponent, dest); dest.writeParcelable(mSnapshot, 0); dest.writeInt(mOrientation); dest.writeParcelable(mContentInsets, 0); @@ -1875,7 +1899,9 @@ public class ActivityManager { public String toString() { final int width = mSnapshot != null ? mSnapshot.getWidth() : 0; final int height = mSnapshot != null ? mSnapshot.getHeight() : 0; - return "TaskSnapshot{mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")" + return "TaskSnapshot{" + + " mTopActivityComponent=" + mTopActivityComponent.flattenToShortString() + + " mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")" + " mOrientation=" + mOrientation + " mContentInsets=" + mContentInsets.toShortString() + " mReducedResolution=" + mReducedResolution + " mScale=" + mScale diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 069effd3ef1932f6acf9990e26f80fbc1a8a146e..0e5b976f43017a807e3a05df74b9df777d8ee1ee 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -160,13 +160,6 @@ public abstract class ActivityManagerInternal { */ public abstract List getMemoryStateForProcesses(); - /** - * Returns a list that contains the memory stats for monitored native processes. - * - * The list of the monitored processes is defined in MemoryStatUtil class. - */ - public abstract List getMemoryStateForNativeProcesses(); - /** * Checks to see if the calling pid is allowed to handle the user. Returns adjusted user id as * needed. @@ -277,7 +270,15 @@ public abstract class ActivityManagerInternal { public abstract void startProcess(String processName, ApplicationInfo info, boolean knownToBeDead, String hostingType, ComponentName hostingName); - /** Starts up the starting activity process for debugging if needed. */ + /** Starts up the starting activity process for debugging if needed. + * This function needs to be called synchronously from WindowManager context so the caller + * passes a lock {@code wmLock} and waits to be notified. + * + * @param wmLock calls {@code notify} on the object to wake up the caller. + */ public abstract void setDebugFlagsForStartingActivity(ActivityInfo aInfo, int startFlags, - ProfilerInfo profilerInfo); + ProfilerInfo profilerInfo, Object wmLock); + + /** Checks if process running with given pid has access to full external storage or not */ + public abstract boolean isAppStorageSandboxed(int pid, int uid); } diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java index b8fe2f13d32820e9d73683c370cf6f261d2262ff..56ccf6f4a76fe06dd73e551ae37934e17be36160 100644 --- a/core/java/android/app/ActivityTaskManager.java +++ b/core/java/android/app/ActivityTaskManager.java @@ -110,6 +110,32 @@ public class ActivityTaskManager { public static final int RESIZE_MODE_USER_FORCED = RESIZE_MODE_PRESERVE_WINDOW | RESIZE_MODE_FORCED; + /** + * Extra included on intents that are delegating the call to + * ActivityManager#startActivityAsCaller to another app. This token is necessary for that call + * to succeed. Type is IBinder. + * @hide + */ + public static final String EXTRA_PERMISSION_TOKEN = "android.app.extra.PERMISSION_TOKEN"; + + /** + * Extra included on intents that contain an EXTRA_INTENT, with options that the contained + * intent may want to be started with. Type is Bundle. + * TODO: remove once the ChooserActivity moves to systemui + * @hide + */ + public static final String EXTRA_OPTIONS = "android.app.extra.OPTIONS"; + + /** + * Extra included on intents that contain an EXTRA_INTENT, use this boolean value for the + * parameter of the same name when starting the contained intent. + * TODO: remove once the ChooserActivity moves to systemui + * @hide + */ + public static final String EXTRA_IGNORE_TARGET_SECURITY = + "android.app.extra.EXTRA_IGNORE_TARGET_SECURITY"; + + private static int sMaxRecentTasks = -1; ActivityTaskManager(Context context, Handler handler) { diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 6090938066a4600b9d2d0dc865b6456f0d73438b..af10d912be9d780d33cf089f5e2e70e30ca58617 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -23,6 +23,8 @@ import static android.app.servertransaction.ActivityLifecycleItem.ON_RESUME; import static android.app.servertransaction.ActivityLifecycleItem.ON_START; import static android.app.servertransaction.ActivityLifecycleItem.ON_STOP; import static android.app.servertransaction.ActivityLifecycleItem.PRE_ON_CREATE; +import static android.content.ContentResolver.DEPRECATE_DATA_COLUMNS; +import static android.content.ContentResolver.DEPRECATE_DATA_PREFIX; import static android.view.Display.INVALID_DISPLAY; import android.annotation.NonNull; @@ -45,6 +47,7 @@ import android.content.BroadcastReceiver; import android.content.ComponentCallbacks2; import android.content.ComponentName; import android.content.ContentProvider; +import android.content.ContentResolver; import android.content.Context; import android.content.IContentProvider; import android.content.IIntentReceiver; @@ -69,6 +72,7 @@ import android.database.sqlite.SQLiteDebug; import android.database.sqlite.SQLiteDebug.DbStats; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.HardwareRenderer; import android.graphics.ImageDecoder; import android.hardware.display.DisplayManagerGlobal; import android.net.ConnectivityManager; @@ -84,6 +88,7 @@ import android.os.Bundle; import android.os.Debug; import android.os.DropBoxManager; import android.os.Environment; +import android.os.FileUtils; import android.os.GraphicsEnvironment; import android.os.Handler; import android.os.HandlerExecutor; @@ -114,6 +119,9 @@ import android.provider.Settings; import android.renderscript.RenderScriptCacheDir; import android.security.NetworkSecurityPolicy; import android.security.net.config.NetworkSecurityConfigProvider; +import android.system.ErrnoException; +import android.system.OsConstants; +import android.system.StructStat; import android.util.AndroidRuntimeException; import android.util.ArrayMap; import android.util.BoostFramework; @@ -163,13 +171,16 @@ import dalvik.system.VMRuntime; import libcore.io.DropBox; import libcore.io.EventLogger; +import libcore.io.ForwardingOs; import libcore.io.IoUtils; +import libcore.io.Os; import libcore.net.event.NetworkEventDispatcher; import org.apache.harmony.dalvik.ddmc.DdmVmInternal; import java.io.File; import java.io.FileDescriptor; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; @@ -393,6 +404,9 @@ public final class ActivityThread extends ClientTransactionHandler { = new ArrayMap>(); final GcIdler mGcIdler = new GcIdler(); + final PurgeIdler mPurgeIdler = new PurgeIdler(); + + boolean mPurgeIdlerScheduled = false; boolean mGcIdlerScheduled = false; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) @@ -1426,60 +1440,10 @@ public final class ActivityThread extends ClientTransactionHandler { PrintWriter pw = new FastPrintWriter( new FileOutputStream(pfd.getFileDescriptor())); PrintWriterPrinter printer = new PrintWriterPrinter(pw); - SQLiteDebug.dump(printer, args); - - if (isSystem) { - dumpDatabaseFileSizes(pw, Environment.getDataSystemDirectory(), true); - dumpDatabaseFileSizes(pw, Environment.getDataSystemDeDirectory(), true); - dumpDatabaseFileSizes(pw, Environment.getDataSystemCeDirectory(), true); - } else { - Context context = getApplication(); - if (context != null) { - dumpDatabaseFileSizes(pw, - getDatabasesDir(context.createDeviceProtectedStorageContext()), - false); - dumpDatabaseFileSizes(pw, - getDatabasesDir(context.createCredentialProtectedStorageContext()), - false); - } - } + SQLiteDebug.dump(printer, args, isSystem); pw.flush(); } - private void dumpDatabaseFileSizes(PrintWriter pw, File dir, boolean isSystem) { - final File[] files = dir.listFiles(); - if (files == null || files.length == 0) { - return; - } - Arrays.sort(files, (a, b) -> a.getName().compareTo(b.getName())); - - boolean needHeader = true; - for (File f : files) { - if (isSystem) { - // If it's the system server, the directory contains other files too, so - // filter by file extensions. - // (If it's an app, just print all files because they may not use *.db - // extension.) - final String name = f.getName(); - if (!(name.endsWith(".db") || name.endsWith(".db-wal") - || name.endsWith(".db-journal"))) { - continue; - } - } - if (needHeader) { - pw.println(); - pw.println("Database files in " + dir.getAbsolutePath() + ":"); - needHeader = false; - } - - pw.print(" "); - pw.print(f.getName()); - pw.print(" "); - pw.print(f.length()); - pw.println(" bytes"); - } - } - @Override public void dumpDbInfo(final ParcelFileDescriptor pfd, final String[] args) { if (mSystemThread) { @@ -1732,6 +1696,7 @@ public final class ActivityThread extends ClientTransactionHandler { public static final int RUN_ISOLATED_ENTRY_POINT = 158; public static final int EXECUTE_TRANSACTION = 159; public static final int RELAUNCH_ACTIVITY = 160; + public static final int PURGE_RESOURCES = 161; String codeToString(int code) { if (DEBUG_MESSAGES) { @@ -1775,6 +1740,7 @@ public final class ActivityThread extends ClientTransactionHandler { case RUN_ISOLATED_ENTRY_POINT: return "RUN_ISOLATED_ENTRY_POINT"; case EXECUTE_TRANSACTION: return "EXECUTE_TRANSACTION"; case RELAUNCH_ACTIVITY: return "RELAUNCH_ACTIVITY"; + case PURGE_RESOURCES: return "PURGE_RESOURCES"; } } return Integer.toString(code); @@ -1812,6 +1778,7 @@ public final class ActivityThread extends ClientTransactionHandler { case UNBIND_SERVICE: Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceUnbind"); handleUnbindService((BindServiceData)msg.obj); + schedulePurgeIdler(); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); break; case SERVICE_ARGS: @@ -1822,6 +1789,7 @@ public final class ActivityThread extends ClientTransactionHandler { case STOP_SERVICE: Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceStop"); handleStopService((IBinder)msg.obj); + schedulePurgeIdler(); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); break; case CONFIGURATION_CHANGED: @@ -1955,6 +1923,9 @@ public final class ActivityThread extends ClientTransactionHandler { case RELAUNCH_ACTIVITY: handleRelaunchActivityLocally((IBinder) msg.obj); break; + case PURGE_RESOURCES: + schedulePurgeIdler(); + break; } Object obj = msg.obj; if (obj instanceof SomeArgs) { @@ -2007,6 +1978,17 @@ public final class ActivityThread extends ClientTransactionHandler { @Override public final boolean queueIdle() { doGcIfNeeded(); + nPurgePendingResources(); + return false; + } + } + + final class PurgeIdler implements MessageQueue.IdleHandler { + @Override + public boolean queueIdle() { + Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "purgePendingResources"); + nPurgePendingResources(); + Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); return false; } } @@ -2336,6 +2318,22 @@ public final class ActivityThread extends ClientTransactionHandler { mH.removeMessages(H.GC_WHEN_IDLE); } + void schedulePurgeIdler() { + if (!mPurgeIdlerScheduled) { + mPurgeIdlerScheduled = true; + Looper.myQueue().addIdleHandler(mPurgeIdler); + } + mH.removeMessages(H.PURGE_RESOURCES); + } + + void unschedulePurgeIdler() { + if (mPurgeIdlerScheduled) { + mPurgeIdlerScheduled = false; + Looper.myQueue().removeIdleHandler(mPurgeIdler); + } + mH.removeMessages(H.PURGE_RESOURCES); + } + void doGcIfNeeded() { mGcIdlerScheduled = false; final long now = SystemClock.uptimeMillis(); @@ -4637,6 +4635,7 @@ public final class ActivityThread extends ClientTransactionHandler { } r.setState(ON_DESTROY); } + schedulePurgeIdler(); mActivities.remove(token); StrictMode.decrementExpectedActivityCount(activityClass); return r; @@ -5655,7 +5654,7 @@ public final class ActivityThread extends ClientTransactionHandler { int uid = Process.myUid(); String[] packages = getPackageManager().getPackagesForUid(uid); if (packages != null) { - ThreadedRenderer.setupDiskCache(codeCacheDir); + HardwareRenderer.setupDiskCache(codeCacheDir); RenderScriptCacheDir.setupDiskCache(codeCacheDir); } } catch (RemoteException e) { @@ -5890,14 +5889,18 @@ public final class ActivityThread extends ClientTransactionHandler { } } - // Allow application-generated systrace messages if we're debuggable. - boolean isAppDebuggable = (data.appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; - Trace.setAppTracingAllowed(isAppDebuggable); - ThreadedRenderer.setDebuggingEnabled(isAppDebuggable || Build.IS_DEBUGGABLE); - if (isAppDebuggable && data.enableBinderTracking) { + // Allow binder tracing, and application-generated systrace messages if we're profileable. + boolean isAppProfileable = data.appInfo.isProfileableByShell(); + Trace.setAppTracingAllowed(isAppProfileable); + if (isAppProfileable && data.enableBinderTracking) { Binder.enableTracing(); } + // Allow renderer debugging features if we're debuggable. + boolean isAppDebuggable = (data.appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; + HardwareRenderer.setDebuggingEnabled(isAppDebuggable || Build.IS_DEBUGGABLE); + HardwareRenderer.setPackageName(data.appInfo.packageName); + /** * Initialize the default http proxy in this process for the reasons we set the time zone. */ @@ -5967,7 +5970,7 @@ public final class ActivityThread extends ClientTransactionHandler { StrictMode.setThreadPolicyMask(oldMask); } } else { - ThreadedRenderer.setIsolatedProcess(true); + HardwareRenderer.setIsolatedProcess(true); } // If we use profiles, setup the dex reporter to notify package manager @@ -6822,7 +6825,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } - private class DropBoxReporter implements DropBox.Reporter { + private static class DropBoxReporter implements DropBox.Reporter { private DropBoxManager dropBox; @@ -6842,7 +6845,84 @@ public final class ActivityThread extends ClientTransactionHandler { private synchronized void ensureInitialized() { if (dropBox == null) { - dropBox = (DropBoxManager) getSystemContext().getSystemService(Context.DROPBOX_SERVICE); + dropBox = currentActivityThread().getApplication() + .getSystemService(DropBoxManager.class); + } + } + } + + private static class AndroidOs extends ForwardingOs { + /** + * Install selective syscall interception. For example, this is used to + * implement special filesystem paths that will be redirected to + * {@link ContentResolver#openFileDescriptor(Uri, String)}. + */ + public static void install() { + // If feature is disabled, we don't need to install + if (!DEPRECATE_DATA_COLUMNS) return; + + // If app is modern enough, we don't need to install + if (VMRuntime.getRuntime().getTargetSdkVersion() >= Build.VERSION_CODES.Q) return; + + // Install interception and make sure it sticks! + Os def = null; + do { + def = Os.getDefault(); + } while (!Os.compareAndSetDefault(def, new AndroidOs(def))); + } + + private AndroidOs(Os os) { + super(os); + } + + private FileDescriptor openDeprecatedDataPath(String path, int mode) throws ErrnoException { + final Uri uri = ContentResolver.translateDeprecatedDataPath(path); + Log.v(TAG, "Redirecting " + path + " to " + uri); + + final ContentResolver cr = currentActivityThread().getApplication() + .getContentResolver(); + try { + final FileDescriptor fd = new FileDescriptor(); + fd.setInt$(cr.openFileDescriptor(uri, + FileUtils.translateModePosixToString(mode)).detachFd()); + return fd; + } catch (FileNotFoundException e) { + throw new ErrnoException(e.getMessage(), OsConstants.ENOENT); + } + } + + @Override + public boolean access(String path, int mode) throws ErrnoException { + if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) { + // If we opened it okay, then access check succeeded + IoUtils.closeQuietly( + openDeprecatedDataPath(path, FileUtils.translateModeAccessToPosix(mode))); + return true; + } else { + return super.access(path, mode); + } + } + + @Override + public FileDescriptor open(String path, int flags, int mode) throws ErrnoException { + if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) { + return openDeprecatedDataPath(path, mode); + } else { + return super.open(path, flags, mode); + } + } + + @Override + public StructStat stat(String path) throws ErrnoException { + if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) { + final FileDescriptor fd = openDeprecatedDataPath(path, OsConstants.O_RDONLY); + try { + return android.system.Os.fstat(fd); + } finally { + IoUtils.closeQuietly(fd); + } + } else { + return super.stat(path); } } } @@ -6850,6 +6930,9 @@ public final class ActivityThread extends ClientTransactionHandler { public static void main(String[] args) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain"); + // Install selective syscall interception + AndroidOs.install(); + // CloseGuard defaults to true and can be quite spammy. We // disable it here, but selectively enable it later (via // StrictMode) on debug builds, but using DropBox, not logs. @@ -6899,6 +6982,6 @@ public final class ActivityThread extends ClientTransactionHandler { } // ------------------ Regular JNI ------------------------ - + private native void nPurgePendingResources(); private native void nDumpGraphicsInfo(FileDescriptor fd); } diff --git a/core/java/android/app/AppOpsManager.aidl b/core/java/android/app/AppOpsManager.aidl index 4b97a15f6181cded4766efa4f1461b16f1f27170..9329fbc833768967ec43769ba8b0ffe84ff67e2f 100644 --- a/core/java/android/app/AppOpsManager.aidl +++ b/core/java/android/app/AppOpsManager.aidl @@ -18,3 +18,6 @@ package android.app; parcelable AppOpsManager.PackageOps; parcelable AppOpsManager.OpEntry; + +parcelable AppOpsManager.HistoricalPackageOps; +parcelable AppOpsManager.HistoricalOpEntry; diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index a30ae799bd3dddab878cd63a418be743bd8f3b4f..9e109c534ba92241258d67b35d6aaf3754124bd7 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -17,7 +17,9 @@ package android.app; import android.Manifest; +import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; @@ -25,7 +27,10 @@ import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.usage.UsageStatsManager; import android.content.Context; +import android.content.pm.ParceledListSlice; +import android.database.ContentObserver; import android.media.AudioAttributes.AttributeUsage; +import android.net.Uri; import android.os.Binder; import android.os.IBinder; import android.os.Parcel; @@ -33,6 +38,7 @@ import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.UserManager; +import android.provider.Settings; import android.util.ArrayMap; import com.android.internal.app.IAppOpsActiveCallback; @@ -40,10 +46,14 @@ import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; import com.android.internal.util.Preconditions; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * API for interacting with "application operation" tracking. @@ -137,22 +147,38 @@ public class AppOpsManager { "foreground", // MODE_FOREGROUND }; + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(flag = true, prefix = { "UID_STATE_" }, value = { + UID_STATE_PERSISTENT, + UID_STATE_TOP, + UID_STATE_FOREGROUND_SERVICE, + UID_STATE_FOREGROUND, + UID_STATE_BACKGROUND, + UID_STATE_CACHED + }) + public @interface UidState {} + /** * Metrics about an op when its uid is persistent. * @hide */ + @SystemApi public static final int UID_STATE_PERSISTENT = 0; /** * Metrics about an op when its uid is at the top. * @hide */ + @SystemApi public static final int UID_STATE_TOP = 1; /** * Metrics about an op when its uid is running a foreground service. * @hide */ + @SystemApi public static final int UID_STATE_FOREGROUND_SERVICE = 2; /** @@ -165,18 +191,21 @@ public class AppOpsManager { * Metrics about an op when its uid is in the foreground for any other reasons. * @hide */ + @SystemApi public static final int UID_STATE_FOREGROUND = 3; /** * Metrics about an op when its uid is in the background for any reason. * @hide */ + @SystemApi public static final int UID_STATE_BACKGROUND = 4; /** * Metrics about an op when its uid is cached. * @hide */ + @SystemApi public static final int UID_STATE_CACHED = 5; /** @@ -1283,13 +1312,13 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, // POST_NOTIFICATION AppOpsManager.MODE_ALLOWED, // NEIGHBORING_CELLS AppOpsManager.MODE_ALLOWED, // CALL_PHONE - AppOpsManager.MODE_DEFAULT, // READ_SMS - AppOpsManager.MODE_DEFAULT, // WRITE_SMS - AppOpsManager.MODE_DEFAULT, // RECEIVE_SMS + AppOpsManager.MODE_ALLOWED, // READ_SMS + AppOpsManager.MODE_IGNORED, // WRITE_SMS + AppOpsManager.MODE_ALLOWED, // RECEIVE_SMS AppOpsManager.MODE_ALLOWED, // RECEIVE_EMERGENCY_BROADCAST AppOpsManager.MODE_ALLOWED, // RECEIVE_MMS - AppOpsManager.MODE_DEFAULT, // RECEIVE_WAP_PUSH - AppOpsManager.MODE_DEFAULT, // SEND_SMS + AppOpsManager.MODE_ALLOWED, // RECEIVE_WAP_PUSH + AppOpsManager.MODE_ALLOWED, // SEND_SMS AppOpsManager.MODE_ALLOWED, // READ_ICC_SMS AppOpsManager.MODE_ALLOWED, // WRITE_ICC_SMS AppOpsManager.MODE_DEFAULT, // WRITE_SETTINGS @@ -1326,7 +1355,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, // PROCESS_OUTGOING_CALLS AppOpsManager.MODE_ALLOWED, // USE_FINGERPRINT AppOpsManager.MODE_ALLOWED, // BODY_SENSORS - AppOpsManager.MODE_DEFAULT, // READ_CELL_BROADCASTS + AppOpsManager.MODE_ALLOWED, // READ_CELL_BROADCASTS AppOpsManager.MODE_ERRORED, // MOCK_LOCATION AppOpsManager.MODE_ALLOWED, // READ_EXTERNAL_STORAGE AppOpsManager.MODE_ALLOWED, // WRITE_EXTERNAL_STORAGE @@ -1536,6 +1565,19 @@ public class AppOpsManager { return sOpPerms[op]; } + /** + * Retrieve the permission associated with an operation, or null if there is not one. + * + * @param op The operation name. + * + * @hide + */ + @Nullable + @SystemApi + public static String opToPermission(@NonNull String op) { + return opToPermission(strOpToOp(op)); + } + /** * Retrieve the user restriction associated with an operation, or null if there is not one. * @hide @@ -1570,9 +1612,65 @@ public class AppOpsManager { * @hide */ public static int opToDefaultMode(int op) { + // STOPSHIP b/118520006: Hardcode the default values once the feature is stable. + switch (op) { + // SMS permissions + case AppOpsManager.OP_SEND_SMS: + case AppOpsManager.OP_RECEIVE_SMS: + case AppOpsManager.OP_READ_SMS: + case AppOpsManager.OP_RECEIVE_WAP_PUSH: + case AppOpsManager.OP_RECEIVE_MMS: + case AppOpsManager.OP_READ_CELL_BROADCASTS: + // CallLog permissions + case AppOpsManager.OP_READ_CALL_LOG: + case AppOpsManager.OP_WRITE_CALL_LOG: + case AppOpsManager.OP_PROCESS_OUTGOING_CALLS: { + if (sSmsAndCallLogRestrictionEnabled.get() == 1) { + return AppOpsManager.MODE_DEFAULT; + } + } + } return sOpDefaultMode[op]; } + // STOPSHIP b/118520006: Hardcode the default values once the feature is stable. + private static final AtomicInteger sSmsAndCallLogRestrictionEnabled = new AtomicInteger(-1); + + // STOPSHIP b/118520006: Hardcode the default values once the feature is stable. + static { + final Context context = ActivityThread.currentApplication(); + if (context != null) { + sSmsAndCallLogRestrictionEnabled.set(ActivityThread.currentActivityThread() + .getIntCoreSetting(Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0)); + + final Uri uri = + Settings.Global.getUriFor(Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED); + context.getContentResolver().registerContentObserver(uri, false, new ContentObserver( + context.getMainThreadHandler()) { + @Override + public void onChange(boolean selfChange) { + sSmsAndCallLogRestrictionEnabled.set(Settings.Global.getInt( + context.getContentResolver(), + Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0)); + } + }); + } + } + + /** + * Retrieve the default mode for the app op. + * + * @param appOp The app op name + * + * @return the default mode for the app op + * + * @hide + */ + @SystemApi + public static int opToDefaultMode(@NonNull String appOp) { + return opToDefaultMode(strOpToOp(appOp)); + } + /** * Retrieve the human readable mode. * @hide @@ -1868,6 +1966,377 @@ public class AppOpsManager { }; } + /** + * This class represents historical app op information about a package. The history + * is aggregated information about ops for a certain amount of time such + * as the times the op was accessed, the times the op was rejected, the total + * duration the app op has been accessed. + * + * @hide + */ + @TestApi + @SystemApi + public static final class HistoricalPackageOps implements Parcelable { + private final int mUid; + private final @NonNull String mPackageName; + private final @NonNull List mEntries; + + /** + * @hide + */ + public HistoricalPackageOps(int uid, @NonNull String packageName) { + mUid = uid; + mPackageName = packageName; + mEntries = new ArrayList<>(); + } + + HistoricalPackageOps(@NonNull Parcel parcel) { + mUid = parcel.readInt(); + mPackageName = parcel.readString(); + mEntries = parcel.createTypedArrayList(HistoricalOpEntry.CREATOR); + } + + /** + * @hide + */ + public void addEntry(@NonNull HistoricalOpEntry entry) { + mEntries.add(entry); + } + + /** + * Gets the package name which the data represents. + * + * @return The package name which the data represents. + */ + public @NonNull String getPackageName() { + return mPackageName; + } + + /** + * Gets the UID which the data represents. + * + * @return The UID which the data represents. + */ + public int getUid() { + return mUid; + } + + /** + * Gets number historical app op entries. + * + * @return The number historical app op entries. + * + * @see #getEntryAt(int) + */ + public int getEntryCount() { + return mEntries.size(); + } + + /** + * Gets the historical at a given index. + * + * @param index The index to lookup. + * + * @return The entry at the given index. + * + * @see #getEntryCount() + */ + public @NonNull HistoricalOpEntry getEntryAt(int index) { + return mEntries.get(index); + } + + /** + * Gets the historical entry for a given op name. + * + * @param opName The op name. + * + * @return The historical entry for that op name. + */ + public @Nullable HistoricalOpEntry getEntry(@NonNull String opName) { + final int entryCount = mEntries.size(); + for (int i = 0; i < entryCount; i++) { + final HistoricalOpEntry entry = mEntries.get(i); + if (entry.getOp().equals(opName)) { + return entry; + } + } + return null; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel parcel, int flags) { + parcel.writeInt(mUid); + parcel.writeString(mPackageName); + parcel.writeTypedList(mEntries, flags); + } + + public static final Creator CREATOR = + new Creator() { + @Override + public @NonNull HistoricalPackageOps createFromParcel(@NonNull Parcel parcel) { + return new HistoricalPackageOps(parcel); + } + + @Override + public @NonNull HistoricalPackageOps[] newArray(int size) { + return new HistoricalPackageOps[size]; + } + }; + } + + /** + * This class represents historical information about an app op. The history + * is aggregated information about the op for a certain amount of time such + * as the times the op was accessed, the times the op was rejected, the total + * duration the app op has been accessed. + * + * @hide + */ + @TestApi + @SystemApi + public static final class HistoricalOpEntry implements Parcelable { + private final int mOp; + private final long[] mAccessCount; + private final long[] mRejectCount; + private final long[] mAccessDuration; + + /** + * @hide + */ + public HistoricalOpEntry(int op) { + mOp = op; + mAccessCount = new long[_NUM_UID_STATE]; + mRejectCount = new long[_NUM_UID_STATE]; + mAccessDuration = new long[_NUM_UID_STATE]; + } + + HistoricalOpEntry(@NonNull Parcel parcel) { + mOp = parcel.readInt(); + mAccessCount = parcel.createLongArray(); + mRejectCount = parcel.createLongArray(); + mAccessDuration = parcel.createLongArray(); + } + + /** + * @hide + */ + public void addEntry(@UidState int uidState, long accessCount, + long rejectCount, long accessDuration) { + mAccessCount[uidState] = accessCount; + mRejectCount[uidState] = rejectCount; + mAccessDuration[uidState] = accessDuration; + } + + /** + * Gets the op name. + * + * @return The op name. + */ + public @NonNull String getOp() { + return sOpToString[mOp]; + } + + /** + * Gets the number times the op was accessed (performed) in the foreground. + * + * @return The times the op was accessed in the foreground. + * + * @see #getBackgroundAccessCount() + * @see #getAccessCount(int) + */ + public long getForegroundAccessCount() { + return sum(mAccessCount, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + } + + /** + * Gets the number times the op was accessed (performed) in the background. + * + * @return The times the op was accessed in the background. + * + * @see #getForegroundAccessCount() + * @see #getAccessCount(int) + */ + public long getBackgroundAccessCount() { + return sum(mAccessCount, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + } + + /** + * Gets the number times the op was accessed (performed) for a given uid state. + * + * @param uidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * + * @return The times the op was accessed for the given UID state. + * + * @see #getForegroundAccessCount() + * @see #getBackgroundAccessCount() + */ + public long getAccessCount(@UidState int uidState) { + return mAccessCount[uidState]; + } + + /** + * Gets the number times the op was rejected in the foreground. + * + * @return The times the op was rejected in the foreground. + * + * @see #getBackgroundRejectCount() + * @see #getRejectCount(int) + */ + public long getForegroundRejectCount() { + return sum(mRejectCount, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + } + + /** + * Gets the number times the op was rejected in the background. + * + * @return The times the op was rejected in the background. + * + * @see #getForegroundRejectCount() + * @see #getRejectCount(int) + */ + public long getBackgroundRejectCount() { + return sum(mRejectCount, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + } + + /** + * Gets the number times the op was rejected for a given uid state. + * + * @param uidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * + * @return The times the op was rejected for the given UID state. + * + * @see #getForegroundRejectCount() + * @see #getBackgroundRejectCount() + */ + public long getRejectCount(@UidState int uidState) { + return mRejectCount[uidState]; + } + + /** + * Gets the total duration the app op was accessed (performed) in the foreground. + * + * @return The total duration the app op was accessed in the foreground. + * + * @see #getBackgroundAccessDuration() + * @see #getAccessDuration(int) + */ + public long getForegroundAccessDuration() { + return sum(mAccessDuration, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + } + + /** + * Gets the total duration the app op was accessed (performed) in the background. + * + * @return The total duration the app op was accessed in the background. + * + * @see #getForegroundAccessDuration() + * @see #getAccessDuration(int) + */ + public long getBackgroundAccessDuration() { + return sum(mAccessDuration, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + } + + /** + * Gets the total duration the app op was accessed (performed) for a given UID state. + * + * @param uidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * + * @return The total duration the app op was accessed for the given UID state. + * + * @see #getForegroundAccessDuration() + * @see #getBackgroundAccessDuration() + */ + public long getAccessDuration(@UidState int uidState) { + return mAccessDuration[uidState]; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeInt(mOp); + parcel.writeLongArray(mAccessCount); + parcel.writeLongArray(mRejectCount); + parcel.writeLongArray(mAccessDuration); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null || getClass() != other.getClass()) { + return false; + } + final HistoricalOpEntry otherInstance = (HistoricalOpEntry) other; + if (mOp != otherInstance.mOp) { + return false; + } + if (!Arrays.equals(mAccessCount, otherInstance.mAccessCount)) { + return false; + } + if (!Arrays.equals(mRejectCount, otherInstance.mRejectCount)) { + return false; + } + return Arrays.equals(mAccessDuration, otherInstance.mAccessDuration); + } + + @Override + public int hashCode() { + int result = mOp; + result = 31 * result + Arrays.hashCode(mAccessCount); + result = 31 * result + Arrays.hashCode(mRejectCount); + result = 31 * result + Arrays.hashCode(mAccessDuration); + return result; + } + + /** + * + * Computes the sum given the start and end index. + * + * @param counts The data array. + * @param start The start index (inclusive) + * @param end The end index (exclusive) + * @return The sum. + */ + private static long sum(@NonNull long[] counts, int start, int end) { + long totalCount = 0; + for (int i = start; i < end; i++) { + totalCount += counts[i]; + } + return totalCount; + } + + public static final Creator CREATOR = new Creator() { + @Override + public @NonNull HistoricalOpEntry createFromParcel(@NonNull Parcel source) { + return new HistoricalOpEntry(source); + } + + @Override + public @NonNull HistoricalOpEntry[] newArray(int size) { + return new HistoricalOpEntry[size]; + } + }; + } + /** * Callback for notification of changes to operation state. */ @@ -1924,6 +2393,30 @@ public class AppOpsManager { } } + /** + * Retrieve current operation state for all applications. + * + * @param ops The set of operations you are interested in, or null if you want all of them. + * @hide + */ + @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) + @SystemApi + public List getPackagesForOpStrs(String[] ops) { + if (ops == null) { + return getPackagesForOps(null); + } + final int[] opCodes = new int[ops.length]; + for (int i = 0; i < ops.length; ++i) { + final Integer opCode = sOpStrToOp.get(ops[i]); + if (opCode == null) { + opCodes[i] = OP_NONE; + } else { + opCodes[i] = opCode; + } + } + return getPackagesForOps(opCodes); + } + /** * Retrieve current operation state for one application. * @@ -1942,6 +2435,74 @@ public class AppOpsManager { } } + /** + * Retrieve historical app op stats for a package. + * + * @param uid The UID to query for. + * @param packageName The package to query for. + * @param beginTimeMillis The beginning of the interval in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). Must be non + * negative. + * @param endTimeMillis The end of the interval in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). Must be after + * {@code beginTimeMillis}. + * @param opNames The ops to query for. Pass {@code null} for all ops. + * + * @return The historical ops or {@code null} if there are no ops for this package. + * + * @throws IllegalArgumentException If any of the argument contracts is violated. + * + * @hide + */ + @TestApi + @SystemApi + @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) + public @Nullable HistoricalPackageOps getHistoricalPackagesOps( + int uid, @NonNull String packageName, @Nullable String[] opNames, + long beginTimeMillis, long endTimeMillis) { + try { + return mService.getHistoricalPackagesOps(uid, packageName, opNames, + beginTimeMillis, endTimeMillis); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Retrieve historical app op stats for all packages. + * + * @param beginTimeMillis The beginning of the interval in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). Must be non + * negative. + * @param endTimeMillis The end of the interval in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). Must be after + * {@code beginTimeMillis}. + * @param opNames The ops to query for. Pass {@code null} for all ops. + * + * @return The historical ops or an empty list if there are no ops for any package. + * + * @throws IllegalArgumentException If any of the argument contracts is violated. + * + * @hide + */ + @TestApi + @SystemApi + @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) + public @NonNull List getAllHistoricPackagesOps( + @Nullable String[] opNames, long beginTimeMillis, long endTimeMillis) { + try { + @SuppressWarnings("unchecked") + final ParceledListSlice payload = + mService.getAllHistoricalPackagesOps(opNames, beginTimeMillis, endTimeMillis); + if (payload != null) { + return payload.getList(); + } + return Collections.emptyList(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Sets given app op in the specified mode for app ops in the UID. * This applies to all apps currently in the UID or installed in diff --git a/core/java/android/app/AppOpsManagerInternal.java b/core/java/android/app/AppOpsManagerInternal.java index f5d5e6e9a95055df9f7bc4c82b411a538ad224e2..7fe21b23738c8d1d7fc4b50658ba61619c8021a4 100644 --- a/core/java/android/app/AppOpsManagerInternal.java +++ b/core/java/android/app/AppOpsManagerInternal.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.NonNull; import android.util.SparseIntArray; import com.android.internal.util.function.QuadFunction; @@ -73,4 +74,21 @@ public abstract class AppOpsManagerInternal { * access to app ops for their user. */ public abstract void setDeviceAndProfileOwners(SparseIntArray owners); + + /** + * Sets the app-ops mode for a certain app-op and uid. + * + *

Similar as {@link AppOpsManager#setMode} but does not require the package manager to be + * working. Hence this can be used very early during boot. + * + *

Only for internal callers. Does not verify that package name belongs to uid. + * + * @param code The op code to set. + * @param uid The UID for which to set. + * @param packageName The package for which to set. + * @param mode The new mode to set. + * @param isPrivileged If the package is privileged + */ + public abstract void setMode(int code, int uid, @NonNull String packageName, int mode, + boolean isPrivileged); } diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index fcd9a05112652a29487272fb29f77d8f6ef9af5b..8bb704d76e85879ac0b6e781adbd2fb44502b21d 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2276,6 +2276,15 @@ public class ApplicationPackageManager extends PackageManager { } } + @Override + public boolean canSuspendPackage(String packageName) { + try { + return mPM.canSuspendPackageForUser(packageName, mContext.getUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + @Override public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras; diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java index 62f6bac2a24f366ff6b95ed0f63adca97ae64c7a..e2f2075f0a329ca1784c556c04754983f4020ed3 100644 --- a/core/java/android/app/AutomaticZenRule.java +++ b/core/java/android/app/AutomaticZenRule.java @@ -31,7 +31,10 @@ import java.util.Objects; * Rule instance information for zen mode. */ public final class AutomaticZenRule implements Parcelable { - + /* @hide */ + private static final int ENABLED = 1; + /* @hide */ + private static final int DISABLED = 0; private boolean enabled = false; private String name; private @InterruptionFilter int interruptionFilter; @@ -39,6 +42,7 @@ public final class AutomaticZenRule implements Parcelable { private ComponentName owner; private long creationTime; private ZenPolicy mZenPolicy; + private boolean mModified = false; /** * Creates an automatic zen rule. @@ -101,8 +105,8 @@ public final class AutomaticZenRule implements Parcelable { } public AutomaticZenRule(Parcel source) { - enabled = source.readInt() == 1; - if (source.readInt() == 1) { + enabled = source.readInt() == ENABLED; + if (source.readInt() == ENABLED) { name = source.readString(); } interruptionFilter = source.readInt(); @@ -110,6 +114,7 @@ public final class AutomaticZenRule implements Parcelable { owner = source.readParcelable(null); creationTime = source.readLong(); mZenPolicy = source.readParcelable(null); + mModified = source.readInt() == ENABLED; } /** @@ -147,11 +152,19 @@ public final class AutomaticZenRule implements Parcelable { return enabled; } + /** + * Returns whether this rule's name has been modified by the user. + * @hide + */ + public boolean isModified() { + return mModified; + } + /** * Gets the zen policy. */ public ZenPolicy getZenPolicy() { - return this.mZenPolicy.copy(); + return mZenPolicy == null ? null : this.mZenPolicy.copy(); } /** @@ -190,6 +203,14 @@ public final class AutomaticZenRule implements Parcelable { this.enabled = enabled; } + /** + * Sets modified state of this rule. + * @hide + */ + public void setModified(boolean modified) { + this.mModified = modified; + } + /** * Sets the zen policy. */ @@ -204,7 +225,7 @@ public final class AutomaticZenRule implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(enabled ? 1 : 0); + dest.writeInt(enabled ? ENABLED : DISABLED); if (name != null) { dest.writeInt(1); dest.writeString(name); @@ -216,6 +237,7 @@ public final class AutomaticZenRule implements Parcelable { dest.writeParcelable(owner, 0); dest.writeLong(creationTime); dest.writeParcelable(mZenPolicy, 0); + dest.writeInt(mModified ? ENABLED : DISABLED); } @Override @@ -237,6 +259,7 @@ public final class AutomaticZenRule implements Parcelable { if (o == this) return true; final AutomaticZenRule other = (AutomaticZenRule) o; return other.enabled == enabled + && other.mModified == mModified && Objects.equals(other.name, name) && other.interruptionFilter == interruptionFilter && Objects.equals(other.conditionId, conditionId) @@ -248,7 +271,7 @@ public final class AutomaticZenRule implements Parcelable { @Override public int hashCode() { return Objects.hash(enabled, name, interruptionFilter, conditionId, owner, creationTime, - mZenPolicy); + mZenPolicy, mModified); } public static final Parcelable.Creator CREATOR diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index dc707e892d9a7373a59b3a3b0860760a4e7132b3..9837deb6143c99870c29d3018af84dee47dffd4a 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -140,6 +140,13 @@ class ReceiverRestrictedContext extends ContextWrapper { throw new ReceiverCallNotAllowedException( "BroadcastReceiver components are not allowed to bind to services"); } + + @Override + public boolean bindIsolatedService(Intent service, ServiceConnection conn, int flags, + String instanceName) { + throw new ReceiverCallNotAllowedException( + "BroadcastReceiver components are not allowed to bind to services"); + } } /** @@ -1630,14 +1637,25 @@ class ContextImpl extends Context { public boolean bindService(Intent service, ServiceConnection conn, int flags) { warnIfCallingFromSystemProcess(); - return bindServiceCommon(service, conn, flags, mMainThread.getHandler(), getUser()); + return bindServiceCommon(service, conn, flags, null, mMainThread.getHandler(), getUser()); + } + + @Override + public boolean bindIsolatedService(Intent service, ServiceConnection conn, + int flags, String instanceName) { + warnIfCallingFromSystemProcess(); + if (instanceName == null) { + throw new NullPointerException("null instanceName"); + } + return bindServiceCommon(service, conn, flags, instanceName, mMainThread.getHandler(), + getUser()); } /** @hide */ @Override public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, UserHandle user) { - return bindServiceCommon(service, conn, flags, mMainThread.getHandler(), user); + return bindServiceCommon(service, conn, flags, null, mMainThread.getHandler(), user); } /** @hide */ @@ -1647,7 +1665,7 @@ class ContextImpl extends Context { if (handler == null) { throw new IllegalArgumentException("handler must not be null."); } - return bindServiceCommon(service, conn, flags, handler, user); + return bindServiceCommon(service, conn, flags, null, handler, user); } /** @hide */ @@ -1669,7 +1687,8 @@ class ContextImpl extends Context { return mMainThread.getHandler(); } - private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags, Handler + private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags, + String instanceName, Handler handler, UserHandle user) { // Keep this in sync with DevicePolicyManager.bindDeviceAdminServiceAsUser. IServiceConnection sd; @@ -1690,10 +1709,10 @@ class ContextImpl extends Context { flags |= BIND_WAIVE_PRIORITY; } service.prepareToLeaveProcess(this); - int res = ActivityManager.getService().bindService( + int res = ActivityManager.getService().bindIsolatedService( mMainThread.getApplicationThread(), getActivityToken(), service, service.resolveTypeIfNeeded(getContentResolver()), - sd, flags, getOpPackageName(), user.getIdentifier()); + sd, flags, instanceName, getOpPackageName(), user.getIdentifier()); if (res < 0) { throw new SecurityException( "Not allowed to bind to service " + service); diff --git a/core/java/android/app/DexLoadReporter.java b/core/java/android/app/DexLoadReporter.java index 0643414727cfd4e03dc1432ceecdbac91a735744..229bee55e9115ca7326b2dc770626b71942e660b 100644 --- a/core/java/android/app/DexLoadReporter.java +++ b/core/java/android/app/DexLoadReporter.java @@ -87,7 +87,7 @@ import java.util.Set; } @Override - public void report(List classLoadersChain, List classPaths) { + public void report(List classLoadersChain, List classPaths) { if (classLoadersChain.size() != classPaths.size()) { Slog.wtf(TAG, "Bad call to DexLoadReporter: argument size mismatch"); return; @@ -113,12 +113,12 @@ import java.util.Set; registerSecondaryDexForProfiling(dexPathsForRegistration); } - private void notifyPackageManager(List classLoadersChain, + private void notifyPackageManager(List classLoadersChain, List classPaths) { // Get the class loader names for the binder call. List classLoadersNames = new ArrayList<>(classPaths.size()); - for (BaseDexClassLoader bdc : classLoadersChain) { - classLoadersNames.add(bdc.getClass().getName()); + for (ClassLoader classLoader : classLoadersChain) { + classLoadersNames.add(classLoader.getClass().getName()); } String packageName = ActivityThread.currentPackageName(); try { diff --git a/core/java/android/app/FragmentTransition.java b/core/java/android/app/FragmentTransition.java index ceb828b64addc9a2ddd03b28e6a95a0d05633757..0e428ae164a4dfb93d3fe507af5a7ab0e39e2b4b 100644 --- a/core/java/android/app/FragmentTransition.java +++ b/core/java/android/app/FragmentTransition.java @@ -1013,6 +1013,11 @@ class FragmentTransition { replaceTargets(sharedElementTransition, sharedElementsIn, null); } } + + @Override + public void onTransitionEnd(Transition transition) { + transition.removeListener(this); + } }); } diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 519a2749e5bb02f18a9bd10e5ef0894c45b76279..f27c6677ed22e2387bca501dab846f49f796b1e1 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -133,9 +133,13 @@ interface IActivityManager { in String resolvedType, boolean requireForeground, in String callingPackage, int userId); int stopService(in IApplicationThread caller, in Intent service, in String resolvedType, int userId); + // Currently keeping old bindService because it is on the greylist int bindService(in IApplicationThread caller, in IBinder token, in Intent service, in String resolvedType, in IServiceConnection connection, int flags, in String callingPackage, int userId); + int bindIsolatedService(in IApplicationThread caller, in IBinder token, in Intent service, + in String resolvedType, in IServiceConnection connection, int flags, + in String instanceName, in String callingPackage, int userId); boolean unbindService(in IServiceConnection connection); void publishService(in IBinder token, in Intent intent, in IBinder service); void setDebugApp(in String packageName, boolean waitForDebugger, boolean persistent); @@ -265,17 +269,6 @@ interface IActivityManager { void getMyMemoryState(out ActivityManager.RunningAppProcessInfo outInfo); boolean killProcessesBelowForeground(in String reason); UserInfo getCurrentUser(); - /** - * Informs ActivityManagerService that the keyguard is showing. - * - * @param showingKeyguard True if the keyguard is showing, false otherwise. - * @param showingAod True if AOD is showing, false otherwise. - * @param secondaryDisplayShowing The displayId of the secondary display on which the keyguard - * is showing, or INVALID_DISPLAY if there is no such display. Only meaningful if - * showing is true. - */ - void setLockScreenShown(boolean showingKeyguard, boolean showingAod, - int secondaryDisplayShowing); // This is not public because you need to be very careful in how you // manage your activity to make sure it is always the uid you expect. int getLaunchedFromUid(in IBinder activityToken); @@ -486,7 +479,7 @@ interface IActivityManager { * instrumentation at a time. An active instrumentation is one running and * started from the shell. */ - void startDelegateShellPermissionIdentity(int uid); + void startDelegateShellPermissionIdentity(int uid, in String[] permissions); /** * Method for the shell UID to stop deletating its permission identity to an diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl index b7b6352ad5cf304826732091615b0b8e5da48913..09b77d5b8d0aed34ade92b742b57d0c93034ae0e 100644 --- a/core/java/android/app/IActivityTaskManager.aidl +++ b/core/java/android/app/IActivityTaskManager.aidl @@ -118,7 +118,7 @@ interface IActivityTaskManager { int startActivityAsCaller(in IApplicationThread caller, in String callingPackage, in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options, - boolean ignoreTargetSecurity, int userId); + IBinder permissionToken, boolean ignoreTargetSecurity, int userId); void unhandledBack(); boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask); @@ -177,6 +177,7 @@ interface IActivityTaskManager { void cancelRecentsAnimation(boolean restoreHomeStackPosition); void startLockTaskModeByToken(in IBinder token); void stopLockTaskModeByToken(in IBinder token); + void updateLockTaskPackages(int userId, in String[] packages); boolean isInLockTaskMode(); int getLockTaskModeState(); void setTaskDescription(in IBinder token, in ActivityManager.TaskDescription values); @@ -192,6 +193,20 @@ interface IActivityTaskManager { in ActivityManager.TaskDescription description, in Bitmap thumbnail); Point getAppTaskThumbnailSize(); boolean releaseActivityInstance(in IBinder token); + /** + * Only callable from the system. This token grants a temporary permission to call + * #startActivityAsCallerWithToken. The token will time out after + * START_AS_CALLER_TOKEN_TIMEOUT if it is not used. + * + * @param delegatorToken The Binder token referencing the system Activity that wants to delegate + * the #startActivityAsCaller to another app. The "caller" will be the caller of this + * activity's token, not the delegate's caller (which is probably the delegator itself). + * + * @return Returns a token that can be given to a "delegate" app that may call + * #startActivityAsCaller + */ + IBinder requestStartActivityPermissionToken(in IBinder delegatorToken); + void releaseSomeActivities(in IApplicationThread app); Bitmap getTaskDescriptionIcon(in String filename, int userId); void startInPlaceAnimationOnFrontMostApplication(in Bundle opts); @@ -244,16 +259,16 @@ interface IActivityTaskManager { ActivityManager.StackInfo getStackInfo(int windowingMode, int activityType); /** - * Informs ActivityManagerService that the keyguard is showing. + * Informs ActivityTaskManagerService that the keyguard is showing. * * @param showingKeyguard True if the keyguard is showing, false otherwise. * @param showingAod True if AOD is showing, false otherwise. - * @param secondaryDisplayShowing The displayId of the secondary display on which the keyguard - * is showing, or INVALID_DISPLAY if there is no such display. Only meaningful if - * showing is true. + * @param secondaryDisplaysShowing The displayId's of the secondary displays on which the + * keyguard is showing, or {@code null} if there is no such display. Only meaningful if showing + * is {@code true}. */ void setLockScreenShown(boolean showingKeyguard, boolean showingAod, - int secondaryDisplayShowing); + in int[] secondaryDisplaysShowing); Bundle getAssistContextExtras(int requestType); boolean launchAssistIntent(in Intent intent, int requestType, in String hint, int userHandle, in Bundle args); diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index 357420bd0217088e34d8d4c133594fc1d9efd538..362f4aedc900b373941f6b5220063c54610e8e80 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -88,6 +88,8 @@ interface INotificationManager ParceledListSlice getRecentNotifyingAppsForUser(int userId); int getBlockedAppCount(int userId); boolean areChannelsBypassingDnd(); + int getAppsBypassingDndCount(int uid); + ParceledListSlice getNotificationChannelsBypassingDnd(String pkg, int userId); // TODO: Remove this when callers have been migrated to the equivalent // INotificationListener method. @@ -146,6 +148,7 @@ interface INotificationManager int getZenMode(); ZenModeConfig getZenModeConfig(); + NotificationManager.Policy getConsolidatedNotificationPolicy(); oneway void setZenMode(int mode, in Uri conditionId, String reason); oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions); boolean isNotificationPolicyAccessGranted(String pkg); diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl index ac4bf7d9c2c512dd9930d32917d9619bdce4d3be..96da72a1b517647651655769b7895e5e80438c72 100644 --- a/core/java/android/app/IUiAutomationConnection.aidl +++ b/core/java/android/app/IUiAutomationConnection.aidl @@ -47,7 +47,7 @@ interface IUiAutomationConnection { in ParcelFileDescriptor source); void grantRuntimePermission(String packageName, String permission, int userId); void revokeRuntimePermission(String packageName, String permission, int userId); - void adoptShellPermissionIdentity(int uid); + void adoptShellPermissionIdentity(int uid, in String[] permissions); void dropShellPermissionIdentity(); // Called from the system process. oneway void shutdown(); diff --git a/core/java/android/app/InstantAppResolverService.java b/core/java/android/app/InstantAppResolverService.java index 8f83ee3e277919bb26de8d6274795b347087532c..b1541c6b8780d04ed9b2de0ca91984a0fac7fbd3 100644 --- a/core/java/android/app/InstantAppResolverService.java +++ b/core/java/android/app/InstantAppResolverService.java @@ -240,7 +240,7 @@ public abstract class InstantAppResolverService extends Service { args.arg4 = token; args.arg5 = sanitizedIntent; mHandler.obtainMessage(ServiceHandler.MSG_GET_INSTANT_APP_INTENT_FILTER, - callback).sendToTarget(); + args).sendToTarget(); } }; } diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index e4b902e85f5cd92d9224973ba741d307028d7b4f..222ffcc0d01f6f5381ca721b9e8d37a75d63971d 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1010,7 +1010,7 @@ public class Instrumentation { * from its event processing, though it may not have completely * finished reacting from the event -- for example, if it needs to update * its display as a result, it may still be in the process of doing that. - * + * * @param event The event to send to the current focus. */ public void sendKeySync(KeyEvent event) { @@ -1018,14 +1018,7 @@ public class Instrumentation { long downTime = event.getDownTime(); long eventTime = event.getEventTime(); - int action = event.getAction(); - int code = event.getKeyCode(); - int repeatCount = event.getRepeatCount(); - int metaState = event.getMetaState(); - int deviceId = event.getDeviceId(); - int scancode = event.getScanCode(); int source = event.getSource(); - int flags = event.getFlags(); if (source == InputDevice.SOURCE_UNKNOWN) { source = InputDevice.SOURCE_KEYBOARD; } @@ -1035,12 +1028,14 @@ public class Instrumentation { if (downTime == 0) { downTime = eventTime; } - KeyEvent newEvent = new KeyEvent(downTime, eventTime, action, code, repeatCount, metaState, - deviceId, scancode, flags | KeyEvent.FLAG_FROM_SYSTEM, source); + KeyEvent newEvent = new KeyEvent(event); + newEvent.setTime(downTime, eventTime); + newEvent.setSource(source); + newEvent.setFlags(event.getFlags() | KeyEvent.FLAG_FROM_SYSTEM); InputManager.getInstance().injectInputEvent(newEvent, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH); } - + /** * Sends an up and down key event sync to the currently focused window. * @@ -1907,9 +1902,8 @@ public class Instrumentation { @UnsupportedAppUsage public ActivityResult execStartActivityAsCaller( Context who, IBinder contextThread, IBinder token, Activity target, - Intent intent, int requestCode, Bundle options, boolean ignoreTargetSecurity, - int userId) { - android.util.SeempLog.record_str(379, intent.toString()); + Intent intent, int requestCode, Bundle options, IBinder permissionToken, + boolean ignoreTargetSecurity, int userId) { IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1940,7 +1934,8 @@ public class Instrumentation { .startActivityAsCaller(whoThread, who.getBasePackageName(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), token, target != null ? target.mEmbeddedID : null, - requestCode, 0, null, options, ignoreTargetSecurity, userId); + requestCode, 0, null, options, permissionToken, + ignoreTargetSecurity, userId); checkStartActivityResult(result, intent); } catch (RemoteException e) { throw new RuntimeException("Failure from system", e); diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 4f41da6e52fbcb6209e1a7f7c0b5c0cb9aafd2f2..450efdf16656985198cb24802bfc154accf979ec 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -207,7 +207,8 @@ public class Notification implements Parcelable private static final int MAX_REPLY_HISTORY = 5; /** - * Maximum numbers of action buttons in a notification. + * Maximum number of (generic) action buttons in a notification (contextual action buttons are + * handled separately). * @hide */ public static final int MAX_ACTION_BUTTONS = 3; @@ -1275,6 +1276,8 @@ public class Notification implements Parcelable private String mShortcutId; private CharSequence mSettingsText; + private PendingIntent mAppOverlayIntent; + /** @hide */ @IntDef(prefix = { "GROUP_ALERT_" }, value = { GROUP_ALERT_ALL, GROUP_ALERT_CHILDREN, GROUP_ALERT_SUMMARY @@ -1419,6 +1422,12 @@ public class Notification implements Parcelable */ public static final int SEMANTIC_ACTION_CALL = 10; + /** + * {@code SemanticAction}: Contextual action - dependent on the current notification. E.g. + * open a Map application with an address shown in the notification. + */ + public static final int SEMANTIC_ACTION_CONTEXTUAL_SUGGESTION = 11; + private final Bundle mExtras; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private Icon mIcon; @@ -2040,7 +2049,8 @@ public class Notification implements Parcelable SEMANTIC_ACTION_UNMUTE, SEMANTIC_ACTION_THUMBS_UP, SEMANTIC_ACTION_THUMBS_DOWN, - SEMANTIC_ACTION_CALL + SEMANTIC_ACTION_CALL, + SEMANTIC_ACTION_CONTEXTUAL_SUGGESTION }) @Retention(RetentionPolicy.SOURCE) public @interface SemanticAction {} @@ -2225,6 +2235,9 @@ public class Notification implements Parcelable } mGroupAlertBehavior = parcel.readInt(); + if (parcel.readInt() != 0) { + mAppOverlayIntent = PendingIntent.CREATOR.createFromParcel(parcel); + } } @Override @@ -2339,6 +2352,7 @@ public class Notification implements Parcelable that.mBadgeIcon = this.mBadgeIcon; that.mSettingsText = this.mSettingsText; that.mGroupAlertBehavior = this.mGroupAlertBehavior; + that.mAppOverlayIntent = this.mAppOverlayIntent; if (!heavy) { that.lightenPayload(); // will clean out extras @@ -2660,6 +2674,13 @@ public class Notification implements Parcelable parcel.writeInt(mGroupAlertBehavior); + if (mAppOverlayIntent != null) { + parcel.writeInt(1); + mAppOverlayIntent.writeToParcel(parcel, 0); + } else { + parcel.writeInt(0); + } + // mUsesStandardHeader is not written because it should be recomputed in listeners } @@ -3072,6 +3093,14 @@ public class Notification implements Parcelable return mGroupAlertBehavior; } + /** + * Returns the intent that will be used to display app content in a floating window over the + * existing foreground activity. + */ + public PendingIntent getAppOverlayIntent() { + return mAppOverlayIntent; + } + /** * The small icon representing this notification in the status bar and content view. * @@ -3406,6 +3435,23 @@ public class Notification implements Parcelable return this; } + /** + * Sets the intent that will be used to display app content in a floating window + * over the existing foreground activity. + * + *

This intent will be ignored unless this notification is posted to a channel that + * allows {@link NotificationChannel#canOverlayApps() app overlays}.

+ * + *

Notifications with a valid and allowed app overlay intent will be displayed as + * floating windows outside of the notification shade on unlocked devices. When a user + * interacts with one of these windows, this app overlay intent will be invoked and + * displayed.

+ */ + public Builder setAppOverlayIntent(PendingIntent intent) { + mN.mAppOverlayIntent = intent; + return this; + } + /** @removed */ @Deprecated public Builder setChannel(String channelId) { @@ -4419,6 +4465,7 @@ public class Notification implements Parcelable contentView.setViewVisibility(R.id.time, View.GONE); contentView.setImageViewIcon(R.id.profile_badge, null); contentView.setViewVisibility(R.id.profile_badge, View.GONE); + contentView.setViewVisibility(R.id.alerted_icon, View.GONE); mN.mUsesStandardHeader = false; } @@ -4923,6 +4970,18 @@ public class Notification implements Parcelable result); } + private static List filterOutContextualActions( + List actions) { + List nonContextualActions = new ArrayList<>(); + for (Notification.Action action : actions) { + if (action.getSemanticAction() + != Action.SEMANTIC_ACTION_CONTEXTUAL_SUGGESTION) { + nonContextualActions.add(action); + } + } + return nonContextualActions; + } + private RemoteViews applyStandardTemplateWithActions(int layoutId, StandardTemplateParams p, TemplateBindResult result) { RemoteViews big = applyStandardTemplate(layoutId, p, result); @@ -4931,7 +4990,11 @@ public class Notification implements Parcelable boolean validRemoteInput = false; - int N = mActions.size(); + // In the UI contextual actions appear separately from the standard actions, so we + // filter them out here. + List nonContextualActions = filterOutContextualActions(mActions); + + int N = nonContextualActions.size(); boolean emphazisedMode = mN.fullScreenIntent != null && !p.ambient; big.setBoolean(R.id.actions, "setEmphasizedMode", emphazisedMode); if (N > 0) { @@ -4940,7 +5003,8 @@ public class Notification implements Parcelable big.setViewLayoutMarginBottomDimen(R.id.notification_action_list_margin_target, 0); if (N>MAX_ACTION_BUTTONS) N=MAX_ACTION_BUTTONS; for (int i=0; i 0 ? AudioAttributes.CREATOR.createFromParcel(in) : null; mLightColor = in.readInt(); mBlockableSystem = in.readBoolean(); + mAllowAppOverlay = in.readBoolean(); } @Override @@ -269,6 +282,7 @@ public final class NotificationChannel implements Parcelable { } dest.writeInt(mLightColor); dest.writeBoolean(mBlockableSystem); + dest.writeBoolean(mAllowAppOverlay); } /** @@ -460,6 +474,22 @@ public final class NotificationChannel implements Parcelable { this.mLockscreenVisibility = lockscreenVisibility; } + /** + * Sets whether notifications posted to this channel can appear outside of the notification + * shade, floating over other apps' content. + * + *

This value will be ignored for channels that aren't allowed to pop on screen (that is, + * channels whose {@link #getImportance() importance} is < + * {@link NotificationManager#IMPORTANCE_HIGH}.

+ * + *

Only modifiable before the channel is submitted to + * * {@link NotificationManager#createNotificationChannel(NotificationChannel)}.

+ * @see Notification#getAppOverlayIntent() + */ + public void setAllowAppOverlay(boolean allowAppOverlay) { + mAllowAppOverlay = allowAppOverlay; + } + /** * Returns the id of this channel. */ @@ -572,6 +602,22 @@ public final class NotificationChannel implements Parcelable { return mGroup; } + /** + * Returns whether notifications posted to this channel can display outside of the notification + * shade, in a floating window on top of other apps. + */ + public boolean canOverlayApps() { + return isAppOverlayAllowed() && getImportance() >= IMPORTANCE_HIGH; + } + + /** + * Like {@link #canOverlayApps()}, but only checks the permission, not the importance. + * @hide + */ + public boolean isAppOverlayAllowed() { + return mAllowAppOverlay; + } + /** * @hide */ @@ -603,9 +649,11 @@ public final class NotificationChannel implements Parcelable { } /** - * @hide + * Returns whether the user has chosen the importance of this channel, either to affirm the + * initial selection from the app, or changed it to be higher or lower. + * @see #getImportance() */ - public boolean isImportanceLocked() { + public boolean hasUserSetImportance() { return (mUserLockedFields & USER_LOCKED_IMPORTANCE) != 0; } @@ -651,6 +699,7 @@ public final class NotificationChannel implements Parcelable { lockFields(safeInt(parser, ATT_USER_LOCKED, 0)); setFgServiceShown(safeBool(parser, ATT_FG_SERVICE_SHOWN, false)); setBlockableSystem(safeBool(parser, ATT_BLOCKABLE_SYSTEM, false)); + setAllowAppOverlay(safeBool(parser, ATT_ALLOW_APP_OVERLAY, DEFAULT_ALLOW_APP_OVERLAY)); } @Nullable @@ -769,6 +818,9 @@ public final class NotificationChannel implements Parcelable { if (isBlockableSystem()) { out.attribute(null, ATT_BLOCKABLE_SYSTEM, Boolean.toString(isBlockableSystem())); } + if (canOverlayApps() != DEFAULT_ALLOW_APP_OVERLAY) { + out.attribute(null, ATT_ALLOW_APP_OVERLAY, Boolean.toString(canOverlayApps())); + } out.endTag(null, TAG_CHANNEL); } @@ -811,6 +863,7 @@ public final class NotificationChannel implements Parcelable { record.put(ATT_DELETED, Boolean.toString(isDeleted())); record.put(ATT_GROUP, getGroup()); record.put(ATT_BLOCKABLE_SYSTEM, isBlockableSystem()); + record.put(ATT_ALLOW_APP_OVERLAY, canOverlayApps()); return record; } @@ -898,58 +951,36 @@ public final class NotificationChannel implements Parcelable { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - NotificationChannel that = (NotificationChannel) o; - - if (getImportance() != that.getImportance()) return false; - if (mBypassDnd != that.mBypassDnd) return false; - if (getLockscreenVisibility() != that.getLockscreenVisibility()) return false; - if (mLights != that.mLights) return false; - if (getLightColor() != that.getLightColor()) return false; - if (getUserLockedFields() != that.getUserLockedFields()) return false; - if (mVibrationEnabled != that.mVibrationEnabled) return false; - if (mShowBadge != that.mShowBadge) return false; - if (isDeleted() != that.isDeleted()) return false; - if (isBlockableSystem() != that.isBlockableSystem()) return false; - if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null) return false; - if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) { - return false; - } - if (getDescription() != null ? !getDescription().equals(that.getDescription()) - : that.getDescription() != null) { - return false; - } - if (getSound() != null ? !getSound().equals(that.getSound()) : that.getSound() != null) { - return false; - } - if (!Arrays.equals(mVibration, that.mVibration)) return false; - if (getGroup() != null ? !getGroup().equals(that.getGroup()) : that.getGroup() != null) { - return false; - } - return getAudioAttributes() != null ? getAudioAttributes().equals(that.getAudioAttributes()) - : that.getAudioAttributes() == null; - + return getImportance() == that.getImportance() && + mBypassDnd == that.mBypassDnd && + getLockscreenVisibility() == that.getLockscreenVisibility() && + mLights == that.mLights && + getLightColor() == that.getLightColor() && + getUserLockedFields() == that.getUserLockedFields() && + isFgServiceShown() == that.isFgServiceShown() && + mVibrationEnabled == that.mVibrationEnabled && + mShowBadge == that.mShowBadge && + isDeleted() == that.isDeleted() && + isBlockableSystem() == that.isBlockableSystem() && + mAllowAppOverlay == that.mAllowAppOverlay && + Objects.equals(getId(), that.getId()) && + Objects.equals(getName(), that.getName()) && + Objects.equals(mDesc, that.mDesc) && + Objects.equals(getSound(), that.getSound()) && + Arrays.equals(mVibration, that.mVibration) && + Objects.equals(getGroup(), that.getGroup()) && + Objects.equals(getAudioAttributes(), that.getAudioAttributes()); } @Override public int hashCode() { - int result = getId() != null ? getId().hashCode() : 0; - result = 31 * result + (getName() != null ? getName().hashCode() : 0); - result = 31 * result + (getDescription() != null ? getDescription().hashCode() : 0); - result = 31 * result + getImportance(); - result = 31 * result + (mBypassDnd ? 1 : 0); - result = 31 * result + getLockscreenVisibility(); - result = 31 * result + (getSound() != null ? getSound().hashCode() : 0); - result = 31 * result + (mLights ? 1 : 0); - result = 31 * result + getLightColor(); + int result = Objects.hash(getId(), getName(), mDesc, getImportance(), mBypassDnd, + getLockscreenVisibility(), getSound(), mLights, getLightColor(), + getUserLockedFields(), + isFgServiceShown(), mVibrationEnabled, mShowBadge, isDeleted(), getGroup(), + getAudioAttributes(), isBlockableSystem(), mAllowAppOverlay); result = 31 * result + Arrays.hashCode(mVibration); - result = 31 * result + getUserLockedFields(); - result = 31 * result + (mVibrationEnabled ? 1 : 0); - result = 31 * result + (mShowBadge ? 1 : 0); - result = 31 * result + (isDeleted() ? 1 : 0); - result = 31 * result + (getGroup() != null ? getGroup().hashCode() : 0); - result = 31 * result + (getAudioAttributes() != null ? getAudioAttributes().hashCode() : 0); - result = 31 * result + (isBlockableSystem() ? 1 : 0); return result; } @@ -975,6 +1006,7 @@ public final class NotificationChannel implements Parcelable { + ", mGroup='" + mGroup + '\'' + ", mAudioAttributes=" + mAudioAttributes + ", mBlockableSystem=" + mBlockableSystem + + ", mAllowAppOverlay=" + mAllowAppOverlay + '}'; pw.println(prefix + output); } @@ -1000,6 +1032,7 @@ public final class NotificationChannel implements Parcelable { + ", mGroup='" + mGroup + '\'' + ", mAudioAttributes=" + mAudioAttributes + ", mBlockableSystem=" + mBlockableSystem + + ", mAllowAppOverlay=" + mAllowAppOverlay + '}'; } @@ -1033,6 +1066,7 @@ public final class NotificationChannel implements Parcelable { mAudioAttributes.writeToProto(proto, NotificationChannelProto.AUDIO_ATTRIBUTES); } proto.write(NotificationChannelProto.IS_BLOCKABLE_SYSTEM, mBlockableSystem); + proto.write(NotificationChannelProto.ALLOW_APP_OVERLAY, mAllowAppOverlay); proto.end(token); } diff --git a/core/java/android/app/NotificationChannelGroup.java b/core/java/android/app/NotificationChannelGroup.java index 17c5cba3ed2cd2596edcf4cf5f0f02759953c8ad..2322a42c93d5767116b27c13e9fa9b04c2b21c48 100644 --- a/core/java/android/app/NotificationChannelGroup.java +++ b/core/java/android/app/NotificationChannelGroup.java @@ -32,6 +32,7 @@ import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * A grouping of related notification channels. e.g., channels that all belong to a single account. @@ -49,13 +50,33 @@ public final class NotificationChannelGroup implements Parcelable { private static final String ATT_DESC = "desc"; private static final String ATT_ID = "id"; private static final String ATT_BLOCKED = "blocked"; + private static final String ATT_ALLOW_APP_OVERLAY = "app_overlay"; + private static final String ATT_USER_LOCKED = "locked"; + private static final boolean DEFAULT_ALLOW_APP_OVERLAY = true; + + /** + * @hide + */ + public static final int USER_LOCKED_BLOCKED_STATE = 0x00000001; + /** + * @hide + */ + @TestApi + public static final int USER_LOCKED_ALLOW_APP_OVERLAY = 0x00000002; + + /** + * @see #getId() + */ @UnsupportedAppUsage private final String mId; private CharSequence mName; private String mDescription; private boolean mBlocked; private List mChannels = new ArrayList<>(); + private boolean mAllowAppOverlay = DEFAULT_ALLOW_APP_OVERLAY; + // Bitwise representation of fields that have been changed by the user + private int mUserLockedFields; /** * Creates a notification channel group. @@ -89,6 +110,8 @@ public final class NotificationChannelGroup implements Parcelable { } in.readParcelableList(mChannels, NotificationChannel.class.getClassLoader()); mBlocked = in.readBoolean(); + mAllowAppOverlay = in.readBoolean(); + mUserLockedFields = in.readInt(); } private String getTrimmedString(String input) { @@ -115,6 +138,8 @@ public final class NotificationChannelGroup implements Parcelable { } dest.writeParcelableList(mChannels, flags); dest.writeBoolean(mBlocked); + dest.writeBoolean(mAllowAppOverlay); + dest.writeInt(mUserLockedFields); } /** @@ -155,6 +180,15 @@ public final class NotificationChannelGroup implements Parcelable { return mBlocked; } + /** + * Returns whether notifications posted to this channel group can display outside of the + * notification shade, in a floating window on top of other apps. These may additionally be + * blocked at the notification channel level, see {@link NotificationChannel#canOverlayApps()}. + */ + public boolean canOverlayApps() { + return mAllowAppOverlay; + } + /** * Sets the user visible description of this group. * @@ -165,6 +199,21 @@ public final class NotificationChannelGroup implements Parcelable { mDescription = getTrimmedString(description); } + /** + * Sets whether notifications posted to this channel group can appear outside of the + * notification shade, floating over other apps' content. + * + *

This value will be ignored for notifications that are posted to channels that do not + * allow app overlays ({@link NotificationChannel#canOverlayApps()}. + * + *

Only modifiable before the channel is submitted to + * {@link NotificationManager#createNotificationChannelGroup(NotificationChannelGroup)}.

+ * @see Notification#getAppOverlayIntent() + */ + public void setAllowAppOverlay(boolean allowAppOverlay) { + mAllowAppOverlay = allowAppOverlay; + } + /** * @hide */ @@ -187,6 +236,29 @@ public final class NotificationChannelGroup implements Parcelable { mChannels = channels; } + /** + * @hide + */ + @TestApi + public void lockFields(int field) { + mUserLockedFields |= field; + } + + /** + * @hide + */ + public void unlockFields(int field) { + mUserLockedFields &= ~field; + } + + /** + * @hide + */ + @TestApi + public int getUserLockedFields() { + return mUserLockedFields; + } + /** * @hide */ @@ -194,6 +266,7 @@ public final class NotificationChannelGroup implements Parcelable { // Name, id, and importance are set in the constructor. setDescription(parser.getAttributeValue(null, ATT_DESC)); setBlocked(safeBool(parser, ATT_BLOCKED, false)); + setAllowAppOverlay(safeBool(parser, ATT_ALLOW_APP_OVERLAY, DEFAULT_ALLOW_APP_OVERLAY)); } private static boolean safeBool(XmlPullParser parser, String att, boolean defValue) { @@ -216,6 +289,10 @@ public final class NotificationChannelGroup implements Parcelable { out.attribute(null, ATT_DESC, getDescription().toString()); } out.attribute(null, ATT_BLOCKED, Boolean.toString(isBlocked())); + if (canOverlayApps() != DEFAULT_ALLOW_APP_OVERLAY) { + out.attribute(null, ATT_ALLOW_APP_OVERLAY, Boolean.toString(canOverlayApps())); + } + out.attribute(null, ATT_USER_LOCKED, Integer.toString(mUserLockedFields)); out.endTag(null, TAG_GROUP); } @@ -230,6 +307,8 @@ public final class NotificationChannelGroup implements Parcelable { record.put(ATT_NAME, getName()); record.put(ATT_DESC, getDescription()); record.put(ATT_BLOCKED, isBlocked()); + record.put(ATT_ALLOW_APP_OVERLAY, canOverlayApps()); + record.put(ATT_USER_LOCKED, mUserLockedFields); return record; } @@ -255,30 +334,20 @@ public final class NotificationChannelGroup implements Parcelable { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - NotificationChannelGroup that = (NotificationChannelGroup) o; - - if (isBlocked() != that.isBlocked()) return false; - if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null) return false; - if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) { - return false; - } - if (getDescription() != null ? !getDescription().equals(that.getDescription()) - : that.getDescription() != null) { - return false; - } - return getChannels() != null ? getChannels().equals(that.getChannels()) - : that.getChannels() == null; + return isBlocked() == that.isBlocked() && + mAllowAppOverlay == that.mAllowAppOverlay && + mUserLockedFields == that.mUserLockedFields && + Objects.equals(getId(), that.getId()) && + Objects.equals(getName(), that.getName()) && + Objects.equals(getDescription(), that.getDescription()) && + Objects.equals(getChannels(), that.getChannels()); } @Override public int hashCode() { - int result = getId() != null ? getId().hashCode() : 0; - result = 31 * result + (getName() != null ? getName().hashCode() : 0); - result = 31 * result + (getDescription() != null ? getDescription().hashCode() : 0); - result = 31 * result + (isBlocked() ? 1 : 0); - result = 31 * result + (getChannels() != null ? getChannels().hashCode() : 0); - return result; + return Objects.hash(getId(), getName(), getDescription(), isBlocked(), getChannels(), + mAllowAppOverlay, mUserLockedFields); } @Override @@ -287,6 +356,8 @@ public final class NotificationChannelGroup implements Parcelable { cloned.setDescription(getDescription()); cloned.setBlocked(isBlocked()); cloned.setChannels(getChannels()); + cloned.setAllowAppOverlay(canOverlayApps()); + cloned.lockFields(mUserLockedFields); return cloned; } @@ -298,6 +369,8 @@ public final class NotificationChannelGroup implements Parcelable { + ", mDescription=" + (!TextUtils.isEmpty(mDescription) ? "hasDescription " : "") + ", mBlocked=" + mBlocked + ", mChannels=" + mChannels + + ", mAllowAppOverlay=" + mAllowAppOverlay + + ", mUserLockedFields=" + mUserLockedFields + '}'; } @@ -312,7 +385,7 @@ public final class NotificationChannelGroup implements Parcelable { for (NotificationChannel channel : mChannels) { channel.writeToProto(proto, NotificationChannelGroupProto.CHANNELS); } - + proto.write(NotificationChannelGroupProto.ALLOW_APP_OVERLAY, mAllowAppOverlay); proto.end(token); } } diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 3f07024d1e5ab6304cad681933e6ae77f0981614..89ec19bbc6dd39ce7580b84a6f8c908b43aa43d7 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -822,6 +822,18 @@ public class NotificationManager { } } + /** + * @hide + */ + public NotificationManager.Policy getConsolidatedNotificationPolicy() { + INotificationManager service = getService(); + try { + return service.getConsolidatedNotificationPolicy(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * @hide */ @@ -1062,7 +1074,7 @@ public class NotificationManager { } /** - * Gets the current notification policy. + * Gets the current user-specified default notification policy. * *

*/ @@ -1621,6 +1633,71 @@ public class NotificationManager { return new Policy[size]; } }; + + /** @hide **/ + public boolean allowAlarms() { + return (priorityCategories & PRIORITY_CATEGORY_ALARMS) != 0; + } + + /** @hide **/ + public boolean allowMedia() { + return (priorityCategories & PRIORITY_CATEGORY_MEDIA) != 0; + } + + /** @hide **/ + public boolean allowSystem() { + return (priorityCategories & PRIORITY_CATEGORY_SYSTEM) != 0; + } + + /** @hide **/ + public boolean allowRepeatCallers() { + return (priorityCategories & PRIORITY_CATEGORY_REPEAT_CALLERS) != 0; + } + + /** @hide **/ + public boolean allowCalls() { + return (priorityCategories & PRIORITY_CATEGORY_CALLS) != 0; + } + + /** @hide **/ + public boolean allowMessages() { + return (priorityCategories & PRIORITY_CATEGORY_MESSAGES) != 0; + } + + /** @hide **/ + public boolean allowEvents() { + return (priorityCategories & PRIORITY_CATEGORY_EVENTS) != 0; + } + + /** @hide **/ + public boolean allowReminders() { + return (priorityCategories & PRIORITY_CATEGORY_REMINDERS) != 0; + } + + /** @hide **/ + public int allowCallsFrom() { + return priorityCallSenders; + } + + /** @hide **/ + public int allowMessagesFrom() { + return priorityMessageSenders; + } + + /** + * returns a deep copy of this policy + * @hide + */ + public Policy copy() { + final Parcel parcel = Parcel.obtain(); + try { + writeToParcel(parcel, 0); + parcel.setDataPosition(0); + return new Policy(parcel); + } finally { + parcel.recycle(); + } + } } /** @@ -1708,5 +1785,4 @@ public class NotificationManager { default: return defValue; } } - } diff --git a/core/java/android/app/ProcessMemoryState.java b/core/java/android/app/ProcessMemoryState.java index 9bfdae0d8c03f75ac1ba00833bd4dbf491c5c90a..d1492433a8db3506053816a2472a0868435a7988 100644 --- a/core/java/android/app/ProcessMemoryState.java +++ b/core/java/android/app/ProcessMemoryState.java @@ -33,10 +33,11 @@ public final class ProcessMemoryState implements Parcelable { public final long cacheInBytes; public final long swapInBytes; public final long rssHighWatermarkInBytes; + public final long startTimeNanos; public ProcessMemoryState(int uid, String processName, int oomScore, long pgfault, long pgmajfault, long rssInBytes, long cacheInBytes, - long swapInBytes, long rssHighWatermarkInBytes) { + long swapInBytes, long rssHighWatermarkInBytes, long startTimeNanos) { this.uid = uid; this.processName = processName; this.oomScore = oomScore; @@ -46,6 +47,7 @@ public final class ProcessMemoryState implements Parcelable { this.cacheInBytes = cacheInBytes; this.swapInBytes = swapInBytes; this.rssHighWatermarkInBytes = rssHighWatermarkInBytes; + this.startTimeNanos = startTimeNanos; } private ProcessMemoryState(Parcel in) { @@ -58,6 +60,7 @@ public final class ProcessMemoryState implements Parcelable { cacheInBytes = in.readLong(); swapInBytes = in.readLong(); rssHighWatermarkInBytes = in.readLong(); + startTimeNanos = in.readLong(); } public static final Creator CREATOR = new Creator() { @@ -88,5 +91,6 @@ public final class ProcessMemoryState implements Parcelable { parcel.writeLong(cacheInBytes); parcel.writeLong(swapInBytes); parcel.writeLong(rssHighWatermarkInBytes); + parcel.writeLong(startTimeNanos); } } diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 77cebc8f408d7587f16e2bb49295c21198dce58a..0123551230b0f1cd6283638a177c6fb5b986f511 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -23,6 +23,7 @@ import android.app.admin.DevicePolicyManager; import android.app.admin.IDevicePolicyManager; import android.app.job.IJobScheduler; import android.app.job.JobScheduler; +import android.app.role.RoleManager; import android.app.slice.SliceManager; import android.app.timedetector.TimeDetector; import android.app.timezone.RulesManager; @@ -48,6 +49,8 @@ import android.content.pm.LauncherApps; import android.content.pm.PackageManager; import android.content.pm.ShortcutManager; import android.content.res.Resources; +import android.debug.AdbManager; +import android.debug.IAdbManager; import android.hardware.ConsumerIrManager; import android.hardware.ISerialManager; import android.hardware.SensorManager; @@ -64,6 +67,8 @@ import android.hardware.fingerprint.IFingerprintService; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.IHdmiControlService; import android.hardware.input.InputManager; +import android.hardware.iris.IIrisService; +import android.hardware.iris.IrisManager; import android.hardware.location.ContextHubManager; import android.hardware.radio.RadioManager; import android.hardware.usb.IUsbManager; @@ -148,6 +153,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.euicc.EuiccCardManager; import android.telephony.euicc.EuiccManager; +import android.telephony.rcs.RcsManager; import android.util.ArrayMap; import android.util.Log; import android.view.ContextThemeWrapper; @@ -159,6 +165,8 @@ import android.view.accessibility.CaptioningManager; import android.view.autofill.AutofillManager; import android.view.autofill.IAutoFillManager; import android.view.inputmethod.InputMethodManager; +import android.view.intelligence.IIntelligenceManager; +import android.view.intelligence.IntelligenceManager; import android.view.textclassifier.TextClassificationManager; import android.view.textservice.TextServicesManager; @@ -540,6 +548,14 @@ final class SystemServiceRegistry { return new SubscriptionManager(ctx.getOuterContext()); }}); + registerService(Context.TELEPHONY_RCS_SERVICE, RcsManager.class, + new CachedServiceFetcher() { + @Override + public RcsManager createService(ContextImpl ctx) { + return new RcsManager(); + } + }); + registerService(Context.CARRIER_CONFIG_SERVICE, CarrierConfigManager.class, new CachedServiceFetcher() { @Override @@ -583,6 +599,15 @@ final class SystemServiceRegistry { return new UsbManager(ctx, IUsbManager.Stub.asInterface(b)); }}); + registerService(Context.ADB_SERVICE, AdbManager.class, + new CachedServiceFetcher() { + @Override + public AdbManager createService(ContextImpl ctx) + throws ServiceNotFoundException { + IBinder b = ServiceManager.getServiceOrThrow(Context.ADB_SERVICE); + return new AdbManager(ctx, IAdbManager.Stub.asInterface(b)); + }}); + registerService(Context.SERIAL_SERVICE, SerialManager.class, new CachedServiceFetcher() { @Override @@ -825,16 +850,34 @@ final class SystemServiceRegistry { } }); + registerService(Context.IRIS_SERVICE, IrisManager.class, + new CachedServiceFetcher() { + @Override + public IrisManager createService(ContextImpl ctx) + throws ServiceNotFoundException { + final IBinder binder = + ServiceManager.getServiceOrThrow(Context.IRIS_SERVICE); + IIrisService service = IIrisService.Stub.asInterface(binder); + return new IrisManager(ctx.getOuterContext(), service); + } + }); + registerService(Context.BIOMETRIC_SERVICE, BiometricManager.class, new CachedServiceFetcher() { @Override public BiometricManager createService(ContextImpl ctx) throws ServiceNotFoundException { - final IBinder binder = - ServiceManager.getServiceOrThrow(Context.BIOMETRIC_SERVICE); - final IBiometricService service = - IBiometricService.Stub.asInterface(binder); - return new BiometricManager(ctx.getOuterContext(), service); + if (BiometricManager.hasBiometrics(ctx)) { + final IBinder binder = + ServiceManager.getServiceOrThrow(Context.BIOMETRIC_SERVICE); + final IBiometricService service = + IBiometricService.Stub.asInterface(binder); + return new BiometricManager(ctx.getOuterContext(), service); + } else { + // Allow access to the manager when service is null. This saves memory + // on devices without biometric hardware. + return new BiometricManager(ctx.getOuterContext(), null); + } } }); @@ -1007,6 +1050,17 @@ final class SystemServiceRegistry { return new AutofillManager(ctx.getOuterContext(), service); }}); + registerService(Context.INTELLIGENCE_MANAGER_SERVICE, IntelligenceManager.class, + new CachedServiceFetcher() { + @Override + public IntelligenceManager createService(ContextImpl ctx) + throws ServiceNotFoundException { + // Get the services without throwing as this is an optional feature + IBinder b = ServiceManager.getService(Context.INTELLIGENCE_MANAGER_SERVICE); + IIntelligenceManager service = IIntelligenceManager.Stub.asInterface(b); + return new IntelligenceManager(ctx.getOuterContext(), service); + }}); + registerService(Context.VR_SERVICE, VrManager.class, new CachedServiceFetcher() { @Override public VrManager createService(ContextImpl ctx) throws ServiceNotFoundException { @@ -1076,6 +1130,14 @@ final class SystemServiceRegistry { public PermissionManager createService(ContextImpl ctx) { return new PermissionManager(ctx.getOuterContext()); }}); + + registerService(Context.ROLE_SERVICE, RoleManager.class, + new CachedServiceFetcher() { + @Override + public RoleManager createService(ContextImpl ctx) + throws ServiceNotFoundException { + return new RoleManager(ctx.getOuterContext()); + }}); } /** diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index 5a25f5aed1616229e62ff350ceaa37e455faf762..3f9627ed807c864403af15e8ed88da10a79d5c27 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -354,12 +354,17 @@ public final class UiAutomation { } /** - * Adopt the permission identity of the shell UID. This allows you to call APIs protected - * permissions which normal apps cannot hold but are granted to the shell UID. If you - * already adopted the shell permission identity this method would be a no-op. - * Note that your permission state becomes that of the shell UID and it is not a - * combination of your and the shell UID permissions. + * Adopt the permission identity of the shell UID for all permissions. This allows + * you to call APIs protected permissions which normal apps cannot hold but are + * granted to the shell UID. If you already adopted all shell permissions by calling + * this method or {@link #adoptShellPermissionIdentity(String...)} a subsequent call + * would be a no-op. Note that your permission state becomes that of the shell UID + * and it is not a combination of your and the shell UID permissions. + *

+ * Note: Calling this method adopts all shell permissions and overrides + * any subset of adopted permissions via {@link #adoptShellPermissionIdentity(String...)}. * + * @see #adoptShellPermissionIdentity(String...) * @see #dropShellPermissionIdentity() */ public void adoptShellPermissionIdentity() { @@ -368,7 +373,33 @@ public final class UiAutomation { } try { // Calling out without a lock held. - mUiAutomationConnection.adoptShellPermissionIdentity(Process.myUid()); + mUiAutomationConnection.adoptShellPermissionIdentity(Process.myUid(), null); + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error executing adopting shell permission identity!", re); + } + } + + /** + * Adopt the permission identity of the shell UID only for the provided permissions. + * This allows you to call APIs protected permissions which normal apps cannot hold + * but are granted to the shell UID. If you already adopted the specified shell + * permissions by calling this method or {@link #adoptShellPermissionIdentity()} a + * subsequent call would be a no-op. Note that your permission state becomes that of the + * shell UID and it is not a combination of your and the shell UID permissions. + *

+ * Note: Calling this method adopts only the specified shell permissions + * and overrides all adopted permissions via {@link #adoptShellPermissionIdentity()}. + * + * @see #adoptShellPermissionIdentity() + * @see #dropShellPermissionIdentity() + */ + public void adoptShellPermissionIdentity(String... permissions) { + synchronized (mLock) { + throwIfNotConnectedLocked(); + } + try { + // Calling out without a lock held. + mUiAutomationConnection.adoptShellPermissionIdentity(Process.myUid(), permissions); } catch (RemoteException re) { Log.e(LOG_TAG, "Error executing adopting shell permission identity!", re); } diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index b406d9e30a539395d7678129e4d1cae6d9e9322d..dc2f9838785c0dfb6dc83a4fa7f2683f5a5f9e50 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -18,7 +18,7 @@ package android.app; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.IAccessibilityServiceClient; -import android.annotation.UnsupportedAppUsage; +import android.annotation.Nullable; import android.content.Context; import android.content.pm.IPackageManager; import android.graphics.Bitmap; @@ -279,7 +279,8 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { } @Override - public void adoptShellPermissionIdentity(int uid) throws RemoteException { + public void adoptShellPermissionIdentity(int uid, @Nullable String[] permissions) + throws RemoteException { synchronized (mLock) { throwIfCalledByNotTrustedUidLocked(); throwIfShutdownLocked(); @@ -287,7 +288,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { } final long identity = Binder.clearCallingIdentity(); try { - mActivityManager.startDelegateShellPermissionIdentity(uid); + mActivityManager.startDelegateShellPermissionIdentity(uid, permissions); } finally { Binder.restoreCallingIdentity(identity); } diff --git a/core/java/android/app/WallpaperInfo.java b/core/java/android/app/WallpaperInfo.java index 9873a8152b3fdabe100a8d284d3196522156b556..e33d1fed4b4c24c67d72d2eedbaafefe6a50dc63 100644 --- a/core/java/android/app/WallpaperInfo.java +++ b/core/java/android/app/WallpaperInfo.java @@ -16,6 +16,7 @@ package android.app; +import android.app.slice.Slice; import android.content.ComponentName; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -77,6 +78,7 @@ public final class WallpaperInfo implements Parcelable { final int mContextDescriptionResource; final boolean mShowMetadataInPreview; final boolean mSupportsAmbientMode; + final String mSettingsSliceUri; /** * Constructor. @@ -118,7 +120,6 @@ public final class WallpaperInfo implements Parcelable { com.android.internal.R.styleable.Wallpaper); mSettingsActivityName = sa.getString( com.android.internal.R.styleable.Wallpaper_settingsActivity); - mThumbnailResource = sa.getResourceId( com.android.internal.R.styleable.Wallpaper_thumbnail, -1); @@ -140,6 +141,8 @@ public final class WallpaperInfo implements Parcelable { mSupportsAmbientMode = sa.getBoolean( com.android.internal.R.styleable.Wallpaper_supportsAmbientMode, false); + mSettingsSliceUri = sa.getString( + com.android.internal.R.styleable.Wallpaper_settingsSliceUri); sa.recycle(); } catch (NameNotFoundException e) { @@ -159,6 +162,7 @@ public final class WallpaperInfo implements Parcelable { mContextDescriptionResource = source.readInt(); mShowMetadataInPreview = source.readInt() != 0; mSupportsAmbientMode = source.readInt() != 0; + mSettingsSliceUri = source.readString(); mService = ResolveInfo.CREATOR.createFromParcel(source); } @@ -332,13 +336,28 @@ public final class WallpaperInfo implements Parcelable { * explicit {@link android.content.ComponentName} * composed of {@link #getPackageName} and the class name returned here. * - *

A null will be returned if there is no settings activity associated + *

{@code null} will be returned if there is no settings activity associated * with the wallpaper. */ public String getSettingsActivity() { return mSettingsActivityName; } + /** + * Returns an URI that provides a settings {@link Slice} for this wallpaper. + * + *

{@code null} will be returned if there is no settings Slice URI associated + * with the wallpaper. + * + * @return The URI. + */ + public Uri getSettingsSliceUri() { + if (mSettingsSliceUri == null) { + return null; + } + return Uri.parse(mSettingsSliceUri); + } + public void dump(Printer pw, String prefix) { pw.println(prefix + "Service:"); mService.dump(pw, prefix + " "); @@ -367,6 +386,7 @@ public final class WallpaperInfo implements Parcelable { dest.writeInt(mContextDescriptionResource); dest.writeInt(mShowMetadataInPreview ? 1 : 0); dest.writeInt(mSupportsAmbientMode ? 1 : 0); + dest.writeString(mSettingsSliceUri); mService.writeToParcel(dest, flags); } diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index 096c7aa4444621444e0325432f646f439f69104a..78b7d48165ec2ff3e19d178ab47b53dc86b0b3be 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -20,6 +20,7 @@ import static android.app.ActivityThread.isSystem; import static android.app.WindowConfigurationProto.ACTIVITY_TYPE; import static android.app.WindowConfigurationProto.APP_BOUNDS; import static android.app.WindowConfigurationProto.WINDOWING_MODE; +import static android.view.Surface.rotationToString; import android.annotation.IntDef; import android.annotation.NonNull; @@ -60,6 +61,17 @@ public class WindowConfiguration implements Parcelable, ComparableAutofill Framework guides. */ public class AssistStructure implements Parcelable { - static final String TAG = "AssistStructure"; + private static final String TAG = "AssistStructure"; - static final boolean DEBUG_PARCEL = false; - static final boolean DEBUG_PARCEL_CHILDREN = false; - static final boolean DEBUG_PARCEL_TREE = false; + private static final boolean DEBUG_PARCEL = false; + private static final boolean DEBUG_PARCEL_CHILDREN = false; + private static final boolean DEBUG_PARCEL_TREE = false; - static final int VALIDATE_WINDOW_TOKEN = 0x11111111; - static final int VALIDATE_VIEW_TOKEN = 0x22222222; + private static final int VALIDATE_WINDOW_TOKEN = 0x11111111; + private static final int VALIDATE_VIEW_TOKEN = 0x22222222; - boolean mHaveData; + private boolean mHaveData; - ComponentName mActivityComponent; + // The task id and component of the activity which this assist structure is for + private int mTaskId; + private ComponentName mActivityComponent; private boolean mIsHomeActivity; private int mFlags; private int mAutofillFlags; - final ArrayList mWindowNodes = new ArrayList<>(); + private final ArrayList mWindowNodes = new ArrayList<>(); - final ArrayList mPendingAsyncChildren = new ArrayList<>(); + private final ArrayList mPendingAsyncChildren = new ArrayList<>(); - SendChannel mSendChannel; - IBinder mReceiveChannel; + private SendChannel mSendChannel; + private IBinder mReceiveChannel; - Rect mTmpRect = new Rect(); + private Rect mTmpRect = new Rect(); - boolean mSanitizeOnWrite = false; + private boolean mSanitizeOnWrite = false; private long mAcquisitionStartTime; private long mAcquisitionEndTime; - static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1; - static final String DESCRIPTOR = "android.app.AssistStructure"; + private static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1; + private static final String DESCRIPTOR = "android.app.AssistStructure"; /** @hide */ public void setAcquisitionStartTime(long acquisitionStartTime) { @@ -196,7 +199,6 @@ public class AssistStructure implements Parcelable { ParcelTransferWriter(AssistStructure as, Parcel out) { mSanitizeOnWrite = as.mSanitizeOnWrite; mWriteStructure = as.waitForReady(); - ComponentName.writeToParcel(as.mActivityComponent, out); out.writeInt(as.mFlags); out.writeInt(as.mAutofillFlags); out.writeLong(as.mAcquisitionStartTime); @@ -352,7 +354,6 @@ public class AssistStructure implements Parcelable { void go() { fetchData(); - mActivityComponent = ComponentName.readFromParcel(mCurParcel); mFlags = mCurParcel.readInt(); mAutofillFlags = mCurParcel.readInt(); mAcquisitionStartTime = mCurParcel.readLong(); @@ -713,7 +714,11 @@ public class AssistStructure implements Parcelable { ViewNode[] mChildren; - ViewNode() { + // TODO(b/111276913): temporarily made public / @hide until we decide what will be used by + // ScreenObservation. + /** @hide */ + @SystemApi + public ViewNode() { } ViewNode(ParcelTransferReader reader, int nestingLevel) { @@ -2124,7 +2129,6 @@ public class AssistStructure implements Parcelable { /** @hide */ public AssistStructure(Activity activity, boolean forAutoFill, int flags) { mHaveData = true; - mActivityComponent = activity.getComponentName(); mFlags = flags; ArrayList views = WindowManagerGlobal.getInstance().getRootViews( activity.getActivityToken()); @@ -2140,12 +2144,13 @@ public class AssistStructure implements Parcelable { public AssistStructure() { mHaveData = true; - mActivityComponent = null; mFlags = 0; } /** @hide */ public AssistStructure(Parcel in) { + mTaskId = in.readInt(); + mActivityComponent = ComponentName.readFromParcel(in); mIsHomeActivity = in.readInt() == 1; mReceiveChannel = in.readStrongBinder(); } @@ -2166,7 +2171,10 @@ public class AssistStructure implements Parcelable { Log.i(TAG, "dump(): calling ensureData() first"); ensureData(); } - Log.i(TAG, "Activity: " + mActivityComponent.flattenToShortString()); + Log.i(TAG, "Task id: " + mTaskId); + Log.i(TAG, "Activity: " + (mActivityComponent != null + ? mActivityComponent.flattenToShortString() + : null)); Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite); Log.i(TAG, "Flags: " + mFlags); final int N = getWindowNodeCount(); @@ -2278,23 +2286,37 @@ public class AssistStructure implements Parcelable { } /** - * Return the activity this AssistStructure came from. + * Sets the task id is associated with the activity from which this AssistStructure was + * generated. + * @hide */ - public ComponentName getActivityComponent() { - ensureData(); - return mActivityComponent; + public void setTaskId(int taskId) { + mTaskId = taskId; } /** - * Called by Autofill server when app forged a different value. - * + * @return The task id for the associated activity. + * @hide + */ + public int getTaskId() { + return mTaskId; + } + + /** + * Sets the activity that is associated with this AssistStructure. * @hide */ public void setActivityComponent(ComponentName componentName) { - ensureData(); mActivityComponent = componentName; } + /** + * Return the activity this AssistStructure came from. + */ + public ComponentName getActivityComponent() { + return mActivityComponent; + } + /** @hide */ public int getFlags() { return mFlags; @@ -2388,6 +2410,8 @@ public class AssistStructure implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { + out.writeInt(mTaskId); + ComponentName.writeToParcel(mActivityComponent, out); out.writeInt(mIsHomeActivity ? 1 : 0); if (mHaveData) { // This object holds its data. We want to write a send channel that the diff --git a/core/java/android/app/role/IRoleManager.aidl b/core/java/android/app/role/IRoleManager.aidl new file mode 100644 index 0000000000000000000000000000000000000000..2cf13ec241416fbfe1912433cc3082347436ec80 --- /dev/null +++ b/core/java/android/app/role/IRoleManager.aidl @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.role; + +import android.app.role.IRoleManagerCallback; + +/** + * @hide + */ +interface IRoleManager { + + boolean isRoleAvailable(in String roleName); + + boolean isRoleHeld(in String roleName, in String packageName); + + List getRoleHoldersAsUser(in String roleName, int userId); + + void addRoleHolderAsUser(in String roleName, in String packageName, int userId, + in IRoleManagerCallback callback); + + void removeRoleHolderAsUser(in String roleName, in String packageName, int userId, + in IRoleManagerCallback callback); + + void clearRoleHoldersAsUser(in String roleName, int userId, in IRoleManagerCallback callback); + + boolean addRoleHolderFromController(in String roleName, in String packageName); + + boolean removeRoleHolderFromController(in String roleName, in String packageName); +} diff --git a/core/java/android/app/role/IRoleManagerCallback.aidl b/core/java/android/app/role/IRoleManagerCallback.aidl new file mode 100644 index 0000000000000000000000000000000000000000..c0f8eea51a256ab8bed054c67b2edefcd820392f --- /dev/null +++ b/core/java/android/app/role/IRoleManagerCallback.aidl @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.role; + +/** + * @hide + */ +oneway interface IRoleManagerCallback { + + void onSuccess(); + + void onFailure(); +} diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java new file mode 100644 index 0000000000000000000000000000000000000000..ed27d9fe9fd4fc52702fba14d19f612a53c3c28d --- /dev/null +++ b/core/java/android/app/role/RoleManager.java @@ -0,0 +1,444 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.role; + +import android.Manifest; +import android.annotation.CallbackExecutor; +import android.annotation.NonNull; +import android.annotation.RequiresPermission; +import android.annotation.SystemApi; +import android.annotation.SystemService; +import android.content.Context; +import android.content.Intent; +import android.os.Binder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.UserHandle; + +import com.android.internal.util.Preconditions; + +import java.util.List; +import java.util.concurrent.Executor; + +/** + * This class provides information about and manages roles. + *

+ * A role is a unique name within the system associated with certain privileges. The list of + * available roles might change with a system app update, so apps should not make assumption about + * the availability of roles. Instead, they should always query if the role is available using + * {@link #isRoleAvailable(String)} before trying to do anything with it. Some predefined role names + * are available as constants in this class, and a list of possibly available roles can be found in + * the AndroidX Libraries. + *

+ * There can be multiple applications qualifying for a role, but only a subset of them can become + * role holders. To qualify for a role, an application must meet certain requirements, including + * defining certain components in its manifest. These requirements can be found in the AndroidX + * Libraries. Then the application will need user consent to become a role holder, which can be + * requested using {@link android.app.Activity#startActivityForResult(Intent, int)} with the + * {@code Intent} obtained from {@link #createRequestRoleIntent(String)}. + *

+ * Upon becoming a role holder, the application may be granted certain privileges that are role + * specific. When the application loses its role, these privileges will also be revoked. + */ +@SystemService(Context.ROLE_SERVICE) +public final class RoleManager { + + private static final String LOG_TAG = RoleManager.class.getSimpleName(); + + /** + * The name of the dialer role. + */ + public static final String ROLE_DIALER = "android.app.role.DIALER"; + + /** + * The name of the SMS role. + */ + public static final String ROLE_SMS = "android.app.role.SMS"; + + /** + * The action used to request user approval of a role for an application. + * + * @hide + */ + public static final String ACTION_REQUEST_ROLE = "android.app.role.action.REQUEST_ROLE"; + + /** + * The name of the requested role. + *

+ * Type: String + * + * @hide + */ + @SystemApi + public static final String EXTRA_REQUEST_ROLE_NAME = "android.app.role.extra.REQUEST_ROLE_NAME"; + + /** + * The permission required to manage records of role holders in {@link RoleManager} directly. + * + * @hide + */ + public static final String PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER = + "com.android.permissioncontroller.permission.MANAGE_ROLE_HOLDERS_FROM_CONTROLLER"; + + @NonNull + private final Context mContext; + + @NonNull + private final IRoleManager mService; + + /** + * @hide + */ + public RoleManager(@NonNull Context context) throws ServiceManager.ServiceNotFoundException { + mContext = context; + mService = IRoleManager.Stub.asInterface(ServiceManager.getServiceOrThrow( + Context.ROLE_SERVICE)); + } + + /** + * Returns an {@code Intent} suitable for passing to + * {@link android.app.Activity#startActivityForResult(Intent, int)} which prompts the user to + * grant a role to this application. + *

+ * If the role is granted, the {@code resultCode} will be + * {@link android.app.Activity#RESULT_OK}, otherwise it will be + * {@link android.app.Activity#RESULT_CANCELED}. + * + * @param roleName the name of requested role + * + * @return the {@code Intent} to prompt user to grant the role + * + * @throws IllegalArgumentException if {@code role} is {@code null} or empty + */ + @NonNull + public Intent createRequestRoleIntent(@NonNull String roleName) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Intent intent = new Intent(ACTION_REQUEST_ROLE); + intent.setPackage(mContext.getPackageManager().getPermissionControllerPackageName()); + intent.putExtra(EXTRA_REQUEST_ROLE_NAME, roleName); + return intent; + } + + /** + * Check whether a role is available in the system. + * + * @param roleName the name of role to checking for + * + * @return whether the role is available in the system + * + * @throws IllegalArgumentException if the role name is {@code null} or empty + */ + public boolean isRoleAvailable(@NonNull String roleName) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + try { + return mService.isRoleAvailable(roleName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Check whether the calling application is holding a particular role. + * + * @param roleName the name of the role to check for + * + * @return whether the calling application is holding the role + * + * @throws IllegalArgumentException if the role name is {@code null} or empty. + */ + public boolean isRoleHeld(@NonNull String roleName) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + try { + return mService.isRoleHeld(roleName, mContext.getPackageName()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Get package names of the applications holding the role. + *

+ * Note: Using this API requires holding + * {@code android.permission.MANAGE_ROLE_HOLDERS}. + * + * @param roleName the name of the role to get the role holder for + * + * @return a list of package names of the role holders, or an empty list if none. + * + * @throws IllegalArgumentException if the role name is {@code null} or empty. + * + * @see #getRoleHoldersAsUser(String, UserHandle) + * + * @hide + */ + @NonNull + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + @SystemApi + public List getRoleHolders(@NonNull String roleName) { + return getRoleHoldersAsUser(roleName, UserHandle.of(UserHandle.getCallingUserId())); + } + + /** + * Get package names of the applications holding the role. + *

+ * Note: Using this API requires holding + * {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user + * {@code android.permission.INTERACT_ACROSS_USERS_FULL}. + * + * @param roleName the name of the role to get the role holder for + * @param user the user to get the role holder for + * + * @return a list of package names of the role holders, or an empty list if none. + * + * @throws IllegalArgumentException if the role name is {@code null} or empty. + * + * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * + * @hide + */ + @NonNull + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + @SystemApi + public List getRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkNotNull(user, "user cannot be null"); + try { + return mService.getRoleHoldersAsUser(roleName, user.getIdentifier()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Add a specific application to the holders of a role. If the role is exclusive, the previous + * holder will be replaced. + *

+ * Note: Using this API requires holding + * {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user + * {@code android.permission.INTERACT_ACROSS_USERS_FULL}. + * + * @param roleName the name of the role to add the role holder for + * @param packageName the package name of the application to add to the role holders + * @param user the user to add the role holder for + * @param executor the {@code Executor} to run the callback on. + * @param callback the callback for whether this call is successful + * + * @throws IllegalArgumentException if the role name or package name is {@code null} or empty. + * + * @see #getRoleHoldersAsUser(String, UserHandle) + * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * + * @hide + */ + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + @SystemApi + public void addRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, + @NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor, + @NonNull RoleManagerCallback callback) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + Preconditions.checkNotNull(user, "user cannot be null"); + Preconditions.checkNotNull(executor, "executor cannot be null"); + Preconditions.checkNotNull(callback, "callback cannot be null"); + try { + mService.addRoleHolderAsUser(roleName, packageName, user.getIdentifier(), + new RoleManagerCallbackDelegate(executor, callback)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Remove a specific application from the holders of a role. + *

+ * Note: Using this API requires holding + * {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user + * {@code android.permission.INTERACT_ACROSS_USERS_FULL}. + * + * @param roleName the name of the role to remove the role holder for + * @param packageName the package name of the application to remove from the role holders + * @param user the user to remove the role holder for + * @param executor the {@code Executor} to run the callback on. + * @param callback the callback for whether this call is successful + * + * @throws IllegalArgumentException if the role name or package name is {@code null} or empty. + * + * @see #getRoleHoldersAsUser(String, UserHandle) + * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * + * @hide + */ + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + @SystemApi + public void removeRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, + @NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor, + @NonNull RoleManagerCallback callback) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + Preconditions.checkNotNull(user, "user cannot be null"); + Preconditions.checkNotNull(executor, "executor cannot be null"); + Preconditions.checkNotNull(callback, "callback cannot be null"); + try { + mService.removeRoleHolderAsUser(roleName, packageName, user.getIdentifier(), + new RoleManagerCallbackDelegate(executor, callback)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Remove all holders of a role. + *

+ * Note: Using this API requires holding + * {@code android.permission.MANAGE_ROLE_HOLDERS} and if the user id is not the current user + * {@code android.permission.INTERACT_ACROSS_USERS_FULL}. + * + * @param roleName the name of the role to remove role holders for + * @param user the user to remove role holders for + * @param executor the {@code Executor} to run the callback on. + * @param callback the callback for whether this call is successful + * + * @throws IllegalArgumentException if the role name is {@code null} or empty. + * + * @see #getRoleHoldersAsUser(String, UserHandle) + * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * + * @hide + */ + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + @SystemApi + public void clearRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user, + @CallbackExecutor @NonNull Executor executor, @NonNull RoleManagerCallback callback) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkNotNull(user, "user cannot be null"); + Preconditions.checkNotNull(executor, "executor cannot be null"); + Preconditions.checkNotNull(callback, "callback cannot be null"); + try { + mService.clearRoleHoldersAsUser(roleName, user.getIdentifier(), + new RoleManagerCallbackDelegate(executor, callback)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Add a specific application to the holders of a role, only modifying records inside + * {@link RoleManager}. Should only be called from + * {@link android.rolecontrollerservice.RoleControllerService}. + *

+ * Note: Using this API requires holding + * {@link #PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER}. + * + * @param roleName the name of the role to add the role holder for + * @param packageName the package name of the application to add to the role holders + * + * @return whether the operation was successful, and will also be {@code true} if a matching + * role holder is already found. + * + * @throws IllegalArgumentException if the role name or package name is {@code null} or empty. + * + * @see #getRoleHolders(String) + * @see #removeRoleHolderFromController(String, String) + * + * @hide + */ + @RequiresPermission(PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER) + @SystemApi + public boolean addRoleHolderFromController(@NonNull String roleName, + @NonNull String packageName) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + try { + return mService.addRoleHolderFromController(roleName, packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Remove a specific application from the holders of a role, only modifying records inside + * {@link RoleManager}. Should only be called from + * {@link android.rolecontrollerservice.RoleControllerService}. + *

+ * Note: Using this API requires holding + * {@link #PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER}. + * + * @param roleName the name of the role to remove the role holder for + * @param packageName the package name of the application to remove from the role holders + * + * @return whether the operation was successful, and will also be {@code true} if no matching + * role holder was found to remove. + * + * @throws IllegalArgumentException if the role name or package name is {@code null} or empty. + * + * @see #getRoleHolders(String) + * @see #addRoleHolderFromController(String, String) + * + * @hide + */ + @RequiresPermission(PERMISSION_MANAGE_ROLE_HOLDERS_FROM_CONTROLLER) + @SystemApi + public boolean removeRoleHolderFromController(@NonNull String roleName, + @NonNull String packageName) { + Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); + Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); + try { + return mService.removeRoleHolderFromController(roleName, packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + private static class RoleManagerCallbackDelegate extends IRoleManagerCallback.Stub { + + @NonNull + private final Executor mExecutor; + @NonNull + private final RoleManagerCallback mCallback; + + RoleManagerCallbackDelegate(@NonNull Executor executor, + @NonNull RoleManagerCallback callback) { + mExecutor = executor; + mCallback = callback; + } + + @Override + public void onSuccess() { + long token = Binder.clearCallingIdentity(); + try { + mExecutor.execute(mCallback::onSuccess); + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override + public void onFailure() { + long token = Binder.clearCallingIdentity(); + try { + mExecutor.execute(mCallback::onFailure); + } finally { + Binder.restoreCallingIdentity(token); + } + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java b/core/java/android/app/role/RoleManagerCallback.java similarity index 58% rename from packages/SystemUI/src/com/android/systemui/RecentsComponent.java rename to core/java/android/app/role/RoleManagerCallback.java index fb343f9b9b45d86bb1e43a0e87c43d05ddf152ef..ca68ebc983031fad33b53e194ff27d1458a1cc26 100644 --- a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java +++ b/core/java/android/app/role/RoleManagerCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Android Open Source Project + * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,18 +14,25 @@ * limitations under the License. */ -package com.android.systemui; +package android.app.role; -import android.graphics.Rect; -import android.view.Display; -import android.view.View; +import android.annotation.SystemApi; -public interface RecentsComponent { - void showRecentApps(boolean triggeredFromAltTab); +/** + * Callback for a {@link RoleManager} request. + * + * @hide + */ +@SystemApi +public interface RoleManagerCallback { + + /** + * Signals a success. + */ + void onSuccess(); /** - * Docks the top-most task and opens recents. + * Signals a failure. */ - boolean splitPrimaryTask(int stackCreateMode, Rect initialBounds, - int metricsDockAction); + void onFailure(); } diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index 971352783dcb7b7bdfe5c1636160086d42432da1..4d52263c1d78d263abbc0bb05c6eff71e847e879 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -51,4 +51,8 @@ interface IUsageStatsManager { void registerAppUsageObserver(int observerId, in String[] packages, long timeLimitMs, in PendingIntent callback, String callingPackage); void unregisterAppUsageObserver(int observerId, String callingPackage); + void registerUsageSessionObserver(int sessionObserverId, in String[] observed, long timeLimitMs, + long sessionThresholdTimeMs, in PendingIntent limitReachedCallbackIntent, + in PendingIntent sessionEndCallbackIntent, String callingPackage); + void unregisterUsageSessionObserver(int sessionObserverId, String callingPackage); } diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java index 308b39efc3b19648e6c096a40e1643956ba6daff..3a5975aea628b9e4601c663420a60c25dd959cb7 100644 --- a/core/java/android/app/usage/UsageEvents.java +++ b/core/java/android/app/usage/UsageEvents.java @@ -50,12 +50,20 @@ public final class UsageEvents implements Parcelable { public static final int NONE = 0; /** - * An event type denoting that a component moved to the foreground. + * An event type denoting that an {@link android.app.Activity} moved to the foreground. + * This event has a package name and class name associated with it and can be retrieved + * using {@link #getPackageName()} and {@link #getClassName()}. + * If a package has multiple activities, this event is reported for each activity that moves + * to foreground. */ public static final int MOVE_TO_FOREGROUND = 1; /** - * An event type denoting that a component moved to the background. + * An event type denoting that an {@link android.app.Activity} moved to the background. + * This event has a package name and class name associated with it and can be retrieved + * using {@link #getPackageName()} and {@link #getClassName()}. + * If a package has multiple activities, this event is reported for each activity that moves + * to background. */ public static final int MOVE_TO_BACKGROUND = 2; @@ -165,11 +173,44 @@ public final class UsageEvents implements Parcelable { */ public static final int KEYGUARD_HIDDEN = 18; + /** + * An event type denoting start of a foreground service. + * This event has a package name and class name associated with it and can be retrieved + * using {@link #getPackageName()} and {@link #getClassName()}. + * If a package has multiple foreground services, this event is reported for each service + * that is started. + */ + public static final int FOREGROUND_SERVICE_START = 19; + + /** + * An event type denoting stop of a foreground service. + * This event has a package name and class name associated with it and can be retrieved + * using {@link #getPackageName()} and {@link #getClassName()}. + * If a package has multiple foreground services, this event is reported for each service + * that is stopped. + */ + public static final int FOREGROUND_SERVICE_STOP = 20; + + /** + * An event type denoting that a foreground service is at started state at beginning of a + * time interval. + * This is effectively treated as a {@link #FOREGROUND_SERVICE_START}. + * {@hide} + */ + public static final int CONTINUING_FOREGROUND_SERVICE = 21; + + /** + * An event type denoting that a foreground service is at started state when the stats + * rolled-over at the end of a time interval. + * {@hide} + */ + public static final int ROLLOVER_FOREGROUND_SERVICE = 22; + /** * Keep in sync with the greatest event type value. * @hide */ - public static final int MAX_EVENT_TYPE = 18; + public static final int MAX_EVENT_TYPE = 22; /** @hide */ public static final int FLAG_IS_PACKAGE_INSTANT_APP = 1 << 0; diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java index 0659a237d5224b41c79a616c387675e42d29dc55..73426e495037cc907425163ac8016ed92a8156ed 100644 --- a/core/java/android/app/usage/UsageStats.java +++ b/core/java/android/app/usage/UsageStats.java @@ -16,6 +16,15 @@ package android.app.usage; +import static android.app.usage.UsageEvents.Event.CONTINUE_PREVIOUS_DAY; +import static android.app.usage.UsageEvents.Event.CONTINUING_FOREGROUND_SERVICE; +import static android.app.usage.UsageEvents.Event.END_OF_DAY; +import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_START; +import static android.app.usage.UsageEvents.Event.FOREGROUND_SERVICE_STOP; +import static android.app.usage.UsageEvents.Event.MOVE_TO_BACKGROUND; +import static android.app.usage.UsageEvents.Event.MOVE_TO_FOREGROUND; +import static android.app.usage.UsageEvents.Event.ROLLOVER_FOREGROUND_SERVICE; + import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.os.Bundle; @@ -48,18 +57,31 @@ public final class UsageStats implements Parcelable { public long mEndTimeStamp; /** - * Last time used by the user with an explicit action (notification, activity launch). + * Last time used by the user with an explicit action (notification, activity launch) * {@hide} */ @UnsupportedAppUsage public long mLastTimeUsed; /** + * Total time this package's activity is in foreground. * {@hide} */ @UnsupportedAppUsage public long mTotalTimeInForeground; + /** + * Last time foreground service is started. + * {@hide} + */ + public long mLastTimeForegroundServiceUsed; + + /** + * Total time this package's foreground service is started. + * {@hide} + */ + public long mTotalTimeForegroundServiceUsed; + /** * {@hide} */ @@ -71,16 +93,36 @@ public final class UsageStats implements Parcelable { */ public int mAppLaunchCount; - /** + /** Last activity MOVE_TO_FOREGROUND or MOVE_TO_BACKGROUND event. * {@hide} + * @deprecated use {@link #mLastForegroundActivityEventMap} instead. */ @UnsupportedAppUsage + @Deprecated public int mLastEvent; /** + * If an activity is in foreground, it has one entry in this map. + * When activity moves to background, it is removed from this map. + * Key is activity class name. + * Value is last time this activity MOVE_TO_FOREGROUND or MOVE_TO_BACKGROUND event. + * {@hide} + */ + public ArrayMap mLastForegroundActivityEventMap = new ArrayMap<>(); + + /** + * If a foreground service is started, it has one entry in this map. + * When a foreground service is stopped, it is removed from this map. + * Key is foreground service class name. + * Value is last foreground service FOREGROUND_SERVICE_START ot FOREGROUND_SERVICE_STOP event. * {@hide} */ - public ArrayMap> mChooserCounts; + public ArrayMap mLastForegroundServiceEventMap = new ArrayMap<>(); + + /** + * {@hide} + */ + public ArrayMap> mChooserCounts = new ArrayMap<>(); /** * {@hide} @@ -93,10 +135,14 @@ public final class UsageStats implements Parcelable { mBeginTimeStamp = stats.mBeginTimeStamp; mEndTimeStamp = stats.mEndTimeStamp; mLastTimeUsed = stats.mLastTimeUsed; + mLastTimeForegroundServiceUsed = stats.mLastTimeForegroundServiceUsed; mTotalTimeInForeground = stats.mTotalTimeInForeground; + mTotalTimeForegroundServiceUsed = stats.mTotalTimeForegroundServiceUsed; mLaunchCount = stats.mLaunchCount; mAppLaunchCount = stats.mAppLaunchCount; mLastEvent = stats.mLastEvent; + mLastForegroundActivityEventMap = stats.mLastForegroundActivityEventMap; + mLastForegroundServiceEventMap = stats.mLastForegroundServiceEventMap; mChooserCounts = stats.mChooserCounts; } @@ -136,7 +182,7 @@ public final class UsageStats implements Parcelable { } /** - * Get the last time this package was used, measured in milliseconds since the epoch. + * Get the last time this package's activity was used, measured in milliseconds since the epoch. *

* See {@link System#currentTimeMillis()}. */ @@ -151,6 +197,23 @@ public final class UsageStats implements Parcelable { return mTotalTimeInForeground; } + /** + * Get the last time this package's foreground service was used, measured in milliseconds since + * the epoch. + *

+ * See {@link System#currentTimeMillis()}. + */ + public long getLastTimeForegroundServiceUsed() { + return mLastTimeForegroundServiceUsed; + } + + /** + * Get the total time this package's foreground services are started, measured in milliseconds. + */ + public long getTotalTimeForegroundServiceUsed() { + return mTotalTimeForegroundServiceUsed; + } + /** * Returns the number of times the app was launched as an activity from outside of the app. * Excludes intra-app activity transitions. @@ -161,6 +224,19 @@ public final class UsageStats implements Parcelable { return mAppLaunchCount; } + private void mergeEventMap(ArrayMap left, ArrayMap right) { + final int size = right.size(); + for (int i = 0; i < size; i++) { + final String className = right.keyAt(i); + final Integer event = right.valueAt(i); + if (left.containsKey(className)) { + left.put(className, Math.max(left.get(className), event)); + } else { + left.put(className, event); + } + } + } + /** * Add the statistics from the right {@link UsageStats} to the left. The package name for * both {@link UsageStats} objects must be the same. @@ -179,12 +255,16 @@ public final class UsageStats implements Parcelable { if (right.mBeginTimeStamp > mBeginTimeStamp) { // Even though incoming UsageStat begins after this one, its last time used fields // may somehow be empty or chronologically preceding the older UsageStat. - mLastEvent = Math.max(mLastEvent, right.mLastEvent); + mergeEventMap(mLastForegroundActivityEventMap, right.mLastForegroundActivityEventMap); + mergeEventMap(mLastForegroundServiceEventMap, right.mLastForegroundServiceEventMap); mLastTimeUsed = Math.max(mLastTimeUsed, right.mLastTimeUsed); + mLastTimeForegroundServiceUsed = Math.max(mLastTimeForegroundServiceUsed, + right.mLastTimeForegroundServiceUsed); } mBeginTimeStamp = Math.min(mBeginTimeStamp, right.mBeginTimeStamp); mEndTimeStamp = Math.max(mEndTimeStamp, right.mEndTimeStamp); mTotalTimeInForeground += right.mTotalTimeInForeground; + mTotalTimeForegroundServiceUsed += right.mTotalTimeForegroundServiceUsed; mLaunchCount += right.mLaunchCount; mAppLaunchCount += right.mAppLaunchCount; if (mChooserCounts == null) { @@ -209,6 +289,161 @@ public final class UsageStats implements Parcelable { } } + /** + * Tell if an event indicate activity is in foreground or not. + * @param event the activity event. + * @return true if activity is in foreground, false otherwise. + * @hide + */ + private boolean isActivityInForeground(int event) { + return event == MOVE_TO_FOREGROUND + || event == CONTINUE_PREVIOUS_DAY; + } + + /** + * Tell if an event indicate foreground sevice is started or not. + * @param event the foreground service event. + * @return true if foreground service is started, false if stopped. + * @hide + */ + private boolean isForegroundServiceStarted(int event) { + return event == FOREGROUND_SERVICE_START + || event == CONTINUING_FOREGROUND_SERVICE; + } + + /** + * If any activity in foreground or any foreground service is started, the app is considered in + * use. + * @return true if in use, false otherwise. + * @hide + */ + private boolean isAppInUse() { + return !mLastForegroundActivityEventMap.isEmpty() + || !mLastForegroundServiceEventMap.isEmpty(); + } + + /** + * Update by an event of an activity. + * @param className className of the activity. + * @param timeStamp timeStamp of the event. + * @param eventType type of the event. + * @hide + */ + private void updateForegroundActivity(String className, long timeStamp, int eventType) { + if (eventType != MOVE_TO_BACKGROUND + && eventType != MOVE_TO_FOREGROUND + && eventType != END_OF_DAY) { + return; + } + + final Integer lastEvent = mLastForegroundActivityEventMap.get(className); + if (lastEvent != null) { + if (isActivityInForeground(lastEvent)) { + if (timeStamp > mLastTimeUsed) { + mTotalTimeInForeground += timeStamp - mLastTimeUsed; + mLastTimeUsed = timeStamp; + } + } + if (eventType == MOVE_TO_BACKGROUND) { + mLastForegroundActivityEventMap.remove(className); + } else { + mLastForegroundActivityEventMap.put(className, eventType); + } + } else if (eventType == MOVE_TO_FOREGROUND) { + if (!isAppInUse()) { + mLastTimeUsed = timeStamp; + } + mLastForegroundActivityEventMap.put(className, eventType); + } + } + + /** + * Update by an event of an foreground service. + * @param className className of the foreground service. + * @param timeStamp timeStamp of the event. + * @param eventType type of the event. + * @hide + */ + private void updateForegroundService(String className, long timeStamp, int eventType) { + if (eventType != FOREGROUND_SERVICE_STOP + && eventType != FOREGROUND_SERVICE_START + && eventType != ROLLOVER_FOREGROUND_SERVICE) { + return; + } + final Integer lastEvent = mLastForegroundServiceEventMap.get(className); + if (lastEvent != null) { + if (isForegroundServiceStarted(lastEvent)) { + if (timeStamp > mLastTimeForegroundServiceUsed) { + mTotalTimeForegroundServiceUsed += + timeStamp - mLastTimeForegroundServiceUsed; + mLastTimeForegroundServiceUsed = timeStamp; + } + } + if (eventType == FOREGROUND_SERVICE_STOP) { + mLastForegroundServiceEventMap.remove(className); + } else { + mLastForegroundServiceEventMap.put(className, eventType); + } + } else if (eventType == FOREGROUND_SERVICE_START) { + if (!isAppInUse()) { + mLastTimeForegroundServiceUsed = timeStamp; + } + mLastForegroundServiceEventMap.put(className, eventType); + } + } + + /** + * Update the UsageStats by a activity or foreground service event. + * @param className class name of a activity or foreground service, could be null to mark + * END_OF_DAY or rollover. + * @param timeStamp Epoch timestamp in milliseconds. + * @param eventType event type as in {@link UsageEvents.Event} + * @hide + */ + public void update(String className, long timeStamp, int eventType) { + switch(eventType) { + case MOVE_TO_BACKGROUND: + case MOVE_TO_FOREGROUND: + updateForegroundActivity(className, timeStamp, eventType); + break; + case END_OF_DAY: + // END_OF_DAY means updating all activities. + final int size = mLastForegroundActivityEventMap.size(); + for (int i = 0; i < size; i++) { + final String name = mLastForegroundActivityEventMap.keyAt(i); + updateForegroundActivity(name, timeStamp, eventType); + } + break; + case CONTINUE_PREVIOUS_DAY: + mLastTimeUsed = timeStamp; + mLastForegroundActivityEventMap.put(className, eventType); + break; + case FOREGROUND_SERVICE_STOP: + case FOREGROUND_SERVICE_START: + updateForegroundService(className, timeStamp, eventType); + break; + case ROLLOVER_FOREGROUND_SERVICE: + // ROLLOVER_FOREGROUND_SERVICE means updating all foreground services. + final int size2 = mLastForegroundServiceEventMap.size(); + for (int i = 0; i < size2; i++) { + final String name = mLastForegroundServiceEventMap.keyAt(i); + updateForegroundService(name, timeStamp, eventType); + } + break; + case CONTINUING_FOREGROUND_SERVICE: + mLastTimeForegroundServiceUsed = timeStamp; + mLastForegroundServiceEventMap.put(className, eventType); + break; + default: + break; + } + mEndTimeStamp = timeStamp; + + if (eventType == MOVE_TO_FOREGROUND) { + mLaunchCount += 1; + } + } + @Override public int describeContents() { return 0; @@ -220,7 +455,9 @@ public final class UsageStats implements Parcelable { dest.writeLong(mBeginTimeStamp); dest.writeLong(mEndTimeStamp); dest.writeLong(mLastTimeUsed); + dest.writeLong(mLastTimeForegroundServiceUsed); dest.writeLong(mTotalTimeInForeground); + dest.writeLong(mTotalTimeForegroundServiceUsed); dest.writeInt(mLaunchCount); dest.writeInt(mAppLaunchCount); dest.writeInt(mLastEvent); @@ -239,6 +476,22 @@ public final class UsageStats implements Parcelable { } } dest.writeBundle(allCounts); + + final Bundle foregroundActivityEventBundle = new Bundle(); + final int foregroundEventSize = mLastForegroundActivityEventMap.size(); + for (int i = 0; i < foregroundEventSize; i++) { + foregroundActivityEventBundle.putInt(mLastForegroundActivityEventMap.keyAt(i), + mLastForegroundActivityEventMap.valueAt(i)); + } + dest.writeBundle(foregroundActivityEventBundle); + + final Bundle foregroundServiceEventBundle = new Bundle(); + final int foregroundServiceEventSize = mLastForegroundServiceEventMap.size(); + for (int i = 0; i < foregroundServiceEventSize; i++) { + foregroundServiceEventBundle.putInt(mLastForegroundServiceEventMap.keyAt(i), + mLastForegroundServiceEventMap.valueAt(i)); + } + dest.writeBundle(foregroundServiceEventBundle); } public static final Creator CREATOR = new Creator() { @@ -249,7 +502,9 @@ public final class UsageStats implements Parcelable { stats.mBeginTimeStamp = in.readLong(); stats.mEndTimeStamp = in.readLong(); stats.mLastTimeUsed = in.readLong(); + stats.mLastTimeForegroundServiceUsed = in.readLong(); stats.mTotalTimeInForeground = in.readLong(); + stats.mTotalTimeForegroundServiceUsed = in.readLong(); stats.mLaunchCount = in.readInt(); stats.mAppLaunchCount = in.readInt(); stats.mLastEvent = in.readInt(); @@ -272,9 +527,20 @@ public final class UsageStats implements Parcelable { } } } + readBundleToEventMap(stats.mLastForegroundActivityEventMap, in.readBundle()); + readBundleToEventMap(stats.mLastForegroundServiceEventMap, in.readBundle()); return stats; } + private void readBundleToEventMap(ArrayMap eventMap, Bundle bundle) { + if (bundle != null) { + for (String className : bundle.keySet()) { + final int event = bundle.getInt(className); + eventMap.put(className, event); + } + } + } + @Override public UsageStats[] newArray(int size) { return new UsageStats[size]; diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index dbb00eb5c288597d857a10ff8cc5a7768eac9658..55148511ed103aa6be6f04236d213cb38743de14 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -18,6 +18,7 @@ package android.app.usage; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; @@ -191,7 +192,10 @@ public final class UsageStatsManager { public static final int REASON_SUB_USAGE_EXEMPTED_SYNC_SCHEDULED_DOZE = 0x000C; /** @hide */ public static final int REASON_SUB_USAGE_EXEMPTED_SYNC_START = 0x000D; - + /** @hide */ + public static final int REASON_SUB_USAGE_FOREGROUND_SERVICE_START = 0x000E; + /** @hide */ + public static final int REASON_SUB_USAGE_FOREGROUND_SERVICE_STOP = 0x000F; /** @hide */ public static final int REASON_SUB_PREDICTED_RESTORED = 0x0001; @@ -595,7 +599,7 @@ public final class UsageStatsManager { * exceeded by the group of apps. The delivered Intent will also contain * the extras {@link #EXTRA_OBSERVER_ID}, {@link #EXTRA_TIME_LIMIT} and * {@link #EXTRA_TIME_USED}. Cannot be null. - * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission or + * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission and * is not the profile owner of this user. */ @SystemApi @@ -616,7 +620,7 @@ public final class UsageStatsManager { * to any observer registered by this application. Unregistering an observer that was already * unregistered or never registered will have no effect. * @param observerId The id of the observer that was previously registered. - * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission or is + * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission and is * not the profile owner of this user. */ @SystemApi @@ -629,6 +633,81 @@ public final class UsageStatsManager { } } + /** + * Register a usage session observer that receives a callback on the provided {@code + * limitReachedCallbackIntent} when the sum of usages of apps in the packages array exceeds + * the {@code timeLimit} specified within a usage session. After the {@code timeLimit} has + * been reached, the usage session observer will receive a callback on the provided {@code + * sessionEndCallbackIntent} when the usage session ends. Registering another session + * observer against a {@code sessionObserverId} that has already been registered will + * override the previous session observer. + * + * @param sessionObserverId A unique id associated with the group of apps to be + * monitored. There can be multiple groups with common + * packages and different time limits. + * @param packages The list of packages to observe for foreground activity time. Cannot be null + * and must include at least one package. + * @param timeLimit The total time the set of apps can be used continuously before the {@code + * limitReachedCallbackIntent} is delivered. Must be at least one minute. + * @param timeUnit The unit for time specified in {@code timeLimit}. Cannot be null. + * @param sessionThresholdTime The time that can take place between usage sessions before the + * next session is considered a new session. Must be non-negative. + * @param sessionThresholdTimeUnit The unit for time specified in {@code sessionThreshold}. + * Cannot be null. + * @param limitReachedCallbackIntent The {@link PendingIntent} that will be dispatched when the + * time limit is exceeded by the group of apps. The delivered + * Intent will also contain the extras {@link + * #EXTRA_OBSERVER_ID}, {@link #EXTRA_TIME_LIMIT} and {@link + * #EXTRA_TIME_USED}. Cannot be null. + * @param sessionEndCallbackIntent The {@link PendingIntent} that will be dispatched when the + * session has ended after the time limit has been exceeded. The + * session is considered at its end after the {@code observed} + * usage has stopped and an additional {@code + * sessionThresholdTime} has passed. The delivered Intent will + * also contain the extras {@link #EXTRA_OBSERVER_ID} and {@link + * #EXTRA_TIME_USED}. Can be null. + * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission and + * is not the profile owner of this user. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) + public void registerUsageSessionObserver(int sessionObserverId, @NonNull String[] packages, + long timeLimit, @NonNull TimeUnit timeUnit, long sessionThresholdTime, + @NonNull TimeUnit sessionThresholdTimeUnit, + @NonNull PendingIntent limitReachedCallbackIntent, + @Nullable PendingIntent sessionEndCallbackIntent) { + try { + mService.registerUsageSessionObserver(sessionObserverId, packages, + timeUnit.toMillis(timeLimit), + sessionThresholdTimeUnit.toMillis(sessionThresholdTime), + limitReachedCallbackIntent, sessionEndCallbackIntent, + mContext.getOpPackageName()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Unregister the usage session observer specified by the {@code sessionObserverId}. This will + * only apply to any app session observer registered by this application. Unregistering an + * observer that was already unregistered or never registered will have no effect. + * + * @param sessionObserverId The id of the observer that was previously registered. + * @throws SecurityException if the caller doesn't have the OBSERVE_APP_USAGE permission and + * is not the profile owner of this user. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) + public void unregisterUsageSessionObserver(int sessionObserverId) { + try { + mService.unregisterUsageSessionObserver(sessionObserverId, mContext.getOpPackageName()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** @hide */ public static String reasonToString(int standbyReason) { StringBuilder sb = new StringBuilder(); diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java index a9187b65a3592378df9eab272d8545aa2a9be2ec..318dbee99e5abe543cbcc77d7f2d7372ebd804b0 100644 --- a/core/java/android/appwidget/AppWidgetHostView.java +++ b/core/java/android/appwidget/AppWidgetHostView.java @@ -17,9 +17,15 @@ package android.appwidget; import android.annotation.UnsupportedAppUsage; +import android.app.Activity; +import android.app.ActivityOptions; import android.content.ComponentName; import android.content.Context; +import android.content.ContextWrapper; +import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.LauncherActivityInfo; +import android.content.pm.LauncherApps; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.Color; @@ -30,6 +36,7 @@ import android.os.CancellationSignal; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; +import android.util.Pair; import android.util.SparseArray; import android.view.Gravity; import android.view.LayoutInflater; @@ -44,6 +51,8 @@ import android.widget.RemoteViews.OnClickHandler; import android.widget.RemoteViewsAdapter.RemoteAdapterConnectionCallback; import android.widget.TextView; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; /** @@ -615,6 +624,7 @@ public class AppWidgetHostView extends FrameLayout { } } defaultView = inflater.inflate(layoutId, this, false); + defaultView.setOnClickListener(this::onDefaultViewClicked); } else { Log.w(TAG, "can't inflate defaultView because mInfo is missing"); } @@ -634,6 +644,19 @@ public class AppWidgetHostView extends FrameLayout { return defaultView; } + private void onDefaultViewClicked(View view) { + if (mInfo != null) { + LauncherApps launcherApps = getContext().getSystemService(LauncherApps.class); + List activities = launcherApps.getActivityList( + mInfo.provider.getPackageName(), mInfo.getProfile()); + if (!activities.isEmpty()) { + LauncherActivityInfo ai = activities.get(0); + launcherApps.startMainActivity(ai.getComponentName(), ai.getUser(), + RemoteViews.getSourceBounds(view), null); + } + } + } + /** * Inflate and return a view that represents an error state. */ @@ -651,4 +674,39 @@ public class AppWidgetHostView extends FrameLayout { super.onInitializeAccessibilityNodeInfoInternal(info); info.setClassName(AppWidgetHostView.class.getName()); } + + /** @hide */ + public ActivityOptions createSharedElementActivityOptions( + int[] sharedViewIds, String[] sharedViewNames, Intent fillInIntent) { + Context parentContext = getContext(); + while ((parentContext instanceof ContextWrapper) + && !(parentContext instanceof Activity)) { + parentContext = ((ContextWrapper) parentContext).getBaseContext(); + } + if (!(parentContext instanceof Activity)) { + return null; + } + + List> sharedElements = new ArrayList<>(); + Bundle extras = new Bundle(); + + for (int i = 0; i < sharedViewIds.length; i++) { + View view = findViewById(sharedViewIds[i]); + if (view != null) { + sharedElements.add(Pair.create(view, sharedViewNames[i])); + + extras.putParcelable(sharedViewNames[i], RemoteViews.getSourceBounds(view)); + } + } + + if (!sharedElements.isEmpty()) { + fillInIntent.putExtra(RemoteViews.EXTRA_SHARED_ELEMENT_BOUNDS, extras); + final ActivityOptions opts = ActivityOptions.makeSceneTransitionAnimation( + (Activity) parentContext, + sharedElements.toArray(new Pair[sharedElements.size()])); + opts.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + return opts; + } + return null; + } } diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index ed3d4557061e915606a827aa68c92c400b54aa0f..8777b670484530167f61ae2a902cb918d6d61a0c 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -27,6 +27,7 @@ import android.graphics.Bitmap; import android.net.Uri; import android.os.Build; import android.os.Parcel; +import android.os.ParcelFileDescriptor; import android.os.Parcelable; import android.os.StrictMode; import android.text.Html; @@ -170,6 +171,11 @@ public class ClipData implements Parcelable { static final String[] MIMETYPES_TEXT_INTENT = new String[] { ClipDescription.MIMETYPE_TEXT_INTENT }; + // Constants used in {@link #writeHtmlTextToParcel}. + static final int PARCEL_MAX_SIZE_BYTES = 800 * 1024; + static final int PARCEL_TYPE_STRING = 0; + static final int PARCEL_TYPE_PFD = 1; + final ClipDescription mClipDescription; final Bitmap mIcon; @@ -225,6 +231,10 @@ public class ClipData implements Parcelable { * with an alternative HTML formatted representation. You must * supply a plain text representation in addition to HTML text; coercion * will not be done from HTML formatted text into plain text. + *

Note: It is strongly recommended to + * use content: URI for sharing large clip data. Starting on API 30, + * ClipData.Item doesn't accept an HTML text if it's larger than 800KB. + *

*/ public Item(CharSequence text, String htmlText) { mText = text; @@ -1132,7 +1142,7 @@ public class ClipData implements Parcelable { for (int i=0; i PARCEL_MAX_SIZE_BYTES / 2 + && Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + try { + ParcelFileDescriptor pfd = ParcelFileDescriptor.fromData(textData, null); + dest.writeInt(PARCEL_TYPE_PFD); + dest.writeParcelable(pfd, flags); + } catch (IOException e) { + throw new IllegalStateException( + "Error creating the shared memory area: " + e.toString()); + } + } else { + dest.writeInt(PARCEL_TYPE_STRING); + dest.writeString(text); + } + } + + /** + * Reads a text written by writeHtmlTextToParcel. + */ + private static String readHtmlTextFromParcel(Parcel in) { + if (in.readInt() == PARCEL_TYPE_STRING) { + return in.readString(); + } + ParcelFileDescriptor pfd = + in.readParcelable(ParcelFileDescriptor.class.getClassLoader()); + if (pfd == null) { + throw new IllegalStateException("Error reading ParcelFileDescriptor from Parcel"); + } + FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd); + InputStreamReader reader = new InputStreamReader(fis); + StringBuilder builder = new StringBuilder(); + char[] buffer = new char[4096]; + int numRead; + try { + while ((numRead = reader.read(buffer)) != -1) { + builder.append(buffer, 0, numRead); + } + return builder.toString(); + } catch (IOException e) { + throw new IllegalStateException( + "Error reading data from ParcelFileDescriptor: " + e.toString()); + } finally { + IoUtils.closeQuietly(fis); + } + } } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index c233a0c3764539d1d24f6ee4ee593cf10d0b2aa5..ca2d7e337f0b38cd7e1e3d085db55fe1e0142e61 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -36,11 +36,9 @@ import android.database.CrossProcessCursorWrapper; import android.database.Cursor; import android.database.IContentObserver; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.ImageDecoder; import android.graphics.ImageDecoder.ImageInfo; import android.graphics.ImageDecoder.Source; -import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -54,8 +52,9 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; +import android.os.SystemProperties; import android.os.UserHandle; -import android.provider.DocumentsContract; +import android.os.storage.StorageManager; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; @@ -90,6 +89,30 @@ import java.util.concurrent.atomic.AtomicBoolean; * developer guide.

*/ public abstract class ContentResolver { + /** + * Enables logic that supports deprecation of {@code _data} columns, + * typically by replacing values with fake paths that the OS then offers to + * redirect to {@link #openFileDescriptor(Uri, String)}, which developers + * should be using directly. + * + * @hide + */ + public static final boolean DEPRECATE_DATA_COLUMNS = SystemProperties + .getBoolean(StorageManager.PROP_ISOLATED_STORAGE, false); + + /** + * Special filesystem path prefix which indicates that a path should be + * treated as a {@code content://} {@link Uri} when + * {@link #DEPRECATE_DATA_COLUMNS} is enabled. + *

+ * The remainder of the path after this prefix is a + * {@link Uri#getSchemeSpecificPart()} value, which includes authority, path + * segments, and query parameters. + * + * @hide + */ + public static final String DEPRECATE_DATA_PREFIX = "/mnt/content/"; + /** * @deprecated instead use * {@link #requestSync(android.accounts.Account, String, android.os.Bundle)} @@ -3258,4 +3281,25 @@ public abstract class ContentResolver { } }); } + + /** {@hide} */ + public static void onDbCorruption(String tag, String message, Throwable stacktrace) { + try { + getContentService().onDbCorruption(tag, message, Log.getStackTraceString(stacktrace)); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + } + + /** {@hide} */ + public static Uri translateDeprecatedDataPath(String path) { + final String ssp = "//" + path.substring(DEPRECATE_DATA_PREFIX.length()); + return Uri.parse(new Uri.Builder().scheme(SCHEME_CONTENT) + .encodedOpaquePart(ssp).build().toString()); + } + + /** {@hide} */ + public static String translateDeprecatedDataPath(Uri uri) { + return DEPRECATE_DATA_PREFIX + uri.getEncodedSchemeSpecificPart().substring(2); + } } diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 31973524ceaff14584c3902ffb8b6b88556fd796..004417b80e262f5dad7070cc98c766f93702a430 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -2906,8 +2906,9 @@ public abstract class Context { * @param flags Operation options for the binding. May be 0, * {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND}, * {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT}, - * {@link #BIND_ALLOW_OOM_MANAGEMENT}, or - * {@link #BIND_WAIVE_PRIORITY}. + * {@link #BIND_ALLOW_OOM_MANAGEMENT}, {@link #BIND_WAIVE_PRIORITY}. + * {@link #BIND_IMPORTANT}, or + * {@link #BIND_ADJUST_WITH_ACTIVITY}. * @return {@code true} if the system is in the process of bringing up a * service that your client has permission to bind to; {@code false} * if the system couldn't find the service or if your client doesn't @@ -2923,10 +2924,37 @@ public abstract class Context { * @see #BIND_AUTO_CREATE * @see #BIND_DEBUG_UNBIND * @see #BIND_NOT_FOREGROUND + * @see #BIND_ABOVE_CLIENT + * @see #BIND_ALLOW_OOM_MANAGEMENT + * @see #BIND_WAIVE_PRIORITY + * @see #BIND_IMPORTANT + * @see #BIND_ADJUST_WITH_ACTIVITY */ public abstract boolean bindService(@RequiresPermission Intent service, @NonNull ServiceConnection conn, @BindServiceFlags int flags); + /** + * Variation of {@link #bindService} that, in the specific case of isolated + * services, allows the caller to generate multiple instances of a service + * from a single component declaration. + * + * @param service Identifies the service to connect to. The Intent must + * specify an explicit component name. + * @param conn Receives information as the service is started and stopped. + * This must be a valid ServiceConnection object; it must not be null. + * @param flags Operation options for the binding as per {@link #bindService}. + * @param instanceName Unique identifier for the service instance. Each unique + * name here will result in a different service instance being created. + * @return Returns success of binding as per {@link #bindService}. + * + * @throws SecurityException If the caller does not have permission to access the service + * + * @see #bindService + */ + public abstract boolean bindIsolatedService(@RequiresPermission Intent service, + @NonNull ServiceConnection conn, @BindServiceFlags int flags, + @NonNull String instanceName); + /** * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle * argument for use by system server and other multi-user aware code. @@ -2941,7 +2969,7 @@ public abstract class Context { } /** - * Same as {@link #bindService(Intent, ServiceConnection, int, UserHandle)}, but with an + * Same as {@link #bindServiceAsUser(Intent, ServiceConnection, int, UserHandle)}, but with an * explicit non-null Handler to run the ServiceConnection callbacks on. * * @hide @@ -3061,6 +3089,7 @@ public abstract class Context { USER_SERVICE, RESTRICTIONS_SERVICE, APP_OPS_SERVICE, + ROLE_SERVICE, CAMERA_SERVICE, PRINT_SERVICE, CONSUMER_IR_SERVICE, @@ -3703,6 +3732,17 @@ public abstract class Context { */ public static final String FACE_SERVICE = "face"; + /** + * Use with {@link #getSystemService(String)} to retrieve a + * {@link android.hardware.iris.IrisManager} for handling management + * of iris authentication. + * + * @hide + * @see #getSystemService + * @see android.hardware.iris.IrisManager + */ + public static final String IRIS_SERVICE = "iris"; + /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.hardware.biometrics.BiometricManager} for handling management @@ -3852,6 +3892,14 @@ public abstract class Context { */ public static final String AUTOFILL_MANAGER_SERVICE = "autofill"; + /** + * Official published name of the intelligence service. + * + * @hide + * @see #getSystemService(String) + */ + public static final String INTELLIGENCE_MANAGER_SERVICE = "intelligence"; + /** * Use with {@link #getSystemService(String)} to access the * {@link com.android.server.voiceinteraction.SoundTriggerService}. @@ -3964,6 +4012,18 @@ public abstract class Context { */ public static final String USB_SERVICE = "usb"; + /** + * Use with {@link #getSystemService(String)} to retrieve a {@link + * Use with {@link #getSystemService} to retrieve a {@link + * android.debug.AdbManager} for access to ADB debug functions. + * + * @see #getSystemService(String) + * @see android.debug.AdbManager + * + * @hide + */ + public static final String ADB_SERVICE = "adb"; + /** * Use with {@link #getSystemService(String)} to retrieve a {@link * android.hardware.SerialManager} for access to serial ports. @@ -4043,6 +4103,15 @@ public abstract class Context { */ public static final String APP_OPS_SERVICE = "appops"; + /** + * Use with {@link #getSystemService(String)} to retrieve a {@link android.app.role.RoleManager} + * for managing roles. + * + * @see #getSystemService(String) + * @see android.app.role.RoleManager + */ + public static final String ROLE_SERVICE = "role"; + /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.hardware.camera2.CameraManager} for interacting with @@ -4184,6 +4253,15 @@ public abstract class Context { */ public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; + /** + * Use with {@link #getSystemService(String)} to retrieve a + * {@link android.os.ThermalService} for accessing the thermal service. + * + * @see #getSystemService(String) + * @hide + */ + public static final String THERMAL_SERVICE = "thermalservice"; + /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.content.pm.ShortcutManager} for accessing the launcher shortcut service. @@ -4255,6 +4333,16 @@ public abstract class Context { */ public static final String OVERLAY_SERVICE = "overlay"; + /** + * Use with {@link #getSystemService(String)} to retrieve a + * {android.os.IIdmap2} for managing idmap files (used by overlay + * packages). + * + * @see #getSystemService(String) + * @hide + */ + public static final String IDMAP_SERVICE = "idmap"; + /** * Use with {@link #getSystemService(String)} to retrieve a * {@link VrManager} for accessing the VR service. @@ -4316,6 +4404,13 @@ public abstract class Context { */ public static final String APP_BINDING_SERVICE = "app_binding"; + /** + * Use with {@link #getSystemService(String)} to retrieve an + * {@link android.telephony.rcs.RcsManager}. + * @hide + */ + public static final String TELEPHONY_RCS_SERVICE = "ircs"; + /** * Determine whether the given permission is allowed for a particular * process and user ID running in the system. diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index bfad2b42bc94b1bff89e39fb7d51cf85ac46e674..88696b0e1e4dba500a8b850674f046734cebae19 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -705,6 +705,12 @@ public class ContextWrapper extends Context { return mBase.bindService(service, conn, flags); } + @Override + public boolean bindIsolatedService(Intent service, ServiceConnection conn, + int flags, String instanceName) { + return mBase.bindIsolatedService(service, conn, flags, instanceName); + } + /** @hide */ @Override public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl index a55dd31f265fa91064ed66aa3d113b909ed0689d..1d0237502812371ccc75fabe7a0c1c4e236f2b13 100644 --- a/core/java/android/content/IContentService.aidl +++ b/core/java/android/content/IContentService.aidl @@ -185,4 +185,6 @@ interface IContentService { Bundle getCache(in String packageName, in Uri key, int userId); void resetTodayStats(); + + void onDbCorruption(String tag, String message, String stacktrace); } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 5bad27c813b1ca66908a5d9c891168d50edd8a53..6cebb53c74e8ef08a20ed3c84d8f4d9504da7a00 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -23,6 +23,7 @@ import android.annotation.BroadcastBehavior; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; @@ -1726,10 +1727,14 @@ public class Intent implements Parcelable, Cloneable { = "android.intent.extra.UNINSTALL_ALL_USERS"; /** - * A string associated with a {@link #ACTION_UPGRADE_SETUP} activity - * describing the last run version of the platform that was setup. + * A string that associates with a metadata entry, indicating the last run version of the + * platform that was setup. + * + * @see #ACTION_UPGRADE_SETUP + * * @hide */ + @SystemApi public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION"; /** @@ -1751,6 +1756,30 @@ public class Intent implements Parcelable, Cloneable { public static final String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS"; + /** + * Activity action: Launch UI to manage a specific permissions of an app. + *

+ * Input: {@link #EXTRA_PACKAGE_NAME} specifies the package whose permission + * will be managed by the launched UI. + *

+ *

+ * Input: {@link #EXTRA_PERMISSION_NAME} specifies the (individual) permission + * that should be managed by the launched UI. + *

+ *

+ * Output: Nothing. + *

+ * + * @see #EXTRA_PACKAGE_NAME + * @see #EXTRA_PERMISSION_NAME + * + * @hide + */ + @SystemApi + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_MANAGE_APP_PERMISSION = + "android.intent.action.MANAGE_APP_PERMISSION"; + /** * Activity action: Launch UI to manage permissions. *

@@ -1881,8 +1910,8 @@ public class Intent implements Parcelable, Cloneable { /** * Activity action: Launch UI to manage which apps have a given permission. *

- * Input: {@link #EXTRA_PERMISSION_NAME} specifies the permission access - * to which will be managed by the launched UI. + * Input: {@link #EXTRA_PERMISSION_NAME} specifies the permission group + * which will be managed by the launched UI. *

*

* Output: Nothing. @@ -1908,6 +1937,45 @@ public class Intent implements Parcelable, Cloneable { @SystemApi public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME"; + /** + * Activity action: Launch UI to review app uses of permissions. + *

+ * Input: Nothing + *

+ *

+ * Output: Nothing. + *

+ * + * @hide + */ + @SystemApi + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_REVIEW_PERMISSION_USAGE = + "android.intent.action.REVIEW_PERMISSION_USAGE"; + + /** + * Activity action: Launch UI to review uses of permissions for a single app. + *

+ * Input: {@link #EXTRA_PACKAGE_NAME} specifies the package whose + * permissions will be reviewed (mandatory). + *

+ *

+ * Output: Nothing. + *

+ *

+ * This requires {@link android.Manifest.permission#GRANT_RUNTIME_PERMISSIONS} permission. + *

+ * + * @see #EXTRA_PACKAGE_NAME + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_REVIEW_APP_PERMISSION_USAGE = + "android.intent.action.REVIEW_APP_PERMISSION_USAGE"; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent broadcast actions (see action variable). @@ -5281,6 +5349,7 @@ public class Intent implements Parcelable, Cloneable { FLAG_RECEIVER_EXCLUDE_BACKGROUND, FLAG_RECEIVER_FROM_SHELL, FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS, + FLAG_RECEIVER_OFFLOAD, }) @Retention(RetentionPolicy.SOURCE) public @interface Flags {} @@ -5325,6 +5394,7 @@ public class Intent implements Parcelable, Cloneable { FLAG_RECEIVER_EXCLUDE_BACKGROUND, FLAG_RECEIVER_FROM_SHELL, FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS, + FLAG_RECEIVER_OFFLOAD, }) @Retention(RetentionPolicy.SOURCE) public @interface MutableFlags {} @@ -5750,6 +5820,12 @@ public class Intent implements Parcelable, Cloneable { * background priority class. */ public static final int FLAG_RECEIVER_FOREGROUND = 0x10000000; + /** + * If set, when sending a broadcast the recipient will be run on the offload queue. + * + * @hide + */ + public static final int FLAG_RECEIVER_OFFLOAD = 0x80000000; /** * If this is an ordered broadcast, don't allow receivers to abort the broadcast. * They can still propagate results through to later receivers, but they can not prevent @@ -7444,7 +7520,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, String) */ - public String getStringExtra(String name) { + public @Nullable String getStringExtra(String name) { return mExtras == null ? null : mExtras.getString(name); } @@ -7458,7 +7534,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, CharSequence) */ - public CharSequence getCharSequenceExtra(String name) { + public @Nullable CharSequence getCharSequenceExtra(String name) { return mExtras == null ? null : mExtras.getCharSequence(name); } @@ -7472,7 +7548,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, Parcelable) */ - public T getParcelableExtra(String name) { + public @Nullable T getParcelableExtra(String name) { return mExtras == null ? null : mExtras.getParcelable(name); } @@ -7486,7 +7562,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, Parcelable[]) */ - public Parcelable[] getParcelableArrayExtra(String name) { + public @Nullable Parcelable[] getParcelableArrayExtra(String name) { return mExtras == null ? null : mExtras.getParcelableArray(name); } @@ -7501,7 +7577,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putParcelableArrayListExtra(String, ArrayList) */ - public ArrayList getParcelableArrayListExtra(String name) { + public @Nullable ArrayList getParcelableArrayListExtra(String name) { return mExtras == null ? null : mExtras.getParcelableArrayList(name); } @@ -7515,7 +7591,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, Serializable) */ - public Serializable getSerializableExtra(String name) { + public @Nullable Serializable getSerializableExtra(String name) { return mExtras == null ? null : mExtras.getSerializable(name); } @@ -7530,7 +7606,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putIntegerArrayListExtra(String, ArrayList) */ - public ArrayList getIntegerArrayListExtra(String name) { + public @Nullable ArrayList getIntegerArrayListExtra(String name) { return mExtras == null ? null : mExtras.getIntegerArrayList(name); } @@ -7545,7 +7621,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putStringArrayListExtra(String, ArrayList) */ - public ArrayList getStringArrayListExtra(String name) { + public @Nullable ArrayList getStringArrayListExtra(String name) { return mExtras == null ? null : mExtras.getStringArrayList(name); } @@ -7560,7 +7636,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putCharSequenceArrayListExtra(String, ArrayList) */ - public ArrayList getCharSequenceArrayListExtra(String name) { + public @Nullable ArrayList getCharSequenceArrayListExtra(String name) { return mExtras == null ? null : mExtras.getCharSequenceArrayList(name); } @@ -7574,7 +7650,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, boolean[]) */ - public boolean[] getBooleanArrayExtra(String name) { + public @Nullable boolean[] getBooleanArrayExtra(String name) { return mExtras == null ? null : mExtras.getBooleanArray(name); } @@ -7588,7 +7664,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, byte[]) */ - public byte[] getByteArrayExtra(String name) { + public @Nullable byte[] getByteArrayExtra(String name) { return mExtras == null ? null : mExtras.getByteArray(name); } @@ -7602,7 +7678,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, short[]) */ - public short[] getShortArrayExtra(String name) { + public @Nullable short[] getShortArrayExtra(String name) { return mExtras == null ? null : mExtras.getShortArray(name); } @@ -7616,7 +7692,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, char[]) */ - public char[] getCharArrayExtra(String name) { + public @Nullable char[] getCharArrayExtra(String name) { return mExtras == null ? null : mExtras.getCharArray(name); } @@ -7630,7 +7706,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, int[]) */ - public int[] getIntArrayExtra(String name) { + public @Nullable int[] getIntArrayExtra(String name) { return mExtras == null ? null : mExtras.getIntArray(name); } @@ -7644,7 +7720,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, long[]) */ - public long[] getLongArrayExtra(String name) { + public @Nullable long[] getLongArrayExtra(String name) { return mExtras == null ? null : mExtras.getLongArray(name); } @@ -7658,7 +7734,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, float[]) */ - public float[] getFloatArrayExtra(String name) { + public @Nullable float[] getFloatArrayExtra(String name) { return mExtras == null ? null : mExtras.getFloatArray(name); } @@ -7672,7 +7748,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, double[]) */ - public double[] getDoubleArrayExtra(String name) { + public @Nullable double[] getDoubleArrayExtra(String name) { return mExtras == null ? null : mExtras.getDoubleArray(name); } @@ -7686,7 +7762,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, String[]) */ - public String[] getStringArrayExtra(String name) { + public @Nullable String[] getStringArrayExtra(String name) { return mExtras == null ? null : mExtras.getStringArray(name); } @@ -7700,7 +7776,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, CharSequence[]) */ - public CharSequence[] getCharSequenceArrayExtra(String name) { + public @Nullable CharSequence[] getCharSequenceArrayExtra(String name) { return mExtras == null ? null : mExtras.getCharSequenceArray(name); } @@ -7714,7 +7790,7 @@ public class Intent implements Parcelable, Cloneable { * * @see #putExtra(String, Bundle) */ - public Bundle getBundleExtra(String name) { + public @Nullable Bundle getBundleExtra(String name) { return mExtras == null ? null : mExtras.getBundle(name); } @@ -8520,7 +8596,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getStringExtra(String) */ - public @NonNull Intent putExtra(String name, String value) { + public @NonNull Intent putExtra(String name, @Nullable String value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8543,7 +8619,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getCharSequenceExtra(String) */ - public @NonNull Intent putExtra(String name, CharSequence value) { + public @NonNull Intent putExtra(String name, @Nullable CharSequence value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8566,7 +8642,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getParcelableExtra(String) */ - public @NonNull Intent putExtra(String name, Parcelable value) { + public @NonNull Intent putExtra(String name, @Nullable Parcelable value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8589,7 +8665,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getParcelableArrayExtra(String) */ - public @NonNull Intent putExtra(String name, Parcelable[] value) { + public @NonNull Intent putExtra(String name, @Nullable Parcelable[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8613,7 +8689,7 @@ public class Intent implements Parcelable, Cloneable { * @see #getParcelableArrayListExtra(String) */ public @NonNull Intent putParcelableArrayListExtra(String name, - ArrayList value) { + @Nullable ArrayList value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8636,7 +8712,8 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getIntegerArrayListExtra(String) */ - public @NonNull Intent putIntegerArrayListExtra(String name, ArrayList value) { + public @NonNull Intent putIntegerArrayListExtra(String name, + @Nullable ArrayList value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8659,7 +8736,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getStringArrayListExtra(String) */ - public @NonNull Intent putStringArrayListExtra(String name, ArrayList value) { + public @NonNull Intent putStringArrayListExtra(String name, @Nullable ArrayList value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8683,7 +8760,7 @@ public class Intent implements Parcelable, Cloneable { * @see #getCharSequenceArrayListExtra(String) */ public @NonNull Intent putCharSequenceArrayListExtra(String name, - ArrayList value) { + @Nullable ArrayList value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8706,7 +8783,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getSerializableExtra(String) */ - public @NonNull Intent putExtra(String name, Serializable value) { + public @NonNull Intent putExtra(String name, @Nullable Serializable value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8729,7 +8806,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getBooleanArrayExtra(String) */ - public @NonNull Intent putExtra(String name, boolean[] value) { + public @NonNull Intent putExtra(String name, @Nullable boolean[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8752,7 +8829,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getByteArrayExtra(String) */ - public @NonNull Intent putExtra(String name, byte[] value) { + public @NonNull Intent putExtra(String name, @Nullable byte[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8775,7 +8852,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getShortArrayExtra(String) */ - public @NonNull Intent putExtra(String name, short[] value) { + public @NonNull Intent putExtra(String name, @Nullable short[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8798,7 +8875,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getCharArrayExtra(String) */ - public @NonNull Intent putExtra(String name, char[] value) { + public @NonNull Intent putExtra(String name, @Nullable char[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8821,7 +8898,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getIntArrayExtra(String) */ - public @NonNull Intent putExtra(String name, int[] value) { + public @NonNull Intent putExtra(String name, @Nullable int[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8844,7 +8921,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getLongArrayExtra(String) */ - public @NonNull Intent putExtra(String name, long[] value) { + public @NonNull Intent putExtra(String name, @Nullable long[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8867,7 +8944,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getFloatArrayExtra(String) */ - public @NonNull Intent putExtra(String name, float[] value) { + public @NonNull Intent putExtra(String name, @Nullable float[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8890,7 +8967,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getDoubleArrayExtra(String) */ - public @NonNull Intent putExtra(String name, double[] value) { + public @NonNull Intent putExtra(String name, @Nullable double[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8913,7 +8990,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getStringArrayExtra(String) */ - public @NonNull Intent putExtra(String name, String[] value) { + public @NonNull Intent putExtra(String name, @Nullable String[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8936,7 +9013,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getCharSequenceArrayExtra(String) */ - public @NonNull Intent putExtra(String name, CharSequence[] value) { + public @NonNull Intent putExtra(String name, @Nullable CharSequence[] value) { if (mExtras == null) { mExtras = new Bundle(); } @@ -8959,7 +9036,7 @@ public class Intent implements Parcelable, Cloneable { * @see #removeExtra * @see #getBundleExtra(String) */ - public @NonNull Intent putExtra(String name, Bundle value) { + public @NonNull Intent putExtra(String name, @Nullable Bundle value) { if (mExtras == null) { mExtras = new Bundle(); } diff --git a/core/java/android/content/MimeTypeFilter.java b/core/java/android/content/MimeTypeFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..1c26fd917f76588c0e2a44f5ed1c02b0eece7105 --- /dev/null +++ b/core/java/android/content/MimeTypeFilter.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +import java.util.ArrayList; + +/** + * Provides utility methods for matching MIME type filters used in ContentProvider. + * + *

Wildcards are allowed only instead of the entire type or subtype with a tree prefix. + * Eg. image\/*, *\/* is a valid filter and will match image/jpeg, but image/j* is invalid and + * it will not match image/jpeg. Suffixes and parameters are not supported, and they are treated + * as part of the subtype during matching. Neither type nor subtype can be empty. + * + *

Note: MIME type matching in the Android framework is case-sensitive, unlike the formal + * RFC definitions. As a result, you should always write these elements with lower case letters, + * or use {@link android.content.Intent#normalizeMimeType} to ensure that they are converted to + * lower case. + * + *

MIME types can be null or ill-formatted. In such case they won't match anything. + * + *

MIME type filters must be correctly formatted, or an exception will be thrown. + * Copied from support library. + * {@hide} + */ +public final class MimeTypeFilter { + + private MimeTypeFilter() { + } + + private static boolean mimeTypeAgainstFilter( + @NonNull String[] mimeTypeParts, @NonNull String[] filterParts) { + if (filterParts.length != 2) { + throw new IllegalArgumentException( + "Ill-formatted MIME type filter. Must be type/subtype."); + } + if (filterParts[0].isEmpty() || filterParts[1].isEmpty()) { + throw new IllegalArgumentException( + "Ill-formatted MIME type filter. Type or subtype empty."); + } + if (mimeTypeParts.length != 2) { + return false; + } + if (!"*".equals(filterParts[0]) + && !filterParts[0].equals(mimeTypeParts[0])) { + return false; + } + if (!"*".equals(filterParts[1]) + && !filterParts[1].equals(mimeTypeParts[1])) { + return false; + } + + return true; + } + + /** + * Matches one nullable MIME type against one MIME type filter. + * @return True if the {@code mimeType} matches the {@code filter}. + */ + public static boolean matches(@Nullable String mimeType, @NonNull String filter) { + if (mimeType == null) { + return false; + } + + final String[] mimeTypeParts = mimeType.split("/"); + final String[] filterParts = filter.split("/"); + + return mimeTypeAgainstFilter(mimeTypeParts, filterParts); + } + + /** + * Matches one nullable MIME type against an array of MIME type filters. + * @return The first matching filter, or null if nothing matches. + */ + @Nullable + public static String matches( + @Nullable String mimeType, @NonNull String[] filters) { + if (mimeType == null) { + return null; + } + + final String[] mimeTypeParts = mimeType.split("/"); + for (String filter : filters) { + final String[] filterParts = filter.split("/"); + if (mimeTypeAgainstFilter(mimeTypeParts, filterParts)) { + return filter; + } + } + + return null; + } + + /** + * Matches multiple MIME types against an array of MIME type filters. + * @return The first matching MIME type, or null if nothing matches. + */ + @Nullable + public static String matches( + @Nullable String[] mimeTypes, @NonNull String filter) { + if (mimeTypes == null) { + return null; + } + + final String[] filterParts = filter.split("/"); + for (String mimeType : mimeTypes) { + final String[] mimeTypeParts = mimeType.split("/"); + if (mimeTypeAgainstFilter(mimeTypeParts, filterParts)) { + return mimeType; + } + } + + return null; + } + + /** + * Matches multiple MIME types against an array of MIME type filters. + * @return The list of matching MIME types, or empty array if nothing matches. + */ + @NonNull + public static String[] matchesMany( + @Nullable String[] mimeTypes, @NonNull String filter) { + if (mimeTypes == null) { + return new String[] {}; + } + + final ArrayList list = new ArrayList<>(); + final String[] filterParts = filter.split("/"); + for (String mimeType : mimeTypes) { + final String[] mimeTypeParts = mimeType.split("/"); + if (mimeTypeAgainstFilter(mimeTypeParts, filterParts)) { + list.add(mimeType); + } + } + + return list.toArray(new String[list.size()]); + } +} diff --git a/core/java/android/content/SharedPreferences.java b/core/java/android/content/SharedPreferences.java index d3652e8825b5f00d718e662d25333d95bf06ab1e..877dfee138daaf63e57a8f897007a21558e53547 100644 --- a/core/java/android/content/SharedPreferences.java +++ b/core/java/android/content/SharedPreferences.java @@ -57,6 +57,9 @@ public interface SharedPreferences { * *

This callback will be run on your main thread. * + *

Note: This callback will not be triggered when preferences are cleared via + * {@link Editor#clear()}. + * * @param sharedPreferences The {@link SharedPreferences} that received * the change. * @param key The key of the preference that was changed, added, or diff --git a/core/java/android/content/pm/AndroidHidlUpdater.java b/core/java/android/content/pm/AndroidHidlUpdater.java index 69cc94ffef55738367f73a4b0b3b09bf31a9e56a..b7ae8f4a129101b6e8012c257e575f0bca128866 100644 --- a/core/java/android/content/pm/AndroidHidlUpdater.java +++ b/core/java/android/content/pm/AndroidHidlUpdater.java @@ -38,6 +38,9 @@ public class AndroidHidlUpdater extends PackageSharedLibraryUpdater { if (pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.P) { prefixRequiredLibrary(pkg, ANDROID_HIDL_BASE); prefixRequiredLibrary(pkg, ANDROID_HIDL_MANAGER); + } else { + removeLibrary(pkg, ANDROID_HIDL_BASE); + removeLibrary(pkg, ANDROID_HIDL_MANAGER); } } } diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 657a8ea48c014d55adb87b94410b61999c29e066..31e4bcae03ce2b12562ffdf8758b96d1cf802e5b 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -27,7 +27,6 @@ import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Environment; import android.os.SystemProperties; import android.util.DisplayMetrics; @@ -637,6 +636,13 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public static final int PRIVATE_FLAG_USES_NON_SDK_API = 1 << 22; + /** + * Indicates whether this application can be profiled by the shell user, + * even when running on a device that is running in user mode. + * @hide + */ + public static final int PRIVATE_FLAG_PROFILEABLE_BY_SHELL = 1 << 23; + /** @hide */ @IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = { PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE, @@ -656,6 +662,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { PRIVATE_FLAG_PRIVILEGED, PRIVATE_FLAG_PRODUCT, PRIVATE_FLAG_PRODUCT_SERVICES, + PRIVATE_FLAG_PROFILEABLE_BY_SHELL, PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER, PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY, PRIVATE_FLAG_STATIC_SHARED_LIBRARY, @@ -1178,11 +1185,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * system apps. * @hide */ - public static final int HIDDEN_API_ENFORCEMENT_NONE = 0; + public static final int HIDDEN_API_ENFORCEMENT_DISABLED = 0; /** * No API enforcement, but enable the detection logic and warnings. Observed behaviour is the - * same as {@link #HIDDEN_API_ENFORCEMENT_NONE} but you may see warnings in the log when APIs - * are accessed. + * same as {@link #HIDDEN_API_ENFORCEMENT_DISABLED} but you may see warnings in the log when + * APIs are accessed. * @hide * */ public static final int HIDDEN_API_ENFORCEMENT_JUST_WARN = 1; @@ -1190,14 +1197,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * Dark grey list enforcement. Enforces the dark grey and black lists * @hide */ - public static final int HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK = 2; - /** - * Blacklist enforcement only. - * @hide - */ - public static final int HIDDEN_API_ENFORCEMENT_BLACK = 3; + public static final int HIDDEN_API_ENFORCEMENT_ENABLED = 2; - private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_BLACK; + private static final int HIDDEN_API_ENFORCEMENT_MIN = HIDDEN_API_ENFORCEMENT_DEFAULT; + private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_ENABLED; /** * Values in this IntDef MUST be kept in sync with enum hiddenapi::EnforcementPolicy in @@ -1206,17 +1209,16 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ @IntDef(prefix = { "HIDDEN_API_ENFORCEMENT_" }, value = { HIDDEN_API_ENFORCEMENT_DEFAULT, - HIDDEN_API_ENFORCEMENT_NONE, + HIDDEN_API_ENFORCEMENT_DISABLED, HIDDEN_API_ENFORCEMENT_JUST_WARN, - HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK, - HIDDEN_API_ENFORCEMENT_BLACK, + HIDDEN_API_ENFORCEMENT_ENABLED, }) @Retention(RetentionPolicy.SOURCE) public @interface HiddenApiEnforcementPolicy {} /** @hide */ public static boolean isValidHiddenApiEnforcementPolicy(int policy) { - return policy >= HIDDEN_API_ENFORCEMENT_DEFAULT && policy <= HIDDEN_API_ENFORCEMENT_MAX; + return policy >= HIDDEN_API_ENFORCEMENT_MIN && policy <= HIDDEN_API_ENFORCEMENT_MAX; } private int mHiddenApiPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT; @@ -1762,16 +1764,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public @HiddenApiEnforcementPolicy int getHiddenApiEnforcementPolicy() { if (isAllowedToUseHiddenApis()) { - return HIDDEN_API_ENFORCEMENT_NONE; + return HIDDEN_API_ENFORCEMENT_DISABLED; } if (mHiddenApiPolicy != HIDDEN_API_ENFORCEMENT_DEFAULT) { return mHiddenApiPolicy; } - if (targetSdkVersion < Build.VERSION_CODES.P) { - return HIDDEN_API_ENFORCEMENT_BLACK; - } else { - return HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK; - } + return HIDDEN_API_ENFORCEMENT_ENABLED; } /** @@ -1790,23 +1788,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * This will have no effect if this app is not subject to hidden API enforcement, i.e. if it * is on the package whitelist. * - * @param policyPreP configured policy for pre-P apps, or {@link - * #HIDDEN_API_ENFORCEMENT_DEFAULT} if nothing configured. - * @param policyP configured policy for apps targeting P or later, or {@link - * #HIDDEN_API_ENFORCEMENT_DEFAULT} if nothing configured. + * @param policy configured policy for this app, or {@link #HIDDEN_API_ENFORCEMENT_DEFAULT} + * if nothing configured. * @hide */ - public void maybeUpdateHiddenApiEnforcementPolicy( - @HiddenApiEnforcementPolicy int policyPreP, @HiddenApiEnforcementPolicy int policyP) { + public void maybeUpdateHiddenApiEnforcementPolicy(@HiddenApiEnforcementPolicy int policy) { if (isPackageWhitelistedForHiddenApis()) { return; } - if (targetSdkVersion < Build.VERSION_CODES.P) { - setHiddenApiEnforcementPolicy(policyPreP); - } else if (targetSdkVersion >= Build.VERSION_CODES.P) { - setHiddenApiEnforcementPolicy(policyP); - } - + setHiddenApiEnforcementPolicy(policy); } /** @@ -1949,6 +1939,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (privateFlags & PRIVATE_FLAG_VIRTUAL_PRELOAD) != 0; } + /** + * Returns whether or not this application can be profiled by the shell user, + * even when running on a device that is running in user mode. + */ + public boolean isProfileableByShell() { + return (privateFlags & PRIVATE_FLAG_PROFILEABLE_BY_SHELL) != 0; + } + /** * Returns true if the app has declared in its manifest that it wants its split APKs to be * loaded into isolated Contexts, with their own ClassLoaders and Resources objects. diff --git a/core/java/android/content/pm/IPackageInstallerSession.aidl b/core/java/android/content/pm/IPackageInstallerSession.aidl index 8fddb99b35a8184a8b0fe1663cabc721afc939a4..cef21f607e5f2cdf68a957c6021488f8e7797b03 100644 --- a/core/java/android/content/pm/IPackageInstallerSession.aidl +++ b/core/java/android/content/pm/IPackageInstallerSession.aidl @@ -38,4 +38,9 @@ interface IPackageInstallerSession { void commit(in IntentSender statusReceiver, boolean forTransferred); void transfer(in String packageName); void abandon(); + boolean isMultiPackage(); + int[] getChildSessionIds(); + void addChildSessionId(in int sessionId); + void removeChildSessionId(in int sessionId); + int getParentSessionId(); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 4a4de5160e807be196a0073e1b9f903e54c812a9..d0eff2e0fda966a255002c69163a7c75efb9a2e4 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -276,6 +276,8 @@ interface IPackageManager { in PersistableBundle appExtras, in PersistableBundle launcherExtras, in SuspendDialogInfo dialogInfo, String callingPackage, int userId); + boolean canSuspendPackageForUser(String packageName, int userId); + boolean isPackageSuspendedForUser(String packageName, int userId); PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); @@ -475,7 +477,7 @@ interface IPackageManager { * @param classPaths the class paths corresponding to the class loaders names from * {@param classLoadersNames}. The the first element corresponds to the first class loader * and so on. A classpath is represented as a list of dex files separated by - * {@code File.pathSeparator}. + * {@code File.pathSeparator}, or null if the class loader's classpath is not known. * The dex files found in the first class path will be recorded in the usage file. * @param loaderIsa the ISA of the loader process */ diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index e9cfa78deba690e819d5e6867c5491409ef7418a..8f901996db404daea6e4ed345c063d09122386fe 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -365,12 +365,14 @@ public class PackageInstaller { */ public @NonNull Session openSession(int sessionId) throws IOException { try { - return new Session(mInstaller.openSession(sessionId)); + try { + return new Session(mInstaller.openSession(sessionId)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } catch (RuntimeException e) { ExceptionUtils.maybeUnwrapIOException(e); throw e; - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); } } @@ -769,9 +771,18 @@ public class PackageInstaller { * If an APK included in this session is already defined by the existing * installation (for example, the same split name), the APK in this session * will replace the existing APK. + *

+ * In such a case that multiple packages need to be commited simultaneously, + * multiple sessions can be referenced by a single multi-package session. + * This session is created with no package name and calling + * {@link SessionParams#setMultiPackage()} with {@code true}. The + * individual session IDs can be added with {@link #addChildSessionId(int)} + * and commit of the multi-package session will result in all child sessions + * being committed atomically. */ public static class Session implements Closeable { - private IPackageInstallerSession mSession; + /** {@hide} */ + protected final IPackageInstallerSession mSession; /** {@hide} */ public Session(IPackageInstallerSession session) { @@ -1080,6 +1091,71 @@ public class PackageInstaller { throw e.rethrowFromSystemServer(); } } + + /** + * @return {@code true} if this session will commit more than one package when it is + * committed. + */ + public boolean isMultiPackage() { + try { + return mSession.isMultiPackage(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * @return the session ID of the multi-package session that this belongs to or + * {@link SessionInfo#INVALID_ID} if it does not belong to a multi-package session. + */ + public int getParentSessionId() { + try { + return mSession.getParentSessionId(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * @return the set of session IDs that will be committed atomically when this session is + * committed if this is a multi-package session or null if none exist. + */ + @NonNull + public int[] getChildSessionIds() { + try { + return mSession.getChildSessionIds(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Adds a session ID to the set of sessions that will be committed atomically + * when this session is committed. + * + * @param sessionId the session ID to add to this multi-package session. + */ + public void addChildSessionId(int sessionId) { + try { + mSession.addChildSessionId(sessionId); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Removes a session ID from the set of sessions that will be committed + * atomically when this session is committed. + * + * @param sessionId the session ID to remove from this multi-package session. + */ + public void removeChildSessionId(int sessionId) { + try { + mSession.removeChildSessionId(sessionId); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } /** @@ -1149,6 +1225,8 @@ public class PackageInstaller { public String[] grantedRuntimePermissions; /** {@hide} */ public String installerPackageName; + /** {@hide} */ + public boolean isMultiPackage; /** * Construct parameters for a new package install session. @@ -1178,6 +1256,7 @@ public class PackageInstaller { volumeUuid = source.readString(); grantedRuntimePermissions = source.readStringArray(); installerPackageName = source.readString(); + isMultiPackage = source.readBoolean(); } /** @@ -1392,6 +1471,18 @@ public class PackageInstaller { this.installerPackageName = installerPackageName; } + /** + * Set this session to be the parent of a multi-package install. + * + * A multi-package install session contains no APKs and only references other install + * sessions via ID. When a multi-package session is committed, all of its children + * are committed to the system in an atomic manner. If any children fail to install, + * all of them do, including the multi-package session. + */ + public void setMultiPackage() { + this.isMultiPackage = true; + } + /** {@hide} */ public void dump(IndentingPrintWriter pw) { pw.printPair("mode", mode); @@ -1408,6 +1499,7 @@ public class PackageInstaller { pw.printPair("volumeUuid", volumeUuid); pw.printPair("grantedRuntimePermissions", grantedRuntimePermissions); pw.printPair("installerPackageName", installerPackageName); + pw.printPair("isMultiPackage", isMultiPackage); pw.println(); } @@ -1433,6 +1525,7 @@ public class PackageInstaller { dest.writeString(volumeUuid); dest.writeStringArray(grantedRuntimePermissions); dest.writeString(installerPackageName); + dest.writeBoolean(isMultiPackage); } public static final Parcelable.Creator @@ -1454,6 +1547,12 @@ public class PackageInstaller { */ public static class SessionInfo implements Parcelable { + /** + * A session ID that does not exist or is invalid. + */ + public static final int INVALID_ID = -1; + /** {@hide} */ + private static final int[] NO_SESSIONS = {}; /** {@hide} */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public int sessionId; @@ -1503,6 +1602,12 @@ public class PackageInstaller { public String[] grantedRuntimePermissions; /** {@hide} */ public int installFlags; + /** {@hide} */ + public boolean isMultiPackage; + /** {@hide} */ + public int parentSessionId = INVALID_ID; + /** {@hide} */ + public int[] childSessionIds = NO_SESSIONS; /** {@hide} */ @UnsupportedAppUsage @@ -1531,6 +1636,12 @@ public class PackageInstaller { referrerUri = source.readParcelable(null); grantedRuntimePermissions = source.readStringArray(); installFlags = source.readInt(); + isMultiPackage = source.readBoolean(); + parentSessionId = source.readInt(); + childSessionIds = source.createIntArray(); + if (childSessionIds == null) { + childSessionIds = NO_SESSIONS; + } } /** @@ -1784,6 +1895,30 @@ public class PackageInstaller { return createDetailsIntent(); } + /** + * Returns true if this session is a multi-package session containing references to other + * sessions. + */ + public boolean isMultiPackage() { + return isMultiPackage; + } + + /** + * Returns the parent multi-package session ID if this session belongs to one, + * {@link #INVALID_ID} otherwise. + */ + public int getParentSessionId() { + return parentSessionId; + } + + /** + * Returns the set of session IDs that will be committed when this session is commited if + * this session is a multi-package session. + */ + public int[] getChildSessionIds() { + return childSessionIds; + } + @Override public int describeContents() { return 0; @@ -1811,6 +1946,9 @@ public class PackageInstaller { dest.writeParcelable(referrerUri, flags); dest.writeStringArray(grantedRuntimePermissions); dest.writeInt(installFlags); + dest.writeBoolean(isMultiPackage); + dest.writeInt(parentSessionId); + dest.writeIntArray(childSessionIds); } public static final Parcelable.Creator diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index dfb8128e37ee7ded399c1a3e4e7062776ee0ad16..e14b17e5cdd3268e21ef65253ecc62fb4c87651a 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -855,6 +855,14 @@ public abstract class PackageManager { */ public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000; + /** + * Flag parameter for {@link #installPackage} to indicate that this package + * is an APEX package + * + * @hide + */ + public static final int INSTALL_APEX = 0x00020000; + /** @hide */ @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { DONT_KILL_APP @@ -906,6 +914,11 @@ public abstract class PackageManager { */ public static final int INSTALL_REASON_USER = 4; + /** + * @hide + */ + public static final int INSTALL_UNKNOWN = 0; + /** * Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS} * on success. @@ -2934,6 +2947,15 @@ public abstract class PackageManager { @SystemApi public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6; + /** + * Permission flag: The permission has not been explicitly requested by + * the app but has been added automatically by the system. Revoke once + * the app does explicitly request it. + * + * @hide + */ + public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 1 << 7; + /** * Mask for all permission flags. * @@ -3585,7 +3607,10 @@ public abstract class PackageManager { FLAG_PERMISSION_POLICY_FIXED, FLAG_PERMISSION_REVOKE_ON_UPGRADE, FLAG_PERMISSION_SYSTEM_FIXED, - FLAG_PERMISSION_GRANTED_BY_DEFAULT + FLAG_PERMISSION_GRANTED_BY_DEFAULT, + /* + FLAG_PERMISSION_REVOKE_WHEN_REQUESED + */ }) @Retention(RetentionPolicy.SOURCE) public @interface PermissionFlags {} @@ -5438,6 +5463,28 @@ public abstract class PackageManager { public abstract void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); + /** + * Replaces an existing preferred activity mapping to the system, and if that were not present + * adds a new preferred activity. This will be used to automatically select the given activity + * component when {@link Context#startActivity(Intent) Context.startActivity()} finds multiple + * matching activities and also matches the given filter. + * + * @param filter The set of intents under which this activity will be made preferred. + * @param match The IntentFilter match category that this preference applies to. Should be a + * combination of {@link IntentFilter#MATCH_CATEGORY_MASK} and + * {@link IntentFilter#MATCH_ADJUSTMENT_MASK}). + * @param set The set of activities that the user was picking from when this preference was + * made. + * @param activity The component name of the activity that is to be preferred. + * + * @hide + */ + @SystemApi + public void replacePreferredActivity(@NonNull IntentFilter filter, int match, + @NonNull List set, @NonNull ComponentName activity) { + replacePreferredActivity(filter, match, set.toArray(new ComponentName[0]), activity); + } + /** * @hide */ @@ -5749,6 +5796,30 @@ public abstract class PackageManager { throw new UnsupportedOperationException("setPackagesSuspended not implemented"); } + /** + * Returns whether or not a given package can be suspended via a call to {@link + * #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, + * SuspendDialogInfo) setPackagesSuspended}. The platform prevents suspending certain critical + * packages to keep the device in a functioning state, e.g. the default dialer. + * Apps need to hold {@link Manifest.permission#SUSPEND_APPS SUSPEND_APPS} to call this api. + * + *

+ * Note that this set of critical packages can change with time, so a value of {@code true} + * returned by this api does not guarantee that a following call to {@link + * #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, + * SuspendDialogInfo) setPackagesSuspended} for the same package will succeed, especially + * if considerable time elapsed between the two calls. + * + * @param packageName The package to check. + * @return {@code true} if the given package can be suspended, {@code false} otherwise. + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.SUSPEND_APPS) + public boolean canSuspendPackage(@NonNull String packageName) { + throw new UnsupportedOperationException("canSuspendPackage not implemented"); + } + /** * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * @param packageName The name of the package to get the suspended status of. @@ -5778,16 +5849,16 @@ public abstract class PackageManager { * {@code android.permission.SUSPEND_APPS} can put any app on the device into a suspended state. * *

While in this state, the application's notifications will be hidden, any of its started - * activities will be stopped and it will not be able to show toasts or dialogs or ring the - * device. When the user tries to launch a suspended app, the system will, instead, show a + * activities will be stopped and it will not be able to show toasts or dialogs or play audio. + * When the user tries to launch a suspended app, the system will, instead, show a * dialog to the user informing them that they cannot use this app while it is suspended. * *

When an app is put into this state, the broadcast action * {@link Intent#ACTION_MY_PACKAGE_SUSPENDED} will be delivered to any of its broadcast * receivers that included this action in their intent-filters, including manifest * receivers. Similarly, a broadcast action {@link Intent#ACTION_MY_PACKAGE_UNSUSPENDED} - * is delivered when a previously suspended app is taken out of this state. - *

+ * is delivered when a previously suspended app is taken out of this state. Apps are expected to + * use these to gracefully deal with transitions to and from this state. * * @return {@code true} if the calling package has been suspended, {@code false} otherwise. * @@ -6103,6 +6174,7 @@ public abstract class PackageManager { case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE"; case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED"; case FLAG_PERMISSION_REVIEW_REQUIRED: return "REVIEW_REQUIRED"; + case FLAG_PERMISSION_REVOKE_WHEN_REQUESTED: return "REVOKE_WHEN_REQUESTED"; default: return Integer.toString(flag); } } diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 4f58321da2f43cb40afdd48d63e5d97bb0d5d664..6f49cc42f6f65bc2fb63a3275c802cd2585df84d 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -702,6 +702,18 @@ public abstract class PackageManagerInternal { */ public abstract SparseArray getAppsWithSharedUserIds(); + /** + * Get the value of attribute android:sharedUserId for the given packageName if specified, + * otherwise {@code null}. + */ + public abstract String getSharedUserIdForPackage(@NonNull String packageName); + + /** + * Get all packages which specified the given sharedUserId as android:sharedUserId attribute + * or an empty array if no package specified it. + */ + public abstract String[] getPackagesForSharedUserId(@NonNull String sharedUserId, int userId); + /** * Return if device is currently in a "core" boot environment, typically * used to support full-disk encryption. Only apps marked with diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 046e9e7108fdc7baf3f9f39991a49545081d98ef..7ef526453e9aacd4d7147706840c6a995f54f9fa 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -228,6 +228,24 @@ public class PackageParser { CHILD_PACKAGE_TAGS.add(TAG_EAT_COMMENT); } + // STOPSHIP(b/112545973): remove once feature enabled by default + private static final Set FORCE_AUDIO_PACKAGES; + private static final Set FORCE_VIDEO_PACKAGES; + private static final Set FORCE_IMAGES_PACKAGES; + static { + FORCE_AUDIO_PACKAGES = parsePackageList( + SystemProperties.get(StorageManager.PROP_FORCE_AUDIO)); + FORCE_VIDEO_PACKAGES = parsePackageList( + SystemProperties.get(StorageManager.PROP_FORCE_VIDEO)); + FORCE_IMAGES_PACKAGES = parsePackageList( + SystemProperties.get(StorageManager.PROP_FORCE_IMAGES)); + } + + private static Set parsePackageList(String pkgs) { + if (TextUtils.isEmpty(pkgs)) return Collections.emptySet(); + return new ArraySet(Arrays.asList(pkgs.split(","))); + } + private static final boolean LOG_UNSAFE_BROADCASTS = false; /** @@ -2417,7 +2435,7 @@ public class PackageParser { } final int NP = PackageParser.NEW_PERMISSIONS.length; - StringBuilder implicitPerms = null; + StringBuilder newPermsMsg = null; for (int ip=0; ip