Merge "Add disconnect cause when outgoing call fails due to ongoing OTASP prov."
diff --git a/Android.bp b/Android.bp
index 8678161..48391fc 100644
--- a/Android.bp
+++ b/Android.bp
@@ -223,8 +223,7 @@
"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",
@@ -237,8 +236,7 @@
"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",
@@ -707,6 +705,22 @@
}
+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"],
@@ -913,12 +927,14 @@
"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
@@ -1528,6 +1544,10 @@
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/api/current.txt b/api/current.txt
index f0ab5f7..f1700f2 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -36378,6 +36378,7 @@
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;
@@ -41122,6 +41123,7 @@
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
}
@@ -41748,6 +41750,7 @@
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);
@@ -41756,12 +41759,14 @@
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";
@@ -41778,9 +41783,11 @@
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";
@@ -42083,6 +42090,7 @@
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";
@@ -42551,6 +42559,7 @@
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 {
diff --git a/api/system-current.txt b/api/system-current.txt
index 9b1400c..b8de99c 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5293,6 +5293,7 @@
method public int getRadioPowerState();
method public int getSimApplicationState();
method public int getSimCardState();
+ method public int getSupportedRadioAccessFamily();
method public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
method public android.telephony.UiccSlotInfo[] getUiccSlotsInfo();
method public android.os.Bundle getVisualVoicemailSettings();
@@ -5307,6 +5308,8 @@
method public boolean isVideoCallingEnabled();
method public deprecated boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle);
method public boolean needsOtaServiceProvisioning();
+ method public boolean rebootRadio();
+ method public boolean resetRadioConfig();
method public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
method public void setCarrierDataEnabled(boolean);
method public void setDataActivationState(int);
@@ -5358,6 +5361,24 @@
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
@@ -5671,6 +5692,7 @@
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);
diff --git a/api/test-current.txt b/api/test-current.txt
index 890482e..c09ff98 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -988,6 +988,7 @@
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
diff --git a/cmds/incident/Android.bp b/cmds/incident/Android.bp
new file mode 100644
index 0000000..2a5ec5b
--- /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 8615f9b..0000000
--- 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 0000000..1e970f4
--- /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 eba5586..0000000
--- a/cmds/incidentd/Android.mk
+++ /dev/null
@@ -1,156 +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
-
-# Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed.
-LOCAL_CFLAGS += -Wno-error=implicit-fallthrough
-
-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
-
-# Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed.
-LOCAL_CFLAGS += -Wno-error=implicit-fallthrough
-
-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/statsd/Android.bp b/cmds/statsd/Android.bp
index f1bf10c..5c3d17e 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,261 @@
}
+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/StatsPuller.cpp",
+ "src/external/StatsCompanionServicePuller.cpp",
+ "src/external/SubsystemSleepStatePuller.cpp",
+ "src/external/ResourceHealthManagerPuller.cpp",
+ "src/external/ResourceThermalManagerPuller.cpp",
+ "src/external/StatsPullerManagerImpl.cpp",
+ "src/external/puller_util.cpp",
+ "src/logd/LogEvent.cpp",
+ "src/logd/LogListener.cpp",
+ "src/logd/LogReader.cpp",
+ "src/matchers/CombinationLogMatchingTracker.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/perfetto/perfetto_config.proto",
+ "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",
+ ],
+
+ local_include_dirs: [
+ "src",
+ ],
+
+ static_libs: [
+ "libhealthhalutils",
+ "libplatformprotos",
+ ],
+
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "libincident",
+ "liblog",
+ "libutils",
+ "libservices",
+ "libprotoutil",
+ "libstatslog",
+ "libhardware",
+ "libhardware_legacy",
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "android.hardware.health@2.0",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.1",
+ "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 and allow very verbose printing on eng builds
+ cflags: ["-DVERY_VERBOSE_PRINTING"],
+ sanitize: {
+ address: true,
+ },
+ },
+ },
+
+ proto: {
+ type: "lite",
+ },
+
+ shared_libs: ["libgtest_prod"],
+
+ 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",
+ "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/LogReader_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/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",
+ ],
+
+ static_libs: ["libgmock"],
+
+ 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"
+ ],
+
+ 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 3dc81fa..0000000
--- a/cmds/statsd/Android.mk
+++ /dev/null
@@ -1,306 +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/StatsPuller.cpp \
- src/external/StatsCompanionServicePuller.cpp \
- src/external/SubsystemSleepStatePuller.cpp \
- src/external/ResourceHealthManagerPuller.cpp \
- src/external/ResourceThermalManagerPuller.cpp \
- src/external/StatsPullerManagerImpl.cpp \
- src/external/puller_util.cpp \
- src/logd/LogEvent.cpp \
- src/logd/LogListener.cpp \
- src/logd/LogReader.cpp \
- src/matchers/CombinationLogMatchingTracker.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/perfetto/perfetto_config.proto \
- 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
-
-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 \
- libplatformprotos \
-
-statsd_common_shared_libraries := \
- libbase \
- libbinder \
- libincident \
- liblog \
- libutils \
- libservices \
- libprotoutil \
- libstatslog \
- libhardware \
- libhardware_legacy \
- libhidlbase \
- libhidltransport \
- libhwbinder \
- 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 and allow very verbose printing on eng builds
-ifeq ($(TARGET_BUILD_VARIANT),eng)
- LOCAL_CLANG := true
- LOCAL_SANITIZE := address
- 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 \
- 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/LogReader_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/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
-
-LOCAL_STATIC_LIBRARIES := \
- $(statsd_common_static_libraries) \
- libgmock
-
-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)
-
-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/tools/Android.mk b/cmds/statsd/tools/Android.mk
deleted file mode 100644
index 7253c96..0000000
--- a/cmds/statsd/tools/Android.mk
+++ /dev/null
@@ -1,20 +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)
-include $(CLEAR_VARS)
-#Include the sub-makefiles
-include $(call all-makefiles-under,$(LOCAL_PATH))
\ No newline at end of file
diff --git a/cmds/statsd/tools/dogfood/Android.bp b/cmds/statsd/tools/dogfood/Android.bp
new file mode 100644
index 0000000..bb494a6
--- /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/dogfood/Android.mk b/cmds/statsd/tools/dogfood/Android.mk
deleted file mode 100644
index baf235b..0000000
--- a/cmds/statsd/tools/dogfood/Android.mk
+++ /dev/null
@@ -1,33 +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)
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := StatsdDogfood
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_STATIC_JAVA_LIBRARIES := platformprotoslite \
- statsdprotolite
-
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_DEX_PREOPT := false
-LOCAL_CERTIFICATE := platform
-LOCAL_PROGUARD_ENABLED := disabled
-
-include $(BUILD_PACKAGE)
diff --git a/cmds/statsd/tools/loadtest/Android.bp b/cmds/statsd/tools/loadtest/Android.bp
new file mode 100644
index 0000000..bf87fc5
--- /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/loadtest/Android.mk b/cmds/statsd/tools/loadtest/Android.mk
deleted file mode 100644
index 219cd95..0000000
--- a/cmds/statsd/tools/loadtest/Android.mk
+++ /dev/null
@@ -1,33 +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)
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := StatsdLoadtest
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_STATIC_JAVA_LIBRARIES := platformprotoslite \
- statsdprotolite
-
-LOCAL_CERTIFICATE := platform
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_DEX_PREOPT := false
-LOCAL_PROGUARD_ENABLED := disabled
-
-include $(BUILD_PACKAGE)
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 456b23b..b5fdf76 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -2355,347 +2355,6 @@
Lcom/google/android/mms/util/PduCache;->purgeAll()V
Lcom/google/android/mms/util/PduCacheEntry;->getPdu()Lcom/google/android/mms/pdu/GenericPdu;
Lcom/google/android/mms/util/SqliteWrapper;->insert(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
-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;-><init>()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/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;-><init>(Ljava/lang/Class;I)V
-Ljava/lang/Long;->value:J
-Ljava/lang/Object;->identityHashCode(Ljava/lang/Object;)I
-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;-><init>(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;-><init>()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;-><init>(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;-><init>()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;-><init>(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;-><init>()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;-><init>()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;-><init>()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;-><init>()V
-Ljava/net/Proxy;-><init>()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;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
-Ljava/net/SocketImpl;->serverSocket:Ljava/net/ServerSocket;
-Ljava/net/SocketImpl;->socket:Ljava/net/Socket;
-Ljava/net/SocksSocketImpl;-><init>()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;-><init>(JI)V
-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;-><init>(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;-><init>()V
-Ljava/util/Collections$EmptyMap;-><init>()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;-><init>(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;
Lorg/ccil/cowan/tagsoup/AttributesImpl;->data:[Ljava/lang/String;
Lorg/ccil/cowan/tagsoup/AttributesImpl;->length:I
Lorg/ccil/cowan/tagsoup/ElementType;->theAtts:Lorg/ccil/cowan/tagsoup/AttributesImpl;
@@ -2714,84 +2373,3 @@
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;
-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
diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt
index 930850f..05a19e1 100644
--- a/config/hiddenapi-vendor-list.txt
+++ b/config/hiddenapi-vendor-list.txt
@@ -247,7 +247,3 @@
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/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 32e1cae..31b5e0a 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -131,8 +131,6 @@
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;
@@ -7235,31 +7233,6 @@
}
}
- // 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);
}
diff --git a/core/java/android/net/INetdEventCallback.aidl b/core/java/android/net/INetdEventCallback.aidl
index 1e75bf4..4b1a08d 100644
--- a/core/java/android/net/INetdEventCallback.aidl
+++ b/core/java/android/net/INetdEventCallback.aidl
@@ -28,6 +28,11 @@
* Reports a single DNS lookup function call.
* This method must not block or perform long-running operations.
*
+ * @param netId the ID of the network the lookup was performed on.
+ * @param eventType one of the EVENT_* constants in {@link INetdEventListener}.
+ * @param returnCode the return value of the query, may vary based on {@code eventType}. See
+ * {@code getaddrinfo()}, {@code gethostbyaddr()} and {@code gethostbyname()} section in
+ * bionic/libc/include/netdb.h.
* @param hostname the name that was looked up.
* @param ipAddresses (possibly a subset of) the IP addresses returned.
* At most {@link #DNS_REPORTED_IP_ADDRESSES_LIMIT} addresses are logged.
@@ -36,8 +41,8 @@
* @param timestamp the timestamp at which the query was reported by netd.
* @param uid the UID of the application that performed the query.
*/
- void onDnsEvent(String hostname, in String[] ipAddresses, int ipAddressesCount, long timestamp,
- int uid);
+ void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
+ in String[] ipAddresses, int ipAddressesCount, long timestamp, int uid);
/**
* Represents a private DNS validation success or failure.
diff --git a/core/java/android/net/InterfaceConfiguration.java b/core/java/android/net/InterfaceConfiguration.java
index b274155..62cf7d7 100644
--- a/core/java/android/net/InterfaceConfiguration.java
+++ b/core/java/android/net/InterfaceConfiguration.java
@@ -19,9 +19,11 @@
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import com.google.android.collect.Sets;
+import java.net.InetAddress;
import java.util.HashSet;
/**
@@ -34,8 +36,10 @@
private LinkAddress mAddr;
private HashSet<String> mFlags = Sets.newHashSet();
- private static final String FLAG_UP = "up";
- private static final String FLAG_DOWN = "down";
+ private static final String FLAG_UP = INetd.IF_STATE_UP;
+ private static final String FLAG_DOWN = INetd.IF_STATE_DOWN;
+
+ private static final String[] EMPTY_STRING_ARRAY = new String[0];
@Override
public String toString() {
@@ -112,6 +116,40 @@
}
/**
+ * Construct InterfaceConfiguration from InterfaceConfigurationParcel.
+ */
+ public static InterfaceConfiguration fromParcel(InterfaceConfigurationParcel p) {
+ InterfaceConfiguration cfg = new InterfaceConfiguration();
+ cfg.setHardwareAddress(p.hwAddr);
+
+ final InetAddress addr = NetworkUtils.numericToInetAddress(p.ipv4Addr);
+ cfg.setLinkAddress(new LinkAddress(addr, p.prefixLength));
+ for (String flag : p.flags) {
+ cfg.setFlag(flag);
+ }
+
+ return cfg;
+ }
+
+ /**
+ * Convert InterfaceConfiguration to InterfaceConfigurationParcel with given ifname.
+ */
+ public InterfaceConfigurationParcel toParcel(String iface) {
+ InterfaceConfigurationParcel cfgParcel = new InterfaceConfigurationParcel();
+ cfgParcel.ifName = iface;
+ if (!TextUtils.isEmpty(mHwAddr)) {
+ cfgParcel.hwAddr = mHwAddr;
+ } else {
+ cfgParcel.hwAddr = "";
+ }
+ cfgParcel.ipv4Addr = mAddr.getAddress().getHostAddress();
+ cfgParcel.prefixLength = mAddr.getPrefixLength();
+ cfgParcel.flags = mFlags.toArray(EMPTY_STRING_ARRAY);
+
+ return cfgParcel;
+ }
+
+ /**
* This function determines if the interface is up and has a valid IP
* configuration (IP address has a non zero octet).
*
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index e270fc2..5447f59 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -811,14 +811,19 @@
* packet needs to be subtracted from the root UID on the base interface both for tx
* and rx traffic (http://b/12249687, http:/b/33681750).
*
+ * As for eBPF, the per uid stats is collected by different hook, the rx packets on base
+ * interface will not be counted. Thus, the adjustment on root uid is only needed in tx
+ * direction.
+ *
* <p>This method will behave fine if {@code stackedIfaces} is an non-synchronized but add-only
* {@code ConcurrentHashMap}
* @param baseTraffic Traffic on the base interfaces. Will be mutated.
* @param stackedTraffic Stats with traffic stacked on top of our ifaces. Will also be mutated.
* @param stackedIfaces Mapping ipv6if -> ipv4if interface where traffic is counted on both.
+ * @param useBpfStats True if eBPF is in use.
*/
public static void apply464xlatAdjustments(NetworkStats baseTraffic,
- NetworkStats stackedTraffic, Map<String, String> stackedIfaces) {
+ NetworkStats stackedTraffic, Map<String, String> stackedIfaces, boolean useBpfStats) {
// Total 464xlat traffic to subtract from uid 0 on all base interfaces.
// stackedIfaces may grow afterwards, but NetworkStats will just be resized automatically.
final NetworkStats adjustments = new NetworkStats(0, stackedIfaces.size());
@@ -837,15 +842,20 @@
continue;
}
// Subtract any 464lat traffic seen for the root UID on the current base interface.
+ // However, for eBPF, the per uid stats is collected by different hook, the rx packets
+ // on base interface will not be counted. Thus, the adjustment on root uid is only
+ // needed in tx direction.
adjust.iface = baseIface;
- adjust.rxBytes = -(entry.rxBytes + entry.rxPackets * IPV4V6_HEADER_DELTA);
+ if (!useBpfStats) {
+ adjust.rxBytes = -(entry.rxBytes + entry.rxPackets * IPV4V6_HEADER_DELTA);
+ adjust.rxPackets = -entry.rxPackets;
+ }
adjust.txBytes = -(entry.txBytes + entry.txPackets * IPV4V6_HEADER_DELTA);
- adjust.rxPackets = -entry.rxPackets;
adjust.txPackets = -entry.txPackets;
adjustments.combineValues(adjust);
- // For 464xlat traffic, xt_qtaguid only counts the bytes of the native IPv4 packet sent
- // on the stacked interface with prefix "v4-" and drops the IPv6 header size after
+ // For 464xlat traffic, per uid stats only counts the bytes of the native IPv4 packet
+ // sent on the stacked interface with prefix "v4-" and drops the IPv6 header size after
// unwrapping. To account correctly for on-the-wire traffic, add the 20 additional bytes
// difference for all packets (http://b/12249687, http:/b/33681750).
entry.rxBytes += entry.rxPackets * IPV4V6_HEADER_DELTA;
@@ -864,8 +874,8 @@
* base and stacked traffic.
* @param stackedIfaces Mapping ipv6if -> ipv4if interface where traffic is counted on both.
*/
- public void apply464xlatAdjustments(Map<String, String> stackedIfaces) {
- apply464xlatAdjustments(this, this, stackedIfaces);
+ public void apply464xlatAdjustments(Map<String, String> stackedIfaces, boolean useBpfStats) {
+ apply464xlatAdjustments(this, this, stackedIfaces, useBpfStats);
}
/**
diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java
index d102b19..942bf94 100644
--- a/core/java/android/os/storage/StorageManagerInternal.java
+++ b/core/java/android/os/storage/StorageManagerInternal.java
@@ -16,6 +16,8 @@
package android.os.storage;
+import android.os.IVold;
+
/**
* Mount service local interface.
*
@@ -79,4 +81,24 @@
* @return The mount mode.
*/
public abstract int getExternalStorageMountMode(int uid, String packageName);
+
+ /**
+ * A listener for reset events in the StorageManagerService.
+ */
+ public interface ResetListener {
+ /**
+ * A method that should be triggered internally by StorageManagerInternal
+ * when StorageManagerService reset happens.
+ *
+ * @param vold The binder object to vold.
+ */
+ void onReset(IVold vold);
+ }
+
+ /**
+ * Add a listener to listen to reset event in StorageManagerService.
+ *
+ * @param listener The listener that will be notified on reset events.
+ */
+ public abstract void addResetListener(ResetListener listener);
}
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 81b1921..c7d37ad 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -461,6 +461,41 @@
}
/**
+ * Return recently modified documents under the requested root. This will
+ * only be called for roots that advertise
+ * {@link Root#FLAG_SUPPORTS_RECENTS}. The returned documents should be
+ * sorted by {@link Document#COLUMN_LAST_MODIFIED} in descending order of
+ * the most recently modified documents.
+ * <p>
+ * If this method is overriden by the concrete DocumentsProvider and
+ * QUERY_ARGS_LIMIT is specified with a nonnegative int under queryArgs, the
+ * result will be limited by that number and QUERY_ARG_LIMIT will be
+ * specified under EXTRA_HONORED_ARGS. Otherwise, a default 64 limit will
+ * be used and no QUERY_ARG* will be specified under EXTRA_HONORED_ARGS.
+ * <p>
+ * Recent documents do not support change notifications.
+ *
+ * @param projection list of {@link Document} columns to put into the
+ * cursor. If {@code null} all supported columns should be
+ * included.
+ * @param queryArgs the extra query arguments.
+ * @param signal used by the caller to signal if the request should be
+ * cancelled. May be null.
+ * @see DocumentsContract#EXTRA_LOADING
+ */
+ @SuppressWarnings("unused")
+ public Cursor queryRecentDocuments(
+ String rootId, String[] projection, @Nullable Bundle queryArgs,
+ @Nullable CancellationSignal signal)
+ throws FileNotFoundException {
+ Cursor c = queryRecentDocuments(rootId, projection);
+ Bundle extras = new Bundle();
+ c.setExtras(extras);
+ extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[0]);
+ return c;
+ }
+
+ /**
* Return metadata for the single requested document. You should avoid
* making network requests to keep this request fast.
*
@@ -774,7 +809,7 @@
* Implementation is provided by the parent class. Cannot be overriden.
*
* @see #queryRoots(String[])
- * @see #queryRecentDocuments(String, String[])
+ * @see #queryRecentDocuments(String, String[], Bundle, CancellationSignal)
* @see #queryDocument(String, String[])
* @see #queryChildDocuments(String, String[], String)
* @see #querySearchDocuments(String, String, String[])
@@ -787,7 +822,8 @@
case MATCH_ROOTS:
return queryRoots(projection);
case MATCH_RECENT:
- return queryRecentDocuments(getRootId(uri), projection);
+ return queryRecentDocuments(
+ getRootId(uri), projection, queryArgs, cancellationSignal);
case MATCH_SEARCH:
return querySearchDocuments(
getRootId(uri), getSearchDocumentsQuery(uri), projection);
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 959534d..b77d881 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -48,7 +48,7 @@
DEFAULT_FLAGS.put("settings_audio_switcher", "true");
DEFAULT_FLAGS.put("settings_systemui_theme", "true");
DEFAULT_FLAGS.put(EMERGENCY_DIAL_SHORTCUTS, "false");
- DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "true");
+ DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false");
}
/**
diff --git a/core/java/com/android/internal/net/NetworkStatsFactory.java b/core/java/com/android/internal/net/NetworkStatsFactory.java
index d1c2799..0a7cff6 100644
--- a/core/java/com/android/internal/net/NetworkStatsFactory.java
+++ b/core/java/com/android/internal/net/NetworkStatsFactory.java
@@ -113,11 +113,12 @@
/**
* Applies 464xlat adjustments with ifaces noted with {@link #noteStackedIface(String, String)}.
- * @see NetworkStats#apply464xlatAdjustments(NetworkStats, NetworkStats, Map)
+ * @see NetworkStats#apply464xlatAdjustments(NetworkStats, NetworkStats, Map, boolean)
*/
public static void apply464xlatAdjustments(NetworkStats baseTraffic,
- NetworkStats stackedTraffic) {
- NetworkStats.apply464xlatAdjustments(baseTraffic, stackedTraffic, sStackedIfaces);
+ NetworkStats stackedTraffic, boolean useBpfStats) {
+ NetworkStats.apply464xlatAdjustments(baseTraffic, stackedTraffic, sStackedIfaces,
+ useBpfStats);
}
@VisibleForTesting
@@ -263,7 +264,7 @@
// No locking here: apply464xlatAdjustments behaves fine with an add-only ConcurrentHashMap.
// TODO: remove this and only apply adjustments in NetworkStatsService.
- stats.apply464xlatAdjustments(sStackedIfaces);
+ stats.apply464xlatAdjustments(sStackedIfaces, mUseBpfStats);
return stats;
}
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 4ee950a..8b3829b3 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -211,6 +211,11 @@
*/
native protected static void nativeUnmountStorageOnInit();
+ private static void callPostForkSystemServerHooks() {
+ // SystemServer specific post fork hooks run before child post fork hooks.
+ VM_HOOKS.postForkSystemServer();
+ }
+
private static void callPostForkChildHooks(int runtimeFlags, boolean isSystemServer,
boolean isZygote, String instructionSet) {
VM_HOOKS.postForkChild(runtimeFlags, isSystemServer, isZygote, instructionSet);
diff --git a/core/java/com/android/server/net/BaseNetdEventCallback.java b/core/java/com/android/server/net/BaseNetdEventCallback.java
index fdba2f3..97247aa 100644
--- a/core/java/com/android/server/net/BaseNetdEventCallback.java
+++ b/core/java/com/android/server/net/BaseNetdEventCallback.java
@@ -26,8 +26,8 @@
*/
public class BaseNetdEventCallback extends INetdEventCallback.Stub {
@Override
- public void onDnsEvent(String hostname, String[] ipAddresses,
- int ipAddressesCount, long timestamp, int uid) {
+ public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
+ String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
// default no-op
}
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index d1a7d70..ed59dd4 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -229,6 +229,7 @@
"libseccomp_policy",
"libgrallocusage",
"libscrypt_static",
+ "libstatssocket",
],
shared_libs: [
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 04918ba..5b90349 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -951,6 +951,7 @@
jintArray jFormats = NULL;
jobjectArray jGains = NULL;
jobject jHandle = NULL;
+ jobject jAudioPortConfig = NULL;
jstring jDeviceName = NULL;
bool useInMask;
size_t numPositionMasks = 0;
@@ -1129,7 +1130,6 @@
goto exit;
}
- jobject jAudioPortConfig;
jStatus = convertAudioPortConfigFromNative(env,
*jAudioPort,
&jAudioPortConfig,
@@ -1165,6 +1165,9 @@
if (jHandle != NULL) {
env->DeleteLocalRef(jHandle);
}
+ if (jAudioPortConfig != NULL) {
+ env->DeleteLocalRef(jAudioPortConfig);
+ }
return jStatus;
}
@@ -1235,12 +1238,15 @@
}
for (size_t i = 0; i < numPorts; i++) {
- jobject jAudioPort;
+ jobject jAudioPort = NULL;
jStatus = convertAudioPortFromNative(env, &jAudioPort, &nPorts[i]);
if (jStatus != AUDIO_JAVA_SUCCESS) {
goto exit;
}
env->CallBooleanMethod(jPorts, gArrayListMethods.add, jAudioPort);
+ if (jAudioPort != NULL) {
+ env->DeleteLocalRef(jAudioPort);
+ }
}
exit:
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 0022cf88..6f400c4 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -56,6 +56,7 @@
#include <utils/String8.h>
#include <selinux/android.h>
#include <seccomp_policy.h>
+#include <stats_event_list.h>
#include <processgroup/processgroup.h>
#include "core_jni_helpers.h"
@@ -81,6 +82,7 @@
static const char kZygoteClassName[] = "com/android/internal/os/Zygote";
static jclass gZygoteClass;
+static jmethodID gCallPostForkSystemServerHooks;
static jmethodID gCallPostForkChildHooks;
static bool g_is_security_enforced = true;
@@ -728,6 +730,18 @@
// Unset the SIGCHLD handler, but keep ignoring SIGHUP (rationale in SetSignalHandlers).
UnsetChldSignalHandler();
+ if (is_system_server) {
+ env->CallStaticVoidMethod(gZygoteClass, gCallPostForkSystemServerHooks);
+ if (env->ExceptionCheck()) {
+ fail_fn("Error calling post fork system server hooks.");
+ }
+ // TODO(oth): Remove hardcoded label here (b/117874058).
+ static const char* kSystemServerLabel = "u:r:system_server:s0";
+ if (selinux_android_setcon(kSystemServerLabel) != 0) {
+ fail_fn(CREATE_ERROR("selinux_android_setcon(%s)", kSystemServerLabel));
+ }
+ }
+
env->CallStaticVoidMethod(gZygoteClass, gCallPostForkChildHooks, runtime_flags,
is_system_server, is_child_zygote, instructionSet);
if (env->ExceptionCheck()) {
@@ -775,6 +789,7 @@
// Close any logging related FDs before we start evaluating the list of
// file descriptors.
__android_log_close();
+ stats_log_close();
std::string error_msg;
@@ -1020,6 +1035,9 @@
int register_com_android_internal_os_Zygote(JNIEnv* env) {
gZygoteClass = MakeGlobalRefOrDie(env, FindClassOrDie(env, kZygoteClassName));
+ gCallPostForkSystemServerHooks = GetStaticMethodIDOrDie(env, gZygoteClass,
+ "callPostForkSystemServerHooks",
+ "()V");
gCallPostForkChildHooks = GetStaticMethodIDOrDie(env, gZygoteClass, "callPostForkChildHooks",
"(IZZLjava/lang/String;)V");
diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
index c5904e0..d457a1b 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -37,6 +37,7 @@
"/dev/socket/zygote",
"/dev/socket/zygote_secondary",
"/dev/socket/webview_zygote",
+ "/dev/socket/heapprofd",
"/sys/kernel/debug/tracing/trace_marker",
"/system/framework/framework-res.apk",
"/dev/urandom",
diff --git a/core/proto/OWNERS b/core/proto/OWNERS
index 30a9a01..2ace1ac 100644
--- a/core/proto/OWNERS
+++ b/core/proto/OWNERS
@@ -9,7 +9,11 @@
singhtejinder@google.com
yanglu@google.com
yaochen@google.com
+yro@google.com
# Frameworks
ogunwale@google.com
jjaggi@google.com
+
+# Launcher
+hyunyoungs@google.com
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index e4ef6af..93cb57d 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -485,6 +485,7 @@
<protected-broadcast android:name="android.telephony.action.CARRIER_CONFIG_CHANGED" />
<protected-broadcast android:name="android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED" />
<protected-broadcast android:name="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED" />
+ <protected-broadcast android:name="android.telephony.action.SECRET_CODE" />
<protected-broadcast android:name="android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION" />
<protected-broadcast android:name="android.telephony.action.SUBSCRIPTION_PLANS_CHANGED" />
diff --git a/core/res/res/values-mcc208-mnc01/config.xml b/core/res/res/values-mcc208-mnc01/config.xml
deleted file mode 100644
index 5930e3a..0000000
--- a/core/res/res/values-mcc208-mnc01/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. Do not translate. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Orange Internet,orange.fr,,,orange,orange,,,,,208,01,1,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc208-mnc10/config.xml b/core/res/res/values-mcc208-mnc10/config.xml
deleted file mode 100644
index 3ed7818..0000000
--- a/core/res/res/values-mcc208-mnc10/config.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>SFR option modem,websfr,,,,,,,,,208,10,,DUN</item>
- <item>[ApnSettingV3]INTERNET NRJ,internetnrj,,,,,,,,,208,10,,DUN,,,true,0,,,,,,,gid,4E</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc214-mnc01/config.xml b/core/res/res/values-mcc214-mnc01/config.xml
index 24150a7..876c26e 100644
--- a/core/res/res/values-mcc214-mnc01/config.xml
+++ b/core/res/res/values-mcc214-mnc01/config.xml
@@ -30,14 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>INTERNET,airtelnet.es,,,vodafone,vodafone,,,,,214,01,1,DUN</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc214-mnc07/config.xml b/core/res/res/values-mcc214-mnc07/config.xml
deleted file mode 100644
index 4b7cc7c..0000000
--- a/core/res/res/values-mcc214-mnc07/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Conexión Compartida,movistar.es,,,MOVISTAR,MOVISTAR,,,,,214,07,1,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml
deleted file mode 100644
index c819de2..0000000
--- a/core/res/res/values-mcc222-mnc10/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. Do not translate. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Tethering Internet,web.omnitel.it,,,,,,,,,222,10,,DUN</item>
- </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc20/config.xml b/core/res/res/values-mcc234-mnc20/config.xml
index 1e4bb0b..224dc31 100644
--- a/core/res/res/values-mcc234-mnc20/config.xml
+++ b/core/res/res/values-mcc234-mnc20/config.xml
@@ -20,15 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>3hotspot,3hotspot,,,,,,,,,234,20,0,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1440</integer>
diff --git a/core/res/res/values-mcc235-mnc94/config.xml b/core/res/res/values-mcc235-mnc94/config.xml
index d527304..38ae2a0 100644
--- a/core/res/res/values-mcc235-mnc94/config.xml
+++ b/core/res/res/values-mcc235-mnc94/config.xml
@@ -31,14 +31,6 @@
<item>9</item>
</integer-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>3hotspot,3hotspot,,,,,,,,,235,94,0,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1440</integer>
diff --git a/core/res/res/values-mcc268-mnc03/config.xml b/core/res/res/values-mcc268-mnc03/config.xml
index 2f5171b..876c26e 100644
--- a/core/res/res/values-mcc268-mnc03/config.xml
+++ b/core/res/res/values-mcc268-mnc03/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,270,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Optimus HotSpot,modem,,,,,,,,,268,03,,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc220/config.xml b/core/res/res/values-mcc302-mnc220/config.xml
index 3308128..7289b4f 100644
--- a/core/res/res/values-mcc302-mnc220/config.xml
+++ b/core/res/res/values-mcc302-mnc220/config.xml
@@ -23,17 +23,6 @@
<integer name="config_mobile_mtu">1410</integer>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,220,,DUN,IP,IP,true,0,,,,,,,gid,5455</item>
- <item>[ApnSettingV3]Tethered Mobile Internet,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,5043</item>
- <item>[ApnSettingV3]Tethered Public Mobile,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,4D4F</item>
- </string-array>
-
<!-- Values for GPS configuration (Telus) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc221/config.xml b/core/res/res/values-mcc302-mnc221/config.xml
index bb0d4d5..ff14075 100644
--- a/core/res/res/values-mcc302-mnc221/config.xml
+++ b/core/res/res/values-mcc302-mnc221/config.xml
@@ -20,18 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,5455</item>
- <item>[ApnSettingV3]Tethered PC Mobile,isp.mb.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,5043</item>
- <item>[ApnSettingV3]Koodo,sp.koodo.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,4B4F</item>
- </string-array>
-
<!-- Values for GPS configuration (Telus) -->
<string-array translatable="false" name="config_gpsParameters">
<item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index 1241a9d..ad3a654 100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
@@ -20,17 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Fido LTE Tethering,ltedata.apn,,,,,,,,,302,370,,DUN</item>
- <item>[ApnSettingV3]MTS Tethering,internet.mts,,,,,,,,,302,370,,DUN,,,true,0,,,,,,,gid,2C</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1410</integer>
diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml
index 8c2e702..beb2336 100644
--- a/core/res/res/values-mcc302-mnc660/config.xml
+++ b/core/res/res/values-mcc302-mnc660/config.xml
@@ -29,16 +29,6 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>MTS -Tethering,internet.mts,,,,,,,,,302,660,,DUN</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1430</integer>
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index ef1ecd2..cfcf1f8 100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
@@ -20,19 +20,6 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Rogers LTE Tethering,ltedata.apn,,,,,,,,,302,720,,DUN</item>
- <item>[ApnSettingV3]chatr Tethering,chatrisp.apn,,,,,,,,,302,720,,DUN,,,true,0,,,,,,,imsi,302720x94</item>
- <item>[ApnSettingV3]Tbaytel Tethering,ltedata.apn,,,,,,,,,302,720,,DUN,IPV4V6,IP,true,0,,,,,,,gid,BA</item>
- <item>[ApnSettingV3]Cityfone Tethering,ltedata.apn,,,,,,,,,302,720,,DUN,IPV4V6,IP,true,0,,,,,,,spn,CITYFONE</item>
- </string-array>
-
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
<integer name="config_mobile_mtu">1430</integer>
diff --git a/core/res/res/values-mcc311-mnc190/config.xml b/core/res/res/values-mcc311-mnc190/config.xml
index c17a07c..876c26e 100644
--- a/core/res/res/values-mcc311-mnc190/config.xml
+++ b/core/res/res/values-mcc311-mnc190/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type"
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Tether,broadband.cellular1.net,,,,,,,,,311,190,,DUN</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc334-mnc050/config.xml b/core/res/res/values-mcc334-mnc050/config.xml
index 616a8e8..23678f1 100644
--- a/core/res/res/values-mcc334-mnc050/config.xml
+++ b/core/res/res/values-mcc334-mnc050/config.xml
@@ -31,15 +31,6 @@
<item>9</item>
</integer-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Modem,modem.iusacellgsm.mx,,,iusacellgsm,iusacellgsm,,,,,334,050,1,DUN</item>
- </string-array>
-
<!-- Do not translate. Defines the slots is Two Digit Number for dialing normally not USSD -->
<string-array translatable="false" name="config_twoDigitNumberPattern">
<item>"#9"</item>
diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml
index 1ca8963..3b23b85 100644
--- a/core/res/res/values-mcc340-mnc01/config.xml
+++ b/core/res/res/values-mcc340-mnc01/config.xml
@@ -29,13 +29,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>Orangeweb,orangeweb,,,orange,orange,,,,,340,01,1,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc425-mnc07/config.xml b/core/res/res/values-mcc425-mnc07/config.xml
index 770cebd..876c26e 100644
--- a/core/res/res/values-mcc425-mnc07/config.xml
+++ b/core/res/res/values-mcc425-mnc07/config.xml
@@ -30,13 +30,4 @@
<item>7</item>
<item>9</item>
</integer-array>
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>PC HOT mobile,pc.hotm,,,,,,,,,425,07,,DUN</item>
- </string-array>
</resources>
diff --git a/core/res/res/values-mcc454-mnc10/config.xml b/core/res/res/values-mcc454-mnc10/config.xml
deleted file mode 100644
index 79a9a7e..0000000
--- a/core/res/res/values-mcc454-mnc10/config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
- <string-array translatable="false" name="config_tether_apndata">
- <item>one2free Tethering,internet,,,,,,,,,454,10,0,DUN</item>
- </string-array>
-
-</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 206e655..98cb640 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -513,17 +513,6 @@
<string-array translatable="false" name="config_cdma_dun_supported_types">
</string-array>
- <!-- String containing the apn value for tethering. May be overriden by secure settings
- TETHER_DUN_APN. Value is a comma separated series of strings:
- "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type",
- Or string format of ApnSettingV3 or higher.
- note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN"
- Multiple entries are separated by using string-array:
- "<item>[ApnSettingV3]Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14,,,,,,,spn,testspn</item>
- <item>[ApnSettingV5]Name1,apn2,,,,,,,,,123,46,,mms|*,IPV6,IP,true,12,,,,,,,,,,</item>" -->
- <string-array translatable="false" name="config_tether_apndata">
- </string-array>
-
<!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
<bool translatable="false" name="config_wifi_dual_band_support">false</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a397a6a..4d5ef68 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1833,7 +1833,6 @@
<java-symbol type="array" name="config_tether_dhcp_range" />
<java-symbol type="array" name="config_tether_upstream_types" />
<java-symbol type="bool" name="config_tether_upstream_automatic" />
- <java-symbol type="array" name="config_tether_apndata" />
<java-symbol type="array" name="config_tether_usb_regexs" />
<java-symbol type="array" name="config_tether_wifi_regexs" />
<java-symbol type="array" name="config_usbHostBlacklist" />
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 7b3d940..7163769 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -187,7 +187,7 @@
<shortcode country="my" pattern="\\d{5}" premium="32298|33776" free="22099|28288" />
<!-- The Netherlands, 4 digits, known premium codes listed, plus EU -->
- <shortcode country="nl" pattern="\\d{4}" premium="4466|5040" free="116\\d{3}|2223|6225|2223" />
+ <shortcode country="nl" pattern="\\d{4}" premium="4466|5040" free="116\\d{3}|2223|6225|2223|1662" />
<!-- Nigeria -->
<shortcode country="ng" pattern="\\d{1,5}" free="2441" />
diff --git a/libs/hwui/tests/macrobench/TestSceneRunner.cpp b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
index 9428f53..5f5a92e 100644
--- a/libs/hwui/tests/macrobench/TestSceneRunner.cpp
+++ b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
@@ -81,11 +81,11 @@
// mean and stddev which doesn't make sense for our usage
std::vector<BenchmarkReporter::Run> reports;
BenchmarkReporter::Run report;
- report.benchmark_name = info.name;
+ report.run_name = info.name;
report.iterations = static_cast<int64_t>(opts.count);
report.real_accumulated_time = durationInS;
report.cpu_accumulated_time = durationInS;
- report.items_per_second = opts.count / durationInS;
+ report.counters["items_per_second"] = opts.count / durationInS;
reports.push_back(report);
reporter->ReportRuns(reports);
@@ -94,13 +94,13 @@
// in that test case than percentiles.
if (!opts.renderOffscreen) {
for (auto& ri : REPORTS) {
- reports[0].benchmark_name = info.name;
- reports[0].benchmark_name += ri.suffix;
+ reports[0].run_name = info.name;
+ reports[0].run_name += ri.suffix;
durationInS = proxy->frameTimePercentile(ri.percentile) / 1000.0;
reports[0].real_accumulated_time = durationInS;
reports[0].cpu_accumulated_time = durationInS;
reports[0].iterations = 1;
- reports[0].items_per_second = 0;
+ reports[0].counters["items_per_second"] = 0;
reporter->ReportRuns(reports);
}
}
diff --git a/libs/incident/Android.bp b/libs/incident/Android.bp
new file mode 100644
index 0000000..0619a9c
--- /dev/null
+++ b/libs/incident/Android.bp
@@ -0,0 +1,50 @@
+// 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_library_shared {
+ name: "libincident",
+
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wno-missing-field-initializers",
+ "-Wno-unused-variable",
+ "-Wunused-parameter",
+ ],
+
+ shared_libs: [
+ "libbinder",
+ "liblog",
+ "libutils",
+ ],
+
+ aidl: {
+ include_dirs: ["frameworks/base/core/java"],
+ export_aidl_headers: true,
+ },
+
+ srcs: [
+ ":libincident_aidl",
+ "proto/android/os/header.proto",
+ "proto/android/os/metadata.proto",
+ "src/IncidentReportArgs.cpp",
+ ],
+
+ proto: {
+ type: "lite",
+ export_proto_headers: true,
+ },
+
+ export_include_dirs: ["include"],
+}
diff --git a/libs/incident/Android.mk b/libs/incident/Android.mk
deleted file mode 100644
index 08c8346..0000000
--- a/libs/incident/Android.mk
+++ /dev/null
@@ -1,43 +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_MODULE := libincident
-
-LOCAL_CFLAGS := \
- -Wall -Werror -Wno-missing-field-initializers -Wno-unused-variable -Wunused-parameter
-
-LOCAL_SHARED_LIBRARIES := \
- libbinder \
- liblog \
- libutils
-
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/../../core/java
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/include
-
-LOCAL_SRC_FILES := \
- ../../core/java/android/os/IIncidentManager.aidl \
- ../../core/java/android/os/IIncidentReportStatusListener.aidl \
- proto/android/os/header.proto \
- proto/android/os/metadata.proto \
- src/IncidentReportArgs.cpp
-
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
-LOCAL_PROTO_OPTIMIZE_TYPE := lite
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index e019f42..00a393a 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -958,4 +958,16 @@
*/
public static final int METADATA_KEY_COLOR_RANGE = 37;
// Add more here...
+
+ /**
+ * This key retrieves the sample rate, if available.
+ * @hide
+ */
+ public static final int METADATA_KEY_SAMPLERATE = 38;
+
+ /**
+ * This key retrieves the bits per sample, if available.
+ * @hide
+ */
+ public static final int METADATA_KEY_BITS_PER_SAMPLE = 39;
}
diff --git a/packages/SystemUI/OWNERS b/packages/SystemUI/OWNERS
index e217ace..2a3cf3e 100644
--- a/packages/SystemUI/OWNERS
+++ b/packages/SystemUI/OWNERS
@@ -6,19 +6,35 @@
asc@google.com
ashaikh@google.com
beverlyt@google.com
+brockman@google.com
cinek@google.com
cwren@google.com
dupin@google.com
+ethibodeau@google.com
evanlaird@google.com
jmonk@google.com
jaggies@google.com
jjaggi@google.com
+joshmcgrath@google.com
juliacr@google.com
+juliatuttle@google.com
+kozynski@google.com
+kprevas@google.com
madym@google.com
+mankoff@google.com
+nbenbernou@google.com
+nesciosquid@google.com
ngmatthew@google.com
+ogunwale@google.com
+pixel@google.com
roosa@google.com
shahrk@google.com
+snoeberger@google.com
+steell@google.com
+stwu@google.com
sunnygoyal@google.com
+susikp@google.com
+tsuji@google.com
twickham@google.com
winsonc@google.com
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
index 61f7fe8..bc9f52c 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
@@ -116,6 +116,7 @@
public boolean isTransient = false;
public String expandedAccessibilityClassName;
public SlashState slash;
+ public boolean handlesLongClick = true;
public boolean copyTo(State other) {
if (other == null) throw new IllegalArgumentException();
@@ -133,7 +134,8 @@
|| !Objects.equals(other.state, state)
|| !Objects.equals(other.isTransient, isTransient)
|| !Objects.equals(other.dualTarget, dualTarget)
- || !Objects.equals(other.slash, slash);
+ || !Objects.equals(other.slash, slash)
+ || !Objects.equals(other.handlesLongClick, handlesLongClick);
other.icon = icon;
other.iconSupplier = iconSupplier;
other.label = label;
@@ -146,6 +148,7 @@
other.dualTarget = dualTarget;
other.isTransient = isTransient;
other.slash = slash != null ? slash.copy() : null;
+ other.handlesLongClick = handlesLongClick;
return changed;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
index 42e5adc..ac111ee 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
@@ -193,6 +193,7 @@
setClickable(state.state != Tile.STATE_UNAVAILABLE);
mIcon.setIcon(state);
+ setLongClickable(state.handlesLongClick);
setContentDescription(state.contentDescription);
mAccessibilityClass = state.expandedAccessibilityClassName;
@@ -276,10 +277,14 @@
info.setText(label);
info.setChecked(b);
info.setCheckable(true);
- info.addAction(
- new AccessibilityNodeInfo.AccessibilityAction(
- AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.getId(),
- getResources().getString(R.string.accessibility_long_click_tile)));
+ if (isLongClickable()) {
+ info.addAction(
+ new AccessibilityNodeInfo.AccessibilityAction(
+ AccessibilityNodeInfo.AccessibilityAction
+ .ACTION_LONG_CLICK.getId(),
+ getResources().getString(
+ R.string.accessibility_long_click_tile)));
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index f2ead1c..d7ac253 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -18,7 +18,6 @@
import android.app.ActivityManager;
import android.content.Intent;
-import android.graphics.drawable.Drawable;
import android.provider.MediaStore;
import android.service.quicksettings.Tile;
import android.widget.Switch;
@@ -50,7 +49,9 @@
@Override
public BooleanState newTileState() {
- return new BooleanState();
+ BooleanState state = new BooleanState();
+ state.handlesLongClick = false;
+ return state;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
index 384a6e7..fc815be 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
@@ -38,6 +38,7 @@
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkControllerImpl;
import com.android.systemui.statusbar.policy.SecurityController;
+import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
import java.util.ArrayList;
import java.util.List;
@@ -88,11 +89,13 @@
mNetworkController = Dependency.get(NetworkController.class);
mSecurityController = Dependency.get(SecurityController.class);
+ Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
mNetworkController.addCallback(this);
mSecurityController.addCallback(this);
}
public void destroy() {
+ Dependency.get(TunerService.class).removeTunable(this);
mNetworkController.removeCallback(this);
mSecurityController.removeCallback(this);
}
@@ -136,6 +139,7 @@
mBlockWifi = blockWifi || mForceBlockWifi;
// Re-register to get new callbacks.
mNetworkController.removeCallback(this);
+ mNetworkController.addCallback(this);
}
}
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 76f29aa..385ef7f 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -61,6 +61,7 @@
import android.net.INetworkManagementEventObserver;
import android.net.ITetheringStatsProvider;
import android.net.InterfaceConfiguration;
+import android.net.InterfaceConfigurationParcel;
import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.Network;
@@ -965,55 +966,29 @@
public String[] listInterfaces() {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try {
- return NativeDaemonEvent.filterMessageList(
- mConnector.executeForList("interface", "list"), InterfaceListResult);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ final List<String> result = mNetdService.interfaceGetList();
+ return result.toArray(EMPTY_STRING_ARRAY);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@Override
public InterfaceConfiguration getInterfaceConfig(String iface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
-
- final NativeDaemonEvent event;
+ final InterfaceConfigurationParcel result;
try {
- event = mConnector.execute("interface", "getcfg", iface);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ result = mNetdService.interfaceGetCfg(iface);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
- event.checkCode(InterfaceGetCfgResult);
-
- // Rsp: 213 xx:xx:xx:xx:xx:xx yyy.yyy.yyy.yyy zzz flag1 flag2 flag3
- final StringTokenizer st = new StringTokenizer(event.getMessage());
-
- InterfaceConfiguration cfg;
try {
- cfg = new InterfaceConfiguration();
- cfg.setHardwareAddress(st.nextToken(" "));
- InetAddress addr = null;
- int prefixLength = 0;
- try {
- addr = NetworkUtils.numericToInetAddress(st.nextToken());
- } catch (IllegalArgumentException iae) {
- Slog.e(TAG, "Failed to parse ipaddr", iae);
- }
-
- try {
- prefixLength = Integer.parseInt(st.nextToken());
- } catch (NumberFormatException nfe) {
- Slog.e(TAG, "Failed to parse prefixLength", nfe);
- }
-
- cfg.setLinkAddress(new LinkAddress(addr, prefixLength));
- while (st.hasMoreTokens()) {
- cfg.setFlag(st.nextToken());
- }
- } catch (NoSuchElementException nsee) {
- throw new IllegalStateException("Invalid response from daemon: " + event);
+ final InterfaceConfiguration cfg = InterfaceConfiguration.fromParcel(result);
+ return cfg;
+ } catch (IllegalArgumentException iae) {
+ throw new IllegalStateException("Invalid InterfaceConfigurationParcel", iae);
}
- return cfg;
}
@Override
@@ -1024,17 +999,12 @@
throw new IllegalStateException("Null LinkAddress given");
}
- final Command cmd = new Command("interface", "setcfg", iface,
- linkAddr.getAddress().getHostAddress(),
- linkAddr.getPrefixLength());
- for (String flag : cfg.getFlags()) {
- cmd.appendArg(flag);
- }
+ final InterfaceConfigurationParcel cfgParcel = cfg.toParcel(iface);
try {
- mConnector.execute(cmd);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceSetCfg(cfgParcel);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@@ -1058,10 +1028,9 @@
public void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try {
- mConnector.execute(
- "interface", "ipv6privacyextensions", iface, enable ? "enable" : "disable");
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceSetIPv6PrivacyExtensions(iface, enable);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@@ -1071,9 +1040,9 @@
public void clearInterfaceAddresses(String iface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try {
- mConnector.execute("interface", "clearaddrs", iface);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceClearAddrs(iface);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@@ -1081,9 +1050,9 @@
public void enableIpv6(String iface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try {
- mConnector.execute("interface", "ipv6", iface, "enable");
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceSetEnableIPv6(iface, true);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@@ -1100,9 +1069,9 @@
public void disableIpv6(String iface) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
try {
- mConnector.execute("interface", "ipv6", iface, "disable");
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceSetEnableIPv6(iface, false);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
@@ -1184,11 +1153,10 @@
public void setMtu(String iface, int mtu) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
- final NativeDaemonEvent event;
try {
- event = mConnector.execute("interface", "setmtu", iface, mtu);
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
+ mNetdService.interfaceSetMtu(iface, mtu);
+ } catch (RemoteException | ServiceSpecificException e) {
+ throw new IllegalStateException(e);
}
}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 6c2903f..3b71cd9 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -876,6 +876,7 @@
mStoraged.onUserStarted(userId);
}
mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
+ mStorageManagerInternal.onReset(mVold);
} catch (Exception e) {
Slog.wtf(TAG, e);
}
@@ -3629,6 +3630,10 @@
private final CopyOnWriteArrayList<ExternalStorageMountPolicy> mPolicies =
new CopyOnWriteArrayList<>();
+ @GuardedBy("mResetListeners")
+ private final List<StorageManagerInternal.ResetListener> mResetListeners =
+ new ArrayList<>();
+
@Override
public void addExternalStoragePolicy(ExternalStorageMountPolicy policy) {
// No locking - CopyOnWriteArrayList
@@ -3658,6 +3663,21 @@
return mountMode;
}
+ @Override
+ public void addResetListener(StorageManagerInternal.ResetListener listener) {
+ synchronized (mResetListeners) {
+ mResetListeners.add(listener);
+ }
+ }
+
+ public void onReset(IVold vold) {
+ synchronized (mResetListeners) {
+ for (StorageManagerInternal.ResetListener listener : mResetListeners) {
+ listener.onReset(vold);
+ }
+ }
+ }
+
public boolean hasExternalStorage(int uid, String packageName) {
// No need to check for system uid. This avoids a deadlock between
// PackageManagerService and AppOpsService.
diff --git a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
index 4f31e53..422f556 100644
--- a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
+++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
@@ -208,7 +208,8 @@
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
- callback.onDnsEvent(hostname, ipAddresses, ipAddressesCount, timestamp, uid);
+ callback.onDnsEvent(netId, eventType, returnCode, hostname, ipAddresses,
+ ipAddressesCount, timestamp, uid);
}
}
}
diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
index 7b8571c..deaa334 100644
--- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java
+++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
@@ -23,6 +23,8 @@
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
import static android.content.pm.PackageManager.GET_PERMISSIONS;
+import static android.os.Process.INVALID_UID;
+import static android.os.Process.SYSTEM_UID;
import android.annotation.NonNull;
import android.content.BroadcastReceiver;
@@ -64,6 +66,7 @@
private static final boolean DBG = true;
private static final Boolean SYSTEM = Boolean.TRUE;
private static final Boolean NETWORK = Boolean.FALSE;
+ private static final int VERSION_Q = Build.VERSION_CODES.Q;
private final Context mContext;
private final PackageManager mPackageManager;
@@ -87,7 +90,7 @@
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
- int appUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+ int appUid = intent.getIntExtra(Intent.EXTRA_UID, INVALID_UID);
Uri appData = intent.getData();
String appName = appData != null ? appData.getSchemeSpecificPart() : null;
@@ -127,7 +130,7 @@
}
for (PackageInfo app : apps) {
- int uid = app.applicationInfo != null ? app.applicationInfo.uid : -1;
+ int uid = app.applicationInfo != null ? app.applicationInfo.uid : INVALID_UID;
if (uid < 0) {
continue;
}
@@ -162,6 +165,11 @@
}
@VisibleForTesting
+ int getDeviceFirstSdkInt() {
+ return Build.VERSION.FIRST_SDK_INT;
+ }
+
+ @VisibleForTesting
boolean hasPermission(PackageInfo app, String permission) {
if (app.requestedPermissions != null) {
for (String p : app.requestedPermissions) {
@@ -180,10 +188,17 @@
private boolean hasRestrictedNetworkPermission(PackageInfo app) {
// TODO : remove this check in the future(b/31479477). All apps should just
// request the appropriate permission for their use case since android Q.
- if (app.applicationInfo != null
- && app.applicationInfo.targetSdkVersion < Build.VERSION_CODES.Q
- && isVendorApp(app.applicationInfo)) {
- return true;
+ if (app.applicationInfo != null) {
+ // Backward compatibility for b/114245686, on devices that launched before Q daemons
+ // and apps running as the system UID are exempted from this check.
+ if (app.applicationInfo.uid == SYSTEM_UID && getDeviceFirstSdkInt() < VERSION_Q) {
+ return true;
+ }
+
+ if (app.applicationInfo.targetSdkVersion < VERSION_Q
+ && isVendorApp(app.applicationInfo)) {
+ return true;
+ }
}
return hasPermission(app, CONNECTIVITY_INTERNAL)
|| hasPermission(app, CONNECTIVITY_USE_RESTRICTED_NETWORKS);
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 3f03169..383e1e0 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -1620,7 +1620,8 @@
// fold tethering stats and operations into uid snapshot
final NetworkStats tetherSnapshot = getNetworkStatsTethering(STATS_PER_UID);
tetherSnapshot.filter(UID_ALL, ifaces, TAG_ALL);
- NetworkStatsFactory.apply464xlatAdjustments(uidSnapshot, tetherSnapshot);
+ NetworkStatsFactory.apply464xlatAdjustments(uidSnapshot, tetherSnapshot,
+ mUseBpfTrafficStats);
uidSnapshot.combineAllValues(tetherSnapshot);
final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
@@ -1630,7 +1631,8 @@
final NetworkStats vtStats = telephonyManager.getVtDataUsage(STATS_PER_UID);
if (vtStats != null) {
vtStats.filter(UID_ALL, ifaces, TAG_ALL);
- NetworkStatsFactory.apply464xlatAdjustments(uidSnapshot, vtStats);
+ NetworkStatsFactory.apply464xlatAdjustments(uidSnapshot, vtStats,
+ mUseBpfTrafficStats);
uidSnapshot.combineAllValues(vtStats);
}
diff --git a/services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java b/services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java
index 29b1339..fa90e90 100644
--- a/services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java
+++ b/services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java
@@ -142,8 +142,8 @@
private final INetdEventCallback mNetdEventCallback = new BaseNetdEventCallback() {
@Override
- public void onDnsEvent(String hostname, String[] ipAddresses, int ipAddressesCount,
- long timestamp, int uid) {
+ public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
+ String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
if (!mIsLoggingEnabled) {
return;
}
diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java
index 392d4d8..753c283 100644
--- a/services/core/java/com/android/server/pm/dex/DexManager.java
+++ b/services/core/java/com/android/server/pm/dex/DexManager.java
@@ -30,6 +30,7 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings.Global;
+import android.util.Log;
import android.util.Slog;
import android.util.jar.StrictJarFile;
@@ -74,7 +75,7 @@
private static final String PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB_LIST =
"pm.dexopt.priv-apps-oob-list";
- private static final boolean DEBUG = false;
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final Context mContext;
@@ -192,6 +193,16 @@
String[] classLoaderContexts = DexoptUtils.processContextForDexLoad(
classLoaderNames, classPaths);
+ // A null classLoaderContexts means that there are unsupported class loaders in the
+ // chain.
+ if (classLoaderContexts == null) {
+ if (DEBUG) {
+ Slog.i(TAG, loadingAppInfo.packageName +
+ " uses unsupported class loader in " + classLoaderNames);
+ }
+ return;
+ }
+
int dexPathIndex = 0;
for (String dexPath : dexPathsToRegister) {
// Find the owning package name.
@@ -219,14 +230,10 @@
}
// Record dex file usage. If the current usage is a new pattern (e.g. new secondary,
- // or UsedBytOtherApps), record will return true and we trigger an async write
+ // or UsedByOtherApps), record will return true and we trigger an async write
// to disk to make sure we don't loose the data in case of a reboot.
- // A null classLoaderContexts means that there are unsupported class loaders in the
- // chain.
- String classLoaderContext = classLoaderContexts == null
- ? PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT
- : classLoaderContexts[dexPathIndex];
+ String classLoaderContext = classLoaderContexts[dexPathIndex];
if (mPackageDexUsage.record(searchResult.mOwningPackageName,
dexPath, loaderUserId, loaderIsa, isUsedByOtherApps, primaryOrSplit,
loadingAppInfo.packageName, classLoaderContext)) {
diff --git a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
index 602ce3b..86f7380 100644
--- a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
+++ b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
@@ -21,6 +21,7 @@
import android.os.Build;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FastPrintWriter;
import com.android.server.pm.AbstractStatsBase;
import com.android.server.pm.PackageManagerServiceUtils;
@@ -78,14 +79,16 @@
// skip optimizations on that dex files.
/*package*/ static final String VARIABLE_CLASS_LOADER_CONTEXT =
"=VariableClassLoaderContext=";
- // The marker used for unsupported class loader contexts.
- /*package*/ static final String UNSUPPORTED_CLASS_LOADER_CONTEXT =
- "=UnsupportedClassLoaderContext=";
// The markers used for unknown class loader contexts. This can happen if the dex file was
// recorded in a previous version and we didn't have a chance to update its usage.
/*package*/ static final String UNKNOWN_CLASS_LOADER_CONTEXT =
"=UnknownClassLoaderContext=";
+ // The marker used for unsupported class loader contexts (no longer written, may occur in old
+ // files so discarded on read).
+ private static final String UNSUPPORTED_CLASS_LOADER_CONTEXT =
+ "=UnsupportedClassLoaderContext=";
+
// Map which structures the information we have on a package.
// Maps package name to package data (which stores info about UsedByOtherApps and
// secondary dex files.).
@@ -365,6 +368,12 @@
Set<String> loadingPackages = maybeReadLoadingPackages(in, version);
String classLoaderContext = maybeReadClassLoaderContext(in, version);
+ if (UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(classLoaderContext)) {
+ // We used to record use of unsupported class loaders, but we no longer do.
+ // Discard such entries; they will be deleted when we next write the file.
+ continue;
+ }
+
int ownerUserId = Integer.parseInt(elems[0]);
boolean isUsedByOtherApps = readBoolean(elems[1]);
DexUseInfo dexUseInfo = new DexUseInfo(isUsedByOtherApps, ownerUserId,
@@ -709,13 +718,13 @@
// the compiled code will be private.
private boolean mUsedByOtherAppsBeforeUpgrade;
- public PackageUseInfo() {
+ /*package*/ PackageUseInfo() {
mCodePathsUsedByOtherApps = new HashMap<>();
mDexUseInfoMap = new HashMap<>();
}
// Creates a deep copy of the `other`.
- public PackageUseInfo(PackageUseInfo other) {
+ private PackageUseInfo(PackageUseInfo other) {
mCodePathsUsedByOtherApps = new HashMap<>();
for (Map.Entry<String, Set<String>> e : other.mCodePathsUsedByOtherApps.entrySet()) {
mCodePathsUsedByOtherApps.put(e.getKey(), new HashSet<>(e.getValue()));
@@ -796,8 +805,9 @@
// Packages who load this dex file.
private final Set<String> mLoadingPackages;
- public DexUseInfo(boolean isUsedByOtherApps, int ownerUserId, String classLoaderContext,
- String loaderIsa) {
+ @VisibleForTesting
+ /* package */ DexUseInfo(boolean isUsedByOtherApps, int ownerUserId,
+ String classLoaderContext, String loaderIsa) {
mIsUsedByOtherApps = isUsedByOtherApps;
mOwnerUserId = ownerUserId;
mClassLoaderContext = classLoaderContext;
@@ -809,7 +819,7 @@
}
// Creates a deep copy of the `other`.
- public DexUseInfo(DexUseInfo other) {
+ private DexUseInfo(DexUseInfo other) {
mIsUsedByOtherApps = other.mIsUsedByOtherApps;
mOwnerUserId = other.mOwnerUserId;
mClassLoaderContext = other.mClassLoaderContext;
@@ -827,11 +837,7 @@
if (UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext)) {
// Can happen if we read a previous version.
mClassLoaderContext = dexUseInfo.mClassLoaderContext;
- } else if (UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(dexUseInfo.mClassLoaderContext)) {
- // We detected an unsupported context.
- mClassLoaderContext = UNSUPPORTED_CLASS_LOADER_CONTEXT;
- } else if (!UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext) &&
- !Objects.equals(mClassLoaderContext, dexUseInfo.mClassLoaderContext)) {
+ } else if (!Objects.equals(mClassLoaderContext, dexUseInfo.mClassLoaderContext)) {
// We detected a context change.
mClassLoaderContext = VARIABLE_CLASS_LOADER_CONTEXT;
}
@@ -846,7 +852,7 @@
return mIsUsedByOtherApps;
}
- public int getOwnerUserId() {
+ /* package */ int getOwnerUserId() {
return mOwnerUserId;
}
@@ -860,17 +866,15 @@
public String getClassLoaderContext() { return mClassLoaderContext; }
- public boolean isUnsupportedClassLoaderContext() {
- return UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
- }
-
- public boolean isUnknownClassLoaderContext() {
+ @VisibleForTesting
+ /* package */ boolean isUnknownClassLoaderContext() {
// The class loader context may be unknown if we loaded the data from a previous version
// which didn't save the context.
return UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
}
- public boolean isVariableClassLoaderContext() {
+ @VisibleForTesting
+ /* package */ boolean isVariableClassLoaderContext() {
return VARIABLE_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
}
}
diff --git a/services/core/jni/com_android_server_connectivity_Vpn.cpp b/services/core/jni/com_android_server_connectivity_Vpn.cpp
index b6bea11..836d6d8 100644
--- a/services/core/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/core/jni/com_android_server_connectivity_Vpn.cpp
@@ -57,7 +57,7 @@
static int create_interface(int mtu)
{
- int tun = open("/dev/tun", O_RDWR | O_NONBLOCK);
+ int tun = open("/dev/tun", O_RDWR | O_NONBLOCK | O_CLOEXEC);
ifreq ifr4;
memset(&ifr4, 0, sizeof(ifr4));
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
index 0967652..d8c2ad8 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/NetworkLogger.java
@@ -53,8 +53,8 @@
private final INetdEventCallback mNetdEventCallback = new BaseNetdEventCallback() {
@Override
- public void onDnsEvent(String hostname, String[] ipAddresses, int ipAddressesCount,
- long timestamp, int uid) {
+ public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
+ String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
if (!mIsLoggingEnabled.get()) {
return;
}
diff --git a/services/tests/mockingservicestests/Android.mk b/services/tests/mockingservicestests/Android.mk
index 34de9df..7946bae 100644
--- a/services/tests/mockingservicestests/Android.mk
+++ b/services/tests/mockingservicestests/Android.mk
@@ -23,7 +23,7 @@
services.core \
services.devicepolicy \
frameworks-base-testutils \
- androidx-test \
+ androidx.test.runner \
mockito-target-extended-minus-junit4 \
ShortcutManagerTestUtils \
compatibility-device-util \
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index d46b991..13ba229 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -143,7 +143,8 @@
<activity android:name="com.android.server.pm.BaseShortcutManagerTest$ShortcutActivity2" />
<activity android:name="com.android.server.pm.BaseShortcutManagerTest$ShortcutActivity3" />
- <activity android:name="com.android.server.wm.ScreenDecorWindowTests$TestActivity" />
+ <activity android:name="com.android.server.wm.ScreenDecorWindowTests$TestActivity"
+ android:showWhenLocked="true" />
<activity android:name="com.android.server.pm.ShortcutTestActivity"
android:enabled="true" android:exported="true" />
diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java
index ccd3cdd..a802ff7 100644
--- a/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java
@@ -51,7 +51,9 @@
@MediumTest
public class NetworkWatchlistServiceTests {
- private static final long NETWOR_EVENT_TIMEOUT_SEC = 1;
+ private static final long NETWORK_EVENT_TIMEOUT_SEC = 1;
+ private static final int TEST_NETID = 100;
+ private static final int TEST_EVENT_TYPE = 1;
private static final String TEST_HOST = "testhost.com";
private static final String TEST_IP = "7.6.8.9";
private static final String[] TEST_IPS =
@@ -180,8 +182,9 @@
}
};
mWatchlistService.mNetworkWatchlistHandler = testDnsHandler;
- connectivityMetrics.callback.onDnsEvent(TEST_HOST, TEST_IPS, TEST_IPS.length, 123L, 456);
- if (!testDnsLatch.await(NETWOR_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
+ connectivityMetrics.callback.onDnsEvent(TEST_NETID, TEST_EVENT_TYPE, 0,
+ TEST_HOST, TEST_IPS, TEST_IPS.length, 123L, 456);
+ if (!testDnsLatch.await(NETWORK_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
fail("Timed out waiting for network event");
}
assertEquals(TEST_HOST, dnsParams[0]);
@@ -206,7 +209,7 @@
};
mWatchlistService.mNetworkWatchlistHandler = testConnectHandler;
connectivityMetrics.callback.onConnectEvent(TEST_IP, 80, 123L, 456);
- if (!testConnectLatch.await(NETWOR_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
+ if (!testConnectLatch.await(NETWORK_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
fail("Timed out waiting for network event");
}
assertNull(connectParams[0]);
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
index 147347d..030f9cc 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java
@@ -402,15 +402,7 @@
List<String> secondaries = mBarUser0UnsupportedClassLoader.getSecondaryDexPaths();
notifyDexLoad(mBarUser0UnsupportedClassLoader, secondaries, mUser0);
- PackageUseInfo pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
- assertIsUsedByOtherApps(mBarUser0UnsupportedClassLoader, pui, false);
- assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
- // We expect that all the contexts are unsupported.
- String[] expectedContexts =
- Collections.nCopies(secondaries.size(),
- PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT).toArray(new String[0]);
- assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
- /*isUsedByOtherApps*/false, mUser0, expectedContexts);
+ assertNoUseInfo(mBarUser0UnsupportedClassLoader);
}
@Test
@@ -439,27 +431,18 @@
}
@Test
- public void testNotifyUnsupportedClassLoaderDoesNotChange() {
- List<String> secondaries = mBarUser0UnsupportedClassLoader.getSecondaryDexPaths();
+ public void testNotifyUnsupportedClassLoaderDoesNotChangeExisting() {
+ List<String> secondaries = mBarUser0.getSecondaryDexPaths();
+
+ notifyDexLoad(mBarUser0, secondaries, mUser0);
+ PackageUseInfo pui = getPackageUseInfo(mBarUser0);
+ assertSecondaryUse(mBarUser0, pui, secondaries, /*isUsedByOtherApps*/false, mUser0);
+
+ // Record bar secondaries again with an unsupported class loader. This should not change the
+ // context.
notifyDexLoad(mBarUser0UnsupportedClassLoader, secondaries, mUser0);
-
- PackageUseInfo pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
- assertIsUsedByOtherApps(mBarUser0UnsupportedClassLoader, pui, false);
- assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
- // We expect that all the contexts are unsupported.
- String[] expectedContexts =
- Collections.nCopies(secondaries.size(),
- PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT).toArray(new String[0]);
- assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
- /*isUsedByOtherApps*/false, mUser0, expectedContexts);
-
- // Record bar secondaries again with a different class loader. This will change the context.
- // However, because the context was already marked as unsupported we should not chage it.
- notifyDexLoad(mBarUser0DelegateLastClassLoader, secondaries, mUser0);
- pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
- assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
- /*isUsedByOtherApps*/false, mUser0, expectedContexts);
-
+ pui = getPackageUseInfo(mBarUser0);
+ assertSecondaryUse(mBarUser0, pui, secondaries, /*isUsedByOtherApps*/false, mUser0);
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
index 69a148d..0de0503 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
@@ -398,20 +398,6 @@
}
@Test
- public void testRecordClassLoaderContextUnsupportedContext() {
- // Record a secondary dex file.
- assertTrue(record(mFooSecondary1User0));
- // Now update its context.
- TestData unsupportedContext = mFooSecondary1User0.updateClassLoaderContext(
- PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT);
- assertTrue(record(unsupportedContext));
-
- assertPackageDexUsage(null, unsupportedContext);
- writeAndReadBack();
- assertPackageDexUsage(null, unsupportedContext);
- }
-
- @Test
public void testRecordClassLoaderContextTransitionFromUnknown() {
// Record a secondary dex file.
TestData unknownContext = mFooSecondary1User0.updateClassLoaderContext(
@@ -439,29 +425,41 @@
PackageDexUsage.DexUseInfo validContext = new DexUseInfo(isUsedByOtherApps, userId,
"valid_context", "arm");
assertFalse(validContext.isUnknownClassLoaderContext());
- assertFalse(validContext.isUnsupportedClassLoaderContext());
assertFalse(validContext.isVariableClassLoaderContext());
- PackageDexUsage.DexUseInfo unsupportedContext = new DexUseInfo(isUsedByOtherApps, userId,
- PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT, "arm");
- assertFalse(unsupportedContext.isUnknownClassLoaderContext());
- assertTrue(unsupportedContext.isUnsupportedClassLoaderContext());
- assertFalse(unsupportedContext.isVariableClassLoaderContext());
-
PackageDexUsage.DexUseInfo variableContext = new DexUseInfo(isUsedByOtherApps, userId,
PackageDexUsage.VARIABLE_CLASS_LOADER_CONTEXT, "arm");
assertFalse(variableContext.isUnknownClassLoaderContext());
- assertFalse(variableContext.isUnsupportedClassLoaderContext());
assertTrue(variableContext.isVariableClassLoaderContext());
PackageDexUsage.DexUseInfo unknownContext = new DexUseInfo(isUsedByOtherApps, userId,
PackageDexUsage.UNKNOWN_CLASS_LOADER_CONTEXT, "arm");
assertTrue(unknownContext.isUnknownClassLoaderContext());
- assertFalse(unknownContext.isUnsupportedClassLoaderContext());
assertFalse(unknownContext.isVariableClassLoaderContext());
}
@Test
+ public void testUnsupportedClassLoaderDiscardedOnRead() throws Exception {
+ String content = "PACKAGE_MANAGER__PACKAGE_DEX_USAGE__2\n"
+ + mBarSecondary1User0.mPackageName + "\n"
+ + "#" + mBarSecondary1User0.mDexFile + "\n"
+ + "0,0," + mBarSecondary1User0.mLoaderIsa + "\n"
+ + "@\n"
+ + "=UnsupportedClassLoaderContext=\n"
+
+ + mFooSecondary1User0.mPackageName + "\n"
+ + "#" + mFooSecondary1User0.mDexFile + "\n"
+ + "0,0," + mFooSecondary1User0.mLoaderIsa + "\n"
+ + "@\n"
+ + mFooSecondary1User0.mClassLoaderContext + "\n";
+
+ mPackageDexUsage.read(new StringReader(content));
+
+ assertPackageDexUsage(mFooBaseUser0, mFooSecondary1User0);
+ assertPackageDexUsage(mBarBaseUser0);
+ }
+
+ @Test
public void testReadVersion1() {
String isa = VMRuntime.getInstructionSet(Build.SUPPORTED_ABIS[0]);
// Equivalent to
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
index c0bd7cc..3c3c8dd 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java
@@ -70,7 +70,8 @@
private NotificationRecord getNotificationRecord(NotificationChannel c) {
StatusBarNotification sbn = mock(StatusBarNotification.class);
- when(sbn.getNotification()).thenReturn(mock(Notification.class));
+ Notification notification = mock(Notification.class);
+ when(sbn.getNotification()).thenReturn(notification);
return new NotificationRecord(mContext, sbn, c);
}
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
index 61d6b7d..142ab9f 100644
--- a/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -33,6 +33,7 @@
import android.content.pm.UserInfo;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler;
@@ -169,7 +170,8 @@
enforcePermission(Binder.getCallingUid(), callingPackage);
if (volumeUuid == StorageManager.UUID_PRIVATE_INTERNAL) {
- return SystemProperties.getBoolean(StorageManager.PROP_HAS_RESERVED, false);
+ return SystemProperties.getBoolean(StorageManager.PROP_HAS_RESERVED, false)
+ || Build.IS_CONTAINER;
} else {
return false;
}
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index daa09f5..b6ac91d 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -467,8 +467,24 @@
*/
public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 0x00000800;
+ /**
+ * Indicates that the call is using VoIP audio mode.
+ * <p>
+ * When this property is set, the {@link android.media.AudioManager} audio mode for this
+ * call will be {@link android.media.AudioManager#MODE_IN_COMMUNICATION}. When this
+ * property is not set, the audio mode for this call will be
+ * {@link android.media.AudioManager#MODE_IN_CALL}.
+ * <p>
+ * This property reflects changes made using {@link Connection#setAudioModeIsVoip(boolean)}.
+ * <p>
+ * You can use this property to determine whether an un-answered incoming call or a held
+ * call will use VoIP audio mode (if the call does not currently have focus, the system
+ * audio mode may not reflect the mode the call will use).
+ */
+ public static final int PROPERTY_VOIP_AUDIO_MODE = 0x00001000;
+
//******************************************************************************************
- // Next PROPERTY value: 0x00001000
+ // Next PROPERTY value: 0x00002000
//******************************************************************************************
private final String mTelecomCallId;
@@ -628,15 +644,21 @@
if (hasProperty(properties, PROPERTY_IS_EXTERNAL_CALL)) {
builder.append(" PROPERTY_IS_EXTERNAL_CALL");
}
- if(hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
+ if (hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY");
}
- if(hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
+ if (hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
builder.append(" PROPERTY_ASSISTED_DIALING_USED");
}
if (hasProperty(properties, PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL)) {
builder.append(" PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL");
}
+ if (hasProperty(properties, PROPERTY_RTT)) {
+ builder.append(" PROPERTY_RTT");
+ }
+ if (hasProperty(properties, PROPERTY_VOIP_AUDIO_MODE)) {
+ builder.append(" PROPERTY_VOIP_AUDIO_MODE");
+ }
builder.append("]");
return builder.toString();
}
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index 3127b35..fa16bfe 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -15,6 +15,7 @@
package android.telecom;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SuppressAutoDoc;
import android.annotation.SuppressLint;
@@ -175,6 +176,33 @@
"android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
/**
+ * Broadcast intent action indicating that the current default call screening app has changed.
+ *
+ * The string extra {@link #EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME} will contain the
+ * name of the Component of the previous or the new call screening app.
+ *
+ * The boolean extra {@link #EXTRA_IS_DEFAULT_CALL_SCREENING_APP} will indicate the component
+ * name in the String extra {@link #EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME} is default
+ * call screening app or not.
+ */
+ public static final String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED =
+ "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED";
+
+ /**
+ * Extra value used with {@link #ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED} broadcast to
+ * indicate the ComponentName of the call screening app which has changed.
+ */
+ public static final String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME =
+ "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME";
+
+ /**
+ * Extra value used with {@link #ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED} broadcast to
+ * indicate whether an app is the default call screening app.
+ */
+ public static final String EXTRA_IS_DEFAULT_CALL_SCREENING_APP =
+ "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP";
+
+ /**
* Optional extra for {@link android.content.Intent#ACTION_CALL} containing a boolean that
* determines whether the speakerphone should be automatically turned on for an outgoing call.
*/
@@ -1169,6 +1197,79 @@
}
/**
+ * Used to trigger display of the ChangeDefaultCallScreeningApp activity to prompt the user to
+ * change the call screening app.
+ *
+ * A {@link SecurityException} will be thrown if calling package name doesn't match the package
+ * of the passed {@link ComponentName}
+ *
+ * @param componentName to verify that the calling package name matches the package of the
+ * passed ComponentName.
+ */
+ public void requestChangeDefaultCallScreeningApp(@NonNull ComponentName componentName) {
+ try {
+ if (isServiceConnected()) {
+ getTelecomService().requestChangeDefaultCallScreeningApp(componentName, mContext
+ .getOpPackageName());
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG,
+ "RemoteException calling ITelecomService#requestChangeDefaultCallScreeningApp.",
+ e);
+ }
+ }
+
+ /**
+ * Used to verify that the passed ComponentName is default call screening app.
+ *
+ * @param componentName to verify that the package of the passed ComponentName matched the default
+ * call screening packageName.
+ *
+ * @return {@code true} if the passed componentName matches the default call screening's, {@code
+ * false} if the passed componentName is null, or it doesn't match default call screening's.
+ */
+ public boolean isDefaultCallScreeningApp(ComponentName componentName) {
+ try {
+ if (isServiceConnected()) {
+ return getTelecomService().isDefaultCallScreeningApp(componentName);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG,
+ "RemoteException calling ITelecomService#isDefaultCallScreeningApp.",
+ e);
+ }
+ return false;
+ }
+
+ /**
+ * Used to set the default call screening package.
+ *
+ * Requires permission: {@link android.Manifest.permission#MODIFY_PHONE_STATE} Requires
+ * permission: {@link android.Manifest.permission#WRITE_SECURE_SETTINGS}
+ *
+ * A {@link IllegalArgumentException} will be thrown if the specified package and component name
+ * of {@link ComponentName} does't exist, or the specified component of {@link ComponentName}
+ * does't have {@link android.Manifest.permission#BIND_SCREENING_SERVICE}.
+ *
+ * @param componentName to set the default call screening to.
+ * @hide
+ */
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.MODIFY_PHONE_STATE,
+ android.Manifest.permission.WRITE_SECURE_SETTINGS
+ })
+ public void setDefaultCallScreeningApp(ComponentName componentName) {
+ try {
+ if (isServiceConnected()) {
+ getTelecomService().setDefaultCallScreeningApp(componentName);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG,
+ "RemoteException calling ITelecomService#setDefaultCallScreeningApp.", e);
+ }
+ }
+
+ /**
* Return whether a given phone number is the configured voicemail number for a
* particular phone account.
*
diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
index df7d683..d97f0c5 100644
--- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
@@ -256,6 +256,21 @@
boolean setDefaultDialer(in String packageName);
/**
+ * @see TelecomServiceImpl#requestChangeDefaultCallScreeningApp
+ */
+ void requestChangeDefaultCallScreeningApp(in ComponentName componentNamem, String callingPackage);
+
+ /**
+ * @see TelecomServiceImpl#isDefaultCallScreeningApp
+ */
+ boolean isDefaultCallScreeningApp(in ComponentName componentName);
+
+ /**
+ * @see TelecomServiceImpl#setDefaultCallScreeningApp
+ */
+ void setDefaultCallScreeningApp(in ComponentName componentName);
+
+ /**
* @see TelecomServiceImpl#createManageBlockedNumbersIntent
**/
Intent createManageBlockedNumbersIntent();
diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java
index cac9f2b..9c64cf6 100644
--- a/telephony/java/android/telephony/AccessNetworkConstants.java
+++ b/telephony/java/android/telephony/AccessNetworkConstants.java
@@ -32,7 +32,20 @@
public static final int IWLAN = 5;
/** @hide */
- private AccessNetworkType() {};
+ private AccessNetworkType() {}
+
+ /** @hide */
+ public static String toString(int type) {
+ switch (type) {
+ case UNKNOWN: return "UNKNOWN";
+ case GERAN: return "GERAN";
+ case UTRAN: return "UTRAN";
+ case EUTRAN: return "EUTRAN";
+ case CDMA2000: return "CDMA2000";
+ case IWLAN: return "IWLAN";
+ default: return Integer.toString(type);
+ }
+ }
}
/**
@@ -47,7 +60,16 @@
public static final int WLAN = 2;
/** @hide */
- private TransportType() {};
+ private TransportType() {}
+
+ /** @hide */
+ public static String toString(int type) {
+ switch (type) {
+ case WWAN: return "WWAN";
+ case WLAN: return "WLAN";
+ default: return Integer.toString(type);
+ }
+ }
}
/**
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 9f7786b..5e12483 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -2232,6 +2232,20 @@
public static final String KEY_CALL_WAITING_OVER_UT_WARNING_BOOL =
"call_waiting_over_ut_warning_bool";
+ /**
+ * Flag indicating whether to support "Network default" option in Caller ID settings for Calling
+ * Line Identification Restriction (CLIR).
+ */
+ public static final String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL =
+ "support_clir_network_default_bool";
+
+ /**
+ * Determines whether the carrier want to support emergency dialer shortcut.
+ * @hide
+ */
+ public static final String KEY_SUPPORT_EMERGENCY_DIALER_SHORTCUT_BOOL =
+ "support_emergency_dialer_shortcut_bool";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -2556,7 +2570,7 @@
sDefaults.putBoolean(KEY_SPN_DISPLAY_RULE_USE_ROAMING_FROM_SERVICE_STATE_BOOL, false);
sDefaults.putBoolean(KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL, false);
sDefaults.putBoolean(KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL, false);
- sDefaults.putBoolean(KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL, false);
+ sDefaults.putBoolean(KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL, true);
sDefaults.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false);
sDefaults.putBoolean(KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL, false);
sDefaults.putIntArray(KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
@@ -2580,6 +2594,8 @@
sDefaults.putBoolean(KEY_CALL_BARRING_OVER_UT_WARNING_BOOL, false);
sDefaults.putBoolean(KEY_CALLER_ID_OVER_UT_WARNING_BOOL, false);
sDefaults.putBoolean(KEY_CALL_WAITING_OVER_UT_WARNING_BOOL, false);
+ sDefaults.putBoolean(KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL, true);
+ sDefaults.putBoolean(KEY_SUPPORT_EMERGENCY_DIALER_SHORTCUT_BOOL, true);
}
/**
diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java
index 1d79988..da3acc2 100644
--- a/telephony/java/android/telephony/RadioAccessFamily.java
+++ b/telephony/java/android/telephony/RadioAccessFamily.java
@@ -29,29 +29,32 @@
*/
public class RadioAccessFamily implements Parcelable {
- // Radio Access Family
+ /**
+ * TODO: get rid of RAF definition in RadioAccessFamily and
+ * use {@link TelephonyManager.NetworkTypeBitMask}
+ */
// 2G
- public static final int RAF_UNKNOWN = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);
- public static final int RAF_GSM = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GSM);
- public static final int RAF_GPRS = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GPRS);
- public static final int RAF_EDGE = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EDGE);
- public static final int RAF_IS95A = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95A);
- public static final int RAF_IS95B = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95B);
- public static final int RAF_1xRTT = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT);
+ public static final int RAF_UNKNOWN = TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN;
+ public static final int RAF_GSM = TelephonyManager.NETWORK_TYPE_BITMASK_GSM;
+ public static final int RAF_GPRS = TelephonyManager.NETWORK_TYPE_BITMASK_GPRS;
+ public static final int RAF_EDGE = TelephonyManager.NETWORK_TYPE_BITMASK_EDGE;
+ public static final int RAF_IS95A = TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
+ public static final int RAF_IS95B = TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
+ public static final int RAF_1xRTT = TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT;
// 3G
- public static final int RAF_EVDO_0 = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0);
- public static final int RAF_EVDO_A = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A);
- public static final int RAF_EVDO_B = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B);
- public static final int RAF_EHRPD = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD);
- public static final int RAF_HSUPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA);
- public static final int RAF_HSDPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA);
- public static final int RAF_HSPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPA);
- public static final int RAF_HSPAP = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP);
- public static final int RAF_UMTS = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_UMTS);
- public static final int RAF_TD_SCDMA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA);
+ public static final int RAF_EVDO_0 = TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0;
+ public static final int RAF_EVDO_A = TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A;
+ public static final int RAF_EVDO_B = TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B;
+ public static final int RAF_EHRPD = TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD;
+ public static final int RAF_HSUPA = TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA;
+ public static final int RAF_HSDPA = TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA;
+ public static final int RAF_HSPA = TelephonyManager.NETWORK_TYPE_BITMASK_HSPA;
+ public static final int RAF_HSPAP = TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP;
+ public static final int RAF_UMTS = TelephonyManager.NETWORK_TYPE_BITMASK_UMTS;
+ public static final int RAF_TD_SCDMA = TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA;
// 4G
- public static final int RAF_LTE = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
- public static final int RAF_LTE_CA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA);
+ public static final int RAF_LTE = TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+ public static final int RAF_LTE_CA = TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA;
// Grouping of RAFs
// 2G
@@ -74,9 +77,9 @@
* Constructor.
*
* @param phoneId the phone ID
- * @param radioAccessFamily the phone radio access family defined
- * in RadioAccessFamily. It's a bit mask value to represent
- * the support type.
+ * @param radioAccessFamily the phone radio access family bitmask based on
+ * {@link TelephonyManager.NetworkTypeBitMask}. It's a bit mask value to represent the support
+ * type.
*/
@UnsupportedAppUsage
public RadioAccessFamily(int phoneId, int radioAccessFamily) {
@@ -100,7 +103,7 @@
* @return radio access family
*/
@UnsupportedAppUsage
- public int getRadioAccessFamily() {
+ public @TelephonyManager.NetworkTypeBitMask int getRadioAccessFamily() {
return mRadioAccessFamily;
}
@@ -388,4 +391,76 @@
}
return result;
}
+
+ /**
+ * convert RAF from {@link ServiceState.RilRadioTechnology} bitmask to
+ * {@link TelephonyManager.NetworkTypeBitMask}, the bitmask represented by
+ * {@link TelephonyManager.NetworkType}. Reasons are {@link TelephonyManager.NetworkType} are
+ * public while {@link ServiceState.RilRadioTechnology} are hidden. We
+ * don't want to expose two sets of definition to public.
+ *
+ * @param raf bitmask represented by {@link ServiceState.RilRadioTechnology}
+ * @return {@link TelephonyManager.NetworkTypeBitMask}
+ */
+ public static int convertToNetworkTypeBitMask(int raf) {
+ int networkTypeRaf = 0;
+
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GSM)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GSM;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GPRS)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GPRS;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EDGE)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EDGE;
+ }
+ // convert both IS95A/IS95B to CDMA as network mode doesn't support CDMA
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95A)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95B)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPA)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_UMTS)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_UMTS;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+ }
+ if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA)) != 0) {
+ networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA;
+ }
+
+ return (networkTypeRaf == 0) ? TelephonyManager.NETWORK_TYPE_UNKNOWN : networkTypeRaf;
+ }
}
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index fb801b2..bc832c3 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -21,8 +21,8 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.CarrierConfigManager;
-import android.text.TextUtils;
import android.util.Log;
+import android.content.res.Resources;
import java.util.ArrayList;
import java.util.Arrays;
@@ -65,8 +65,9 @@
};
/**
- * Use Integer.MAX_VALUE because -1 is a valid value in signal strength.
- * @hide
+ * Indicates the invalid measures of signal strength.
+ *
+ * For example, this can be returned by {@link #getEvdoDbm()} or {@link #getCdmaDbm()}
*/
public static final int INVALID = Integer.MAX_VALUE;
@@ -173,9 +174,9 @@
public SignalStrength(boolean gsmFlag) {
mGsmSignalStrength = 99;
mGsmBitErrorRate = -1;
- mCdmaDbm = -1;
+ mCdmaDbm = INVALID;
mCdmaEcio = -1;
- mEvdoDbm = -1;
+ mEvdoDbm = INVALID;
mEvdoEcio = -1;
mEvdoSnr = -1;
mLteSignalStrength = 99;
@@ -542,6 +543,8 @@
/**
* Get the CDMA RSSI value in dBm
+ *
+ * @return the CDMA RSSI value or {@link #INVALID} if invalid
*/
public int getCdmaDbm() {
return this.mCdmaDbm;
@@ -556,6 +559,8 @@
/**
* Get the EVDO RSSI value in dBm
+ *
+ * @return the EVDO RSSI value or {@link #INVALID} if invalid
*/
public int getEvdoDbm() {
return this.mEvdoDbm;
@@ -1116,7 +1121,7 @@
public int getWcdmaLevel() {
int level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
- if (TextUtils.isEmpty(mWcdmaDefaultSignalMeasurement)) {
+ if (mWcdmaDefaultSignalMeasurement == null) {
Log.wtf(LOG_TAG, "getWcdmaLevel - WCDMA default signal measurement is invalid.");
return level;
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 2508b6d..e4f766f 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -20,6 +20,7 @@
import static com.android.internal.util.Preconditions.checkNotNull;
+import android.Manifest;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -5121,6 +5122,9 @@
* {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling
* app has carrier privileges (see {@link #hasCarrierPrivileges}).
*
+ * TODO: remove this one. use {@link #rebootRadio()} for reset type 1 and
+ * {@link #resetRadioConfig()} for reset type 3
+ *
* @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset
* @return true on success; false on any failure.
*
@@ -5130,8 +5134,15 @@
public boolean nvResetConfig(int resetType) {
try {
ITelephony telephony = getITelephony();
- if (telephony != null)
- return telephony.nvResetConfig(resetType);
+ if (telephony != null) {
+ if (resetType == 1 /*1: reload NV reset */) {
+ return telephony.rebootModem(getSlotIndex());
+ } else if (resetType == 3 /*3: factory NV reset */) {
+ return telephony.resetModemConfig(getSlotIndex());
+ } else {
+ Rlog.e(TAG, "nvResetConfig unsupported reset type");
+ }
+ }
} catch (RemoteException ex) {
Rlog.e(TAG, "nvResetConfig RemoteException", ex);
} catch (NullPointerException ex) {
@@ -5141,6 +5152,61 @@
}
/**
+ * Rollback modem configurations to factory default except some config which are in whitelist.
+ * Used for device configuration by some CDMA operators.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling
+ * app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ *
+ * @return {@code true} on success; {@code false} on any failure.
+ *
+ * @hide
+ */
+ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
+ @SystemApi
+ public boolean resetRadioConfig() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.resetModemConfig(getSlotIndex());
+ }
+ } catch (RemoteException ex) {
+ Rlog.e(TAG, "resetRadioConfig RemoteException", ex);
+ } catch (NullPointerException ex) {
+ Rlog.e(TAG, "resetRadioConfig NPE", ex);
+ }
+ return false;
+ }
+
+ /**
+ * Generate a radio modem reset. Used for device configuration by some CDMA operators.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling
+ * app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ *
+ * @return {@code true} on success; {@code false} on any failure.
+ *
+ * @hide
+ */
+ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
+ @SystemApi
+ public boolean rebootRadio() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.rebootModem(getSlotIndex());
+ }
+ } catch (RemoteException ex) {
+ Rlog.e(TAG, "rebootRadio RemoteException", ex);
+ } catch (NullPointerException ex) {
+ Rlog.e(TAG, "rebootRadio NPE", ex);
+ }
+ return false;
+ }
+
+ /**
* Return an appropriate subscription ID for any situation.
*
* If this object has been created with {@link #createForSubscriptionId}, then the provided
@@ -6209,7 +6275,7 @@
/**
* Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
- * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for
+ * SystemProperty to decide whether DUN APN is required for
* tethering.
*
* @return 0: Not required. 1: required. 2: Not set.
@@ -7328,6 +7394,27 @@
}
/**
+ * Determines whether the device currently supports RTT (Real-time text). Based both on carrier
+ * support for the feature and device firmware support.
+ *
+ * @return {@code true} if the device and carrier both support RTT, {@code false} otherwise.
+ * @hide
+ */
+ @TestApi
+ public boolean isRttSupported() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.isRttSupported(mSubId);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error calling ITelephony#isRttSupported", e);
+ } catch (SecurityException e) {
+ Log.e(TAG, "Permission error calling ITelephony#isWorldPhone", e);
+ }
+ return false;
+ }
+ /**
* Whether the phone supports hearing aid compatibility.
*
* @return {@code true} if the device supports hearing aid compatibility, and {@code false}
@@ -8157,6 +8244,29 @@
}
/**
+ * Return a list of certs in hex string from loaded carrier privileges access rules.
+ *
+ * @return a list of certificate in hex string. return {@code null} if there is no certs
+ * or privilege rules are not loaded yet.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE}
+ * @hide
+ */
+ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ public List<String> getCertsFromCarrierPrivilegeAccessRules() {
+ try {
+ ITelephony service = getITelephony();
+ if (service != null) {
+ return service.getCertsFromCarrierPrivilegeAccessRules(getSubId());
+ }
+ } catch (RemoteException ex) {
+ // This could happen if binder process crashes.
+ }
+ return null;
+ }
+
+ /**
* Return the application ID for the uicc application type like {@link #APPTYPE_CSIM}.
* All uicc applications are uniquely identified by application ID. See ETSI 102.221 and 101.220
* <p>Requires Permission:
@@ -8773,4 +8883,168 @@
return isEnabled;
}
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true, prefix = {"NETWORK_TYPE_BITMASK_"},
+ value = {NETWORK_TYPE_BITMASK_UNKNOWN,
+ NETWORK_TYPE_BITMASK_GSM,
+ NETWORK_TYPE_BITMASK_GPRS,
+ NETWORK_TYPE_BITMASK_EDGE,
+ NETWORK_TYPE_BITMASK_CDMA,
+ NETWORK_TYPE_BITMASK_1xRTT,
+ NETWORK_TYPE_BITMASK_EVDO_0,
+ NETWORK_TYPE_BITMASK_EVDO_A,
+ NETWORK_TYPE_BITMASK_EVDO_B,
+ NETWORK_TYPE_BITMASK_EHRPD,
+ NETWORK_TYPE_BITMASK_HSUPA,
+ NETWORK_TYPE_BITMASK_HSDPA,
+ NETWORK_TYPE_BITMASK_HSPA,
+ NETWORK_TYPE_BITMASK_HSPAP,
+ NETWORK_TYPE_BITMASK_UMTS,
+ NETWORK_TYPE_BITMASK_TD_SCDMA,
+ NETWORK_TYPE_BITMASK_LTE,
+ NETWORK_TYPE_BITMASK_LTE_CA,
+ })
+ public @interface NetworkTypeBitMask {}
+
+ // 2G
+ /**
+ * network type bitmask unknown.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_UNKNOWN = (1 << NETWORK_TYPE_UNKNOWN);
+ /**
+ * network type bitmask indicating the support of radio tech GSM.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_GSM = (1 << NETWORK_TYPE_GSM);
+ /**
+ * network type bitmask indicating the support of radio tech GPRS.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_GPRS = (1 << NETWORK_TYPE_GPRS);
+ /**
+ * network type bitmask indicating the support of radio tech EDGE.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_EDGE = (1 << NETWORK_TYPE_EDGE);
+ /**
+ * network type bitmask indicating the support of radio tech CDMA(IS95A/IS95B).
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_CDMA = (1 << NETWORK_TYPE_CDMA);
+ /**
+ * network type bitmask indicating the support of radio tech 1xRTT.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_1xRTT = (1 << NETWORK_TYPE_1xRTT);
+ // 3G
+ /**
+ * network type bitmask indicating the support of radio tech EVDO 0.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_EVDO_0 = (1 << NETWORK_TYPE_EVDO_0);
+ /**
+ * network type bitmask indicating the support of radio tech EVDO A.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_EVDO_A = (1 << NETWORK_TYPE_EVDO_A);
+ /**
+ * network type bitmask indicating the support of radio tech EVDO B.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_EVDO_B = (1 << NETWORK_TYPE_EVDO_B);
+ /**
+ * network type bitmask indicating the support of radio tech EHRPD.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_EHRPD = (1 << NETWORK_TYPE_EHRPD);
+ /**
+ * network type bitmask indicating the support of radio tech HSUPA.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_HSUPA = (1 << NETWORK_TYPE_HSUPA);
+ /**
+ * network type bitmask indicating the support of radio tech HSDPA.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_HSDPA = (1 << NETWORK_TYPE_HSDPA);
+ /**
+ * network type bitmask indicating the support of radio tech HSPA.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_HSPA = (1 << NETWORK_TYPE_HSPA);
+ /**
+ * network type bitmask indicating the support of radio tech HSPAP.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_HSPAP = (1 << NETWORK_TYPE_HSPAP);
+ /**
+ * network type bitmask indicating the support of radio tech UMTS.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_UMTS = (1 << NETWORK_TYPE_UMTS);
+ /**
+ * network type bitmask indicating the support of radio tech TD_SCDMA.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_TD_SCDMA = (1 << NETWORK_TYPE_TD_SCDMA);
+ // 4G
+ /**
+ * network type bitmask indicating the support of radio tech LTE.
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_LTE = (1 << NETWORK_TYPE_LTE);
+ /**
+ * network type bitmask indicating the support of radio tech LTE CA (carrier aggregation).
+ * @hide
+ */
+ @SystemApi
+ public static final int NETWORK_TYPE_BITMASK_LTE_CA = (1 << NETWORK_TYPE_LTE_CA);
+
+ /**
+ * @return Modem supported radio access family bitmask {@link NetworkTypeBitMask}
+ *
+ * <p>Requires permission: {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} or
+ * that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ public @NetworkTypeBitMask int getSupportedRadioAccessFamily() {
+ try {
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.getRadioAccessFamily(getSlotIndex(), getOpPackageName());
+ } else {
+ // This can happen when the ITelephony interface is not up yet.
+ return NETWORK_TYPE_BITMASK_UNKNOWN;
+ }
+ } catch (RemoteException ex) {
+ // This shouldn't happen in the normal case
+ return NETWORK_TYPE_BITMASK_UNKNOWN;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return NETWORK_TYPE_BITMASK_UNKNOWN;
+ }
+ }
+
}
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index ed14f91..e1cb7cc 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -1184,6 +1184,16 @@
}
/**
+ * @param apnType APN type
+ * @return APN type in string format
+ * @hide
+ */
+ public static String getApnTypeString(int apnType) {
+ String apnTypeString = APN_TYPE_INT_MAP.get(apnType);
+ return apnTypeString == null ? "Unknown" : apnTypeString;
+ }
+
+ /**
* @param types comma delimited list of APN types.
* @return bitmask of APN types.
* @hide
diff --git a/telephony/java/android/telephony/data/IQualifiedNetworksServiceCallback.aidl b/telephony/java/android/telephony/data/IQualifiedNetworksServiceCallback.aidl
index e8e1f01..32ffdbc 100644
--- a/telephony/java/android/telephony/data/IQualifiedNetworksServiceCallback.aidl
+++ b/telephony/java/android/telephony/data/IQualifiedNetworksServiceCallback.aidl
@@ -22,5 +22,5 @@
*/
oneway interface IQualifiedNetworksServiceCallback
{
- void onQualifiedNetworkTypesChanged(int apnType, in int[] qualifiedNetworkTypesList);
+ void onQualifiedNetworkTypesChanged(int apnTypes, in int[] qualifiedNetworkTypes);
}
diff --git a/telephony/java/android/telephony/data/QualifiedNetworksService.java b/telephony/java/android/telephony/data/QualifiedNetworksService.java
index bb89f19..57d9cce 100644
--- a/telephony/java/android/telephony/data/QualifiedNetworksService.java
+++ b/telephony/java/android/telephony/data/QualifiedNetworksService.java
@@ -121,27 +121,28 @@
/**
* Update the qualified networks list. Network availability updater must invoke this method
* whenever the qualified networks changes. If this method is never invoked for certain
- * APN type, then frameworks will always use the default (i.e. cellular) data and network
+ * APN types, then frameworks will always use the default (i.e. cellular) data and network
* service.
*
- * @param apnType APN type of the qualified networks
+ * @param apnTypes APN types of the qualified networks. This must be a bitmask combination
+ * of {@link ApnSetting.ApnType}.
* @param qualifiedNetworkTypes List of network types which are qualified for data
* connection setup for {@link @apnType} in the preferred order. Each element in the array
* is a {@link AccessNetworkType}. An empty list or null indicates no networks are qualified
* for data setup.
*/
- public final void updateQualifiedNetworkTypes(@ApnType int apnType,
+ public final void updateQualifiedNetworkTypes(@ApnType int apnTypes,
int[] qualifiedNetworkTypes) {
- mHandler.obtainMessage(QNS_UPDATE_QUALIFIED_NETWORKS, mSlotIndex, apnType,
+ mHandler.obtainMessage(QNS_UPDATE_QUALIFIED_NETWORKS, mSlotIndex, apnTypes,
qualifiedNetworkTypes).sendToTarget();
}
- private void onUpdateQualifiedNetworkTypes(@ApnType int apnType,
+ private void onUpdateQualifiedNetworkTypes(@ApnType int apnTypes,
int[] qualifiedNetworkTypes) {
- mQualifiedNetworkTypesList.put(apnType, qualifiedNetworkTypes);
+ mQualifiedNetworkTypesList.put(apnTypes, qualifiedNetworkTypes);
if (mCallback != null) {
try {
- mCallback.onQualifiedNetworkTypesChanged(apnType, qualifiedNetworkTypes);
+ mCallback.onQualifiedNetworkTypesChanged(apnTypes, qualifiedNetworkTypes);
} catch (RemoteException e) {
loge("Failed to call onQualifiedNetworksChanged. " + e);
}
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index 89ef339..f73036e 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -16,17 +16,20 @@
package android.telephony.ims;
+import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.PersistableBundle;
import android.telecom.VideoProfile;
import android.util.Log;
import com.android.internal.telephony.PhoneConstants;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* Parcelable object to handle IMS call profile.
* It is created from GSMA IR.92/IR.94, 3GPP TS 24.229/TS 26.114/TS26.111.
@@ -206,17 +209,36 @@
public static final int DIALSTRING_USSD = 2;
/**
- * Values for causes that restrict call types
+ * Call is not restricted on peer side and High Definition media is supported
*/
- // Default cause not restricted at peer and HD is supported
public static final int CALL_RESTRICT_CAUSE_NONE = 0;
- // Service not supported by RAT at peer
+
+ /**
+ * High Definition media is not supported on the peer side due to the Radio Access Technology
+ * (RAT) it is are connected to.
+ */
public static final int CALL_RESTRICT_CAUSE_RAT = 1;
- // Service Disabled at peer
+
+ /**
+ * The service has been disabled on the peer side.
+ */
public static final int CALL_RESTRICT_CAUSE_DISABLED = 2;
- // HD is not supported
+
+ /**
+ * High definition media is not currently supported.
+ */
public static final int CALL_RESTRICT_CAUSE_HD = 3;
+ /**@hide*/
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = "CALL_RESTRICT_CAUSE_", value = {
+ CALL_RESTRICT_CAUSE_NONE,
+ CALL_RESTRICT_CAUSE_RAT,
+ CALL_RESTRICT_CAUSE_DISABLED,
+ CALL_RESTRICT_CAUSE_HD
+ })
+ public @interface CallRestrictCause {}
+
/**
* String extra properties
* oi : Originating identity (number), MT only
@@ -270,7 +292,7 @@
public int mCallType;
/** @hide */
@UnsupportedAppUsage
- public int mRestrictCause = CALL_RESTRICT_CAUSE_NONE;
+ public @CallRestrictCause int mRestrictCause = CALL_RESTRICT_CAUSE_NONE;
/**
* Extras associated with this {@link ImsCallProfile}.
@@ -285,7 +307,7 @@
* <li>{@code long[]}</li>
* <li>{@code double[]}</li>
* <li>{@code String[]}</li>
- * <li>{@link PersistableBundle}</li>
+ * <li>{@link android.os.PersistableBundle}</li>
* <li>{@link Boolean} (and boolean)</li>
* <li>{@code boolean[]}</li>
* <li>Other {@link Parcelable} classes in the {@code android.*} namespace.</li>
@@ -426,6 +448,14 @@
}
}
+ /**
+ * Set the call restrict cause, which provides the reason why a call has been restricted from
+ * using High Definition media.
+ */
+ public void setCallRestrictCause(@CallRestrictCause int cause) {
+ mRestrictCause = cause;
+ }
+
public void updateCallType(ImsCallProfile profile) {
mCallType = profile.mCallType;
}
@@ -494,7 +524,11 @@
return mCallType;
}
- public int getRestrictCause() {
+ /**
+ * @return The call restrict cause, which provides the reason why a call has been restricted
+ * from using High Definition media.
+ */
+ public @CallRestrictCause int getRestrictCause() {
return mRestrictCause;
}
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 84c2a5d..4b9b0fb 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -638,15 +638,30 @@
boolean nvWriteCdmaPrl(in byte[] preferredRoamingList);
/**
- * Perform the specified type of NV config reset. The radio will be taken offline
- * and the device must be rebooted after the operation. Used for device
- * configuration by some CDMA operators.
+ * Rollback modem configurations to factory default except some config which are in whitelist.
+ * Used for device configuration by some CDMA operators.
*
- * @param resetType the type of reset to perform (1 == factory reset; 2 == NV-only reset).
- * @return true on success; false on any failure.
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling
+ * app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ *
+ * @param slotIndex - device slot.
+ * @return {@code true} on success; {@code false} on any failure.
*/
- boolean nvResetConfig(int resetType);
+ boolean resetModemConfig(int slotIndex);
+ /**
+ * Generate a radio modem reset. Used for device configuration by some CDMA operators.
+ * Different than {@link #setRadioPower(boolean)}, modem reboot will power down sim card.
+ *
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling
+ * app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ *
+ * @param slotIndex - device slot.
+ * @return {@code true} on success; {@code false} on any failure.
+ */
+ boolean rebootModem(int slotIndex);
/*
* Get the calculated preferred network type.
* Used for device configuration by some CDMA operators.
@@ -667,7 +682,7 @@
/**
* Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
- * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for
+ * SystemProperty to decide whether DUN APN is required for
* tethering.
*
* @return 0: Not required. 1: required. 2: Not set.
@@ -1038,6 +1053,8 @@
*/
boolean isTtyModeSupported();
+ boolean isRttSupported(int subscriptionId);
+
/**
* Whether the phone supports hearing aid compatibility.
*
@@ -1600,4 +1617,9 @@
* return true if TTY over VoLTE is enabled for the subscription specified.
*/
boolean isTtyOverVolteEnabled(int subId);
+
+ /**
+ * Return a list of certs in hex string from loaded carrier privileges access rules.
+ */
+ List<String> getCertsFromCarrierPrivilegeAccessRules(int subId);
}
diff --git a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
index 06378ba..3822cbe 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
@@ -269,6 +269,27 @@
}
/**
+ * Ensure the caller (or self, if not processing an IPC) has
+ * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} or carrier privileges.
+ *
+ * @throws SecurityException if the caller does not have the required permission/privileges
+ */
+ public static void enforeceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
+ Context context, int subId, String message) {
+ if (context.checkCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ == PERMISSION_GRANTED) {
+ return;
+ }
+
+ if (DBG) {
+ Rlog.d(LOG_TAG, "No READ_PRIVILEDED_PHONE_STATE permission, " +
+ "check carrier privilege next.");
+ }
+
+ enforceCallingOrSelfCarrierPrivilege(subId, message);
+ }
+
+ /**
* Make sure the caller (or self, if not processing an IPC) has carrier privileges.
*
* @throws SecurityException if the caller does not have the required privileges
diff --git a/tests/net/java/android/net/NetworkStatsTest.java b/tests/net/java/android/net/NetworkStatsTest.java
index 8f18d07..d6dbf5a 100644
--- a/tests/net/java/android/net/NetworkStatsTest.java
+++ b/tests/net/java/android/net/NetworkStatsTest.java
@@ -39,6 +39,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import android.net.NetworkStats.Entry;
import android.os.Process;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.filters.SmallTest;
@@ -785,7 +786,38 @@
ArrayMap<String, String> stackedIface = new ArrayMap<>();
stackedIface.put(v4Iface, baseIface);
- NetworkStats.Entry otherEntry = new NetworkStats.Entry(
+ // Ipv4 traffic sent/received by an app on stacked interface.
+ final NetworkStats.Entry appEntry = new NetworkStats.Entry(
+ v4Iface, appUid, SET_DEFAULT, TAG_NONE,
+ 30501490 /* rxBytes */,
+ 22401 /* rxPackets */,
+ 876235 /* txBytes */,
+ 13805 /* txPackets */,
+ 0 /* operations */);
+
+ // Traffic measured for the root uid on the base interface if eBPF is in use.
+ // Incorrectly includes appEntry's bytes and packets, plus IPv4-IPv6 translation
+ // overhead (20 bytes per packet), only for TX traffic.
+ final NetworkStats.Entry ebpfRootUidEntry = new NetworkStats.Entry(
+ baseIface, rootUid, SET_DEFAULT, TAG_NONE,
+ 163577 /* rxBytes */,
+ 187 /* rxPackets */,
+ 1169942 /* txBytes */,
+ 13902 /* txPackets */,
+ 0 /* operations */);
+
+ // Traffic measured for the root uid on the base interface if xt_qtaguid is in use.
+ // Incorrectly includes appEntry's bytes and packets, plus IPv4-IPv6 translation
+ // overhead (20 bytes per packet), in both directions.
+ final NetworkStats.Entry xtRootUidEntry = new NetworkStats.Entry(
+ baseIface, rootUid, SET_DEFAULT, TAG_NONE,
+ 31113087 /* rxBytes */,
+ 22588 /* rxPackets */,
+ 1169942 /* txBytes */,
+ 13902 /* txPackets */,
+ 0 /* operations */);
+
+ final NetworkStats.Entry otherEntry = new NetworkStats.Entry(
otherIface, appUid, SET_DEFAULT, TAG_NONE,
2600 /* rxBytes */,
2 /* rxPackets */,
@@ -793,39 +825,41 @@
3 /* txPackets */,
0 /* operations */);
- NetworkStats stats = new NetworkStats(TEST_START, 3)
- .addValues(v4Iface, appUid, SET_DEFAULT, TAG_NONE,
- 30501490 /* rxBytes */,
- 22401 /* rxPackets */,
- 876235 /* txBytes */,
- 13805 /* txPackets */,
- 0 /* operations */)
- .addValues(baseIface, rootUid, SET_DEFAULT, TAG_NONE,
- 31113087,
- 22588,
- 1169942,
- 13902,
- 0)
+ final NetworkStats statsXt = new NetworkStats(TEST_START, 3)
+ .addValues(appEntry)
+ .addValues(xtRootUidEntry)
.addValues(otherEntry);
- stats.apply464xlatAdjustments(stackedIface);
+ final NetworkStats statsEbpf = new NetworkStats(TEST_START, 3)
+ .addValues(appEntry)
+ .addValues(ebpfRootUidEntry)
+ .addValues(otherEntry);
- assertEquals(3, stats.size());
- assertValues(stats, 0, v4Iface, appUid, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO,
+ statsXt.apply464xlatAdjustments(stackedIface, false);
+ statsEbpf.apply464xlatAdjustments(stackedIface, true);
+
+ assertEquals(3, statsXt.size());
+ assertEquals(3, statsEbpf.size());
+ final NetworkStats.Entry expectedAppUid = new NetworkStats.Entry(
+ v4Iface, appUid, SET_DEFAULT, TAG_NONE,
30949510,
22401,
1152335,
13805,
0);
- assertValues(stats, 1, baseIface, 0, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO,
+ final NetworkStats.Entry expectedRootUid = new NetworkStats.Entry(
+ baseIface, 0, SET_DEFAULT, TAG_NONE,
163577,
187,
17607,
97,
0);
- assertEquals(otherEntry, stats.getValues(2, null));
+ assertEquals(expectedAppUid, statsXt.getValues(0, null));
+ assertEquals(expectedRootUid, statsXt.getValues(1, null));
+ assertEquals(otherEntry, statsXt.getValues(2, null));
+ assertEquals(expectedAppUid, statsEbpf.getValues(0, null));
+ assertEquals(expectedRootUid, statsEbpf.getValues(1, null));
+ assertEquals(otherEntry, statsEbpf.getValues(2, null));
}
@Test
@@ -850,7 +884,7 @@
.addValues(secondEntry);
// Empty map: no adjustment
- stats.apply464xlatAdjustments(new ArrayMap<>());
+ stats.apply464xlatAdjustments(new ArrayMap<>(), false);
assertEquals(2, stats.size());
assertEquals(firstEntry, stats.getValues(0, null));
diff --git a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
index 4dc63f2..f12756a 100644
--- a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
+++ b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java
@@ -25,6 +25,7 @@
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_PRODUCT;
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_VENDOR;
import static android.content.pm.PackageManager.GET_PERMISSIONS;
+import static android.os.Process.SYSTEM_UID;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -55,26 +56,41 @@
private static final String PARTITION_OEM = "oem";
private static final String PARTITION_PRODUCT = "product";
private static final String PARTITION_VENDOR = "vendor";
+ private static final int VERSION_P = Build.VERSION_CODES.P;
+ private static final int VERSION_Q = Build.VERSION_CODES.Q;
@Mock private Context mContext;
@Mock private PackageManager mPackageManager;
private PermissionMonitor mPermissionMonitor;
+ private int mMockFirstSdkInt;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
- when(mPackageManager.getPackagesForUid(MOCK_UID)).thenReturn(MOCK_PACKAGE_NAMES);
- mPermissionMonitor = new PermissionMonitor(mContext, null);
+ when(mPackageManager.getPackagesForUid(anyInt())).thenReturn(MOCK_PACKAGE_NAMES);
+ // Try to use spy() here for stubbing getDeviceFirstSdkInt value but the spies are loaded
+ // by a custom class loader that's different from the loader used for loading the real
+ // thing. That means those two classes are not in the same package, so a package private
+ // method is not accessible. Hence, using override method to control FIRST_SDK_INT value
+ // instead of spy function for testing.
+ mPermissionMonitor = new PermissionMonitor(mContext, null) {
+ @Override
+ int getDeviceFirstSdkInt() {
+ return mMockFirstSdkInt;
+ }
+ };
}
- private void expectPermission(String[] permissions, String partition,
- int targetSdkVersion) throws Exception {
- final PackageInfo packageInfo = packageInfoWithPermissions(permissions, partition);
+ private boolean hasBgPermission(String partition, int targetSdkVersion, int uid,
+ String... permission) throws Exception {
+ final PackageInfo packageInfo = packageInfoWithPermissions(permission, partition);
packageInfo.applicationInfo.targetSdkVersion = targetSdkVersion;
+ packageInfo.applicationInfo.uid = uid;
when(mPackageManager.getPackageInfoAsUser(
eq(MOCK_PACKAGE_NAMES[0]), eq(GET_PERMISSIONS), anyInt())).thenReturn(packageInfo);
+ return mPermissionMonitor.hasUseBackgroundNetworksPermission(uid);
}
private PackageInfo packageInfoWithPermissions(String[] permissions, String partition) {
@@ -136,51 +152,44 @@
@Test
public void testHasUseBackgroundNetworksPermission() throws Exception {
- expectPermission(new String[] { CHANGE_NETWORK_STATE },
- PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { NETWORK_STACK }, PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CONNECTIVITY_INTERNAL },
- PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CONNECTIVITY_USE_RESTRICTED_NETWORKS },
- PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID, CHANGE_NETWORK_STATE));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID, NETWORK_STACK));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID, CONNECTIVITY_INTERNAL));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID,
+ CONNECTIVITY_USE_RESTRICTED_NETWORKS));
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_P, MOCK_UID, CHANGE_WIFI_STATE));
- expectPermission(new String[] { CHANGE_NETWORK_STATE },
- PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { NETWORK_STACK },
- PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CONNECTIVITY_INTERNAL },
- PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CONNECTIVITY_USE_RESTRICTED_NETWORKS },
- PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_Q, MOCK_UID));
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_Q, MOCK_UID, CHANGE_WIFI_STATE));
+ }
- expectPermission(new String[] {}, PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CHANGE_WIFI_STATE },
- PARTITION_SYSTEM, Build.VERSION_CODES.P);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] {}, PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CHANGE_WIFI_STATE },
- PARTITION_VENDOR, Build.VERSION_CODES.P);
- assertTrue(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
+ @Test
+ public void testHasUseBackgroundNetworksPermissionSystemUid() throws Exception {
+ mMockFirstSdkInt = VERSION_P;
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, SYSTEM_UID));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, SYSTEM_UID, CHANGE_WIFI_STATE));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_P, SYSTEM_UID,
+ CONNECTIVITY_USE_RESTRICTED_NETWORKS));
- expectPermission(new String[] {}, PARTITION_SYSTEM, Build.VERSION_CODES.Q);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CHANGE_WIFI_STATE },
- PARTITION_SYSTEM, Build.VERSION_CODES.Q);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] {}, PARTITION_VENDOR, Build.VERSION_CODES.Q);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
- expectPermission(new String[] { CHANGE_WIFI_STATE },
- PARTITION_VENDOR, Build.VERSION_CODES.Q);
- assertFalse(mPermissionMonitor.hasUseBackgroundNetworksPermission(MOCK_UID));
+ mMockFirstSdkInt = VERSION_Q;
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_Q, SYSTEM_UID));
+ assertFalse(hasBgPermission(PARTITION_SYSTEM, VERSION_Q, SYSTEM_UID, CHANGE_WIFI_STATE));
+ assertTrue(hasBgPermission(PARTITION_SYSTEM, VERSION_Q, SYSTEM_UID,
+ CONNECTIVITY_USE_RESTRICTED_NETWORKS));
+ }
+
+ @Test
+ public void testHasUseBackgroundNetworksPermissionVendorApp() throws Exception {
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID));
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID, CHANGE_NETWORK_STATE));
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID, NETWORK_STACK));
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID, CONNECTIVITY_INTERNAL));
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID,
+ CONNECTIVITY_USE_RESTRICTED_NETWORKS));
+ assertTrue(hasBgPermission(PARTITION_VENDOR, VERSION_P, MOCK_UID, CHANGE_WIFI_STATE));
+
+ assertFalse(hasBgPermission(PARTITION_VENDOR, VERSION_Q, MOCK_UID));
+ assertFalse(hasBgPermission(PARTITION_VENDOR, VERSION_Q, MOCK_UID, CHANGE_WIFI_STATE));
}
}