diff options
103 files changed, 1067 insertions, 1744 deletions
diff --git a/api/current.txt b/api/current.txt index d9d61b5dbeed..84f209c4b89f 100755 --- a/api/current.txt +++ b/api/current.txt @@ -27855,7 +27855,7 @@ package android.net { method public android.os.ParcelFileDescriptor establish(); method public android.net.VpnService.Builder setBlocking(boolean); method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); - method public android.net.VpnService.Builder setHttpProxy(android.net.ProxyInfo); + method public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo); method public android.net.VpnService.Builder setMetered(boolean); method public android.net.VpnService.Builder setMtu(int); method public android.net.VpnService.Builder setSession(String); diff --git a/api/system-current.txt b/api/system-current.txt index cb2434b05a6f..8b3b3057d049 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6359,7 +6359,7 @@ package android.telephony { method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState(); method public int getSimApplicationState(); method public int getSimCardState(); - method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getSimLocale(); + method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Locale getSimLocale(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.UiccSlotInfo[] getUiccSlotsInfo(); @@ -7259,12 +7259,12 @@ package android.telephony.ims { method public int describeContents(); method public int getAudioDirection(); method public int getAudioQuality(); - method public boolean getRttAudioSpeech(); method public int getRttMode(); method public int getVideoDirection(); method public int getVideoQuality(); + method public boolean isReceivingRttAudio(); method public boolean isRttCall(); - method public void setRttAudioSpeech(boolean); + method public void setReceivingRttAudio(boolean); method public void setRttMode(int); method public void writeToParcel(android.os.Parcel, int); field public static final int AUDIO_QUALITY_AMR = 1; // 0x1 @@ -7667,7 +7667,7 @@ package android.telephony.mbms { package android.telephony.mbms.vendor { - public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface { + public class MbmsDownloadServiceBase extends android.os.Binder { ctor public MbmsDownloadServiceBase(); method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException; method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException; @@ -7700,7 +7700,7 @@ package android.telephony.mbms.vendor { method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>); } - public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface { + public class MbmsStreamingServiceBase extends android.os.Binder { ctor public MbmsStreamingServiceBase(); method public android.os.IBinder asBinder(); method public void dispose(int) throws android.os.RemoteException; diff --git a/api/test-current.txt b/api/test-current.txt index 62ef0b013cb9..400046bad74a 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1519,7 +1519,7 @@ package android.telephony.mbms { package android.telephony.mbms.vendor { - public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface { + public class MbmsDownloadServiceBase extends android.os.Binder { ctor public MbmsDownloadServiceBase(); method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException; method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException; @@ -1552,7 +1552,7 @@ package android.telephony.mbms.vendor { method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>); } - public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface { + public class MbmsStreamingServiceBase extends android.os.Binder { ctor public MbmsStreamingServiceBase(); method public android.os.IBinder asBinder(); method public void dispose(int) throws android.os.RemoteException; diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 784f23311103..ebb1ae4bb795 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -19,6 +19,7 @@ package android.net; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET6; +import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; @@ -512,7 +513,7 @@ public class VpnService extends Service { * Sets an HTTP proxy for the VPN network. This proxy is only a recommendation * and it is possible that some apps will ignore it. */ - public Builder setHttpProxy(ProxyInfo proxyInfo) { + public Builder setHttpProxy(@NonNull ProxyInfo proxyInfo) { mConfig.proxyInfo = proxyInfo; return this; } diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java index 42e8aa6dc248..a43dc60cec84 100644 --- a/core/java/android/net/metrics/ValidationProbeEvent.java +++ b/core/java/android/net/metrics/ValidationProbeEvent.java @@ -79,7 +79,7 @@ public final class ValidationProbeEvent implements IpConnectivityLog.Event { } /** - * Utility to create an instance of {@link ApfProgramEvent}. + * Utility to create an instance of {@link ValidationProbeEvent}. */ public static class Builder { private long mDurationMs; diff --git a/core/jni/Android.bp b/core/jni/Android.bp index c385ca11611c..f9813fdb65ab 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -290,6 +290,7 @@ cc_library_shared { "libhwui", "libdl", "libstatslog", + "server_configurable_flags", ], generated_sources: ["android_util_StatsLog.cpp"], diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 565fa6f63120..388285a5687f 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -31,6 +31,7 @@ #include <binder/Parcel.h> #include <utils/threads.h> #include <cutils/properties.h> +#include <server_configurable_flags/get_flags.h> #include <SkGraphics.h> @@ -219,6 +220,23 @@ extern int register_com_android_internal_os_Zygote(JNIEnv *env); extern int register_com_android_internal_os_ZygoteInit(JNIEnv *env); extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); +// Namespace for Android Runtime flags applied during boot time. +static const char* RUNTIME_NATIVE_BOOT_NAMESPACE = "runtime_native_boot"; +// Feature flag name to enable/disable generational garbage collection in ART's +// Concurrent Copying (CC) garbage collector. +static const char* ENABLE_GENERATIONAL_CC = "enable_generational_cc"; +// Runtime option enabling generational garbage collection in ART's Concurrent +// Copying (CC) garbage collector. +static const char* kGenerationalCCRuntimeOption = "-Xgc:generational_cc"; +// Runtime option disabling generational garbage collection in ART's Concurrent +// Copying (CC) garbage collector. +static const char* kNoGenerationalCCRuntimeOption = "-Xgc:nogenerational_cc"; + +// Feature flag name for running the JIT in Zygote experiment, b/119800099. +static const char* ENABLE_APEX_IMAGE = "enable_apex_image"; +// Flag to pass to the runtime when using the apex image. +static const char* kApexImageOption = "-Ximage:/system/framework/apex.art"; + static AndroidRuntime* gCurRuntime = NULL; /* @@ -653,8 +671,17 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote) char jdwpProviderBuf[sizeof("-XjdwpProvider:") - 1 + PROPERTY_VALUE_MAX]; char bootImageBuf[sizeof("-Ximage:") - 1 + PROPERTY_VALUE_MAX]; - if (parseRuntimeOption("dalvik.vm.boot-image", bootImageBuf, "-Ximage:")) { - ALOGI("Boot image: '%s'\n", bootImageBuf); + std::string use_apex_image = + server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, + ENABLE_APEX_IMAGE, + /*default_value=*/ ""); + if (use_apex_image == "true") { + addOption(kApexImageOption); + ALOGI("Using Apex boot image: '%s'\n", kApexImageOption); + } else if (parseRuntimeOption("dalvik.vm.boot-image", bootImageBuf, "-Ximage:")) { + ALOGI("Using dalvik.vm.boot-image: '%s'\n", bootImageBuf); + } else { + ALOGI("Using default boot image"); } bool checkJni = false; @@ -769,7 +796,23 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote) addOption("-XX:LowMemoryMode"); } + /* + * Garbage-collection related options. + */ parseRuntimeOption("dalvik.vm.gctype", gctypeOptsBuf, "-Xgc:"); + + // If it set, honor the "enable_generational_cc" device configuration; + // otherwise, let the runtime use its default behavior. + std::string enable_generational_cc = + server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, + ENABLE_GENERATIONAL_CC, + /*default_value=*/ ""); + if (enable_generational_cc == "true") { + addOption(kGenerationalCCRuntimeOption); + } else if (enable_generational_cc == "false") { + addOption(kNoGenerationalCCRuntimeOption); + } + parseRuntimeOption("dalvik.vm.backgroundgctype", backgroundgcOptsBuf, "-XX:BackgroundGC="); /* diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp index a1f2377041e8..1163b860977d 100644 --- a/core/jni/android_net_LocalSocketImpl.cpp +++ b/core/jni/android_net_LocalSocketImpl.cpp @@ -33,14 +33,16 @@ #include <unistd.h> #include <sys/ioctl.h> +#include <android-base/cmsg.h> +#include <android-base/macros.h> #include <cutils/sockets.h> #include <netinet/tcp.h> #include <nativehelper/ScopedUtfChars.h> -namespace android { +using android::base::ReceiveFileDescriptorVector; +using android::base::SendFileDescriptorVector; -template <typename T> -void UNUSED(T t) {} +namespace android { static jfieldID field_inboundFileDescriptors; static jfieldID field_outboundFileDescriptors; @@ -118,67 +120,6 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor, } /** - * Processes ancillary data, handling only - * SCM_RIGHTS. Creates appropriate objects and sets appropriate - * fields in the LocalSocketImpl object. Returns 0 on success - * or -1 if an exception was thrown. - */ -static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg) -{ - struct cmsghdr *cmsgptr; - - for (cmsgptr = CMSG_FIRSTHDR(pMsg); - cmsgptr != NULL; cmsgptr = CMSG_NXTHDR(pMsg, cmsgptr)) { - - if (cmsgptr->cmsg_level != SOL_SOCKET) { - continue; - } - - if (cmsgptr->cmsg_type == SCM_RIGHTS) { - int *pDescriptors = (int *)CMSG_DATA(cmsgptr); - jobjectArray fdArray; - int count - = ((cmsgptr->cmsg_len - CMSG_LEN(0)) / sizeof(int)); - - if (count < 0) { - jniThrowException(env, "java/io/IOException", - "invalid cmsg length"); - return -1; - } - - fdArray = env->NewObjectArray(count, class_FileDescriptor, NULL); - - if (fdArray == NULL) { - return -1; - } - - for (int i = 0; i < count; i++) { - jobject fdObject - = jniCreateFileDescriptor(env, pDescriptors[i]); - - if (env->ExceptionCheck()) { - return -1; - } - - env->SetObjectArrayElement(fdArray, i, fdObject); - - if (env->ExceptionCheck()) { - return -1; - } - } - - env->SetObjectField(thisJ, field_inboundFileDescriptors, fdArray); - - if (env->ExceptionCheck()) { - return -1; - } - } - } - - return 0; -} - -/** * Reads data from a socket into buf, processing any ancillary data * and adding it to thisJ. * @@ -189,47 +130,48 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd, void *buffer, size_t len) { ssize_t ret; - struct msghdr msg; - struct iovec iv; - unsigned char *buf = (unsigned char *)buffer; - // Enough buffer for a pile of fd's. We throw an exception if - // this buffer is too small. - struct cmsghdr cmsgbuf[2*sizeof(cmsghdr) + 0x100]; - - memset(&msg, 0, sizeof(msg)); - memset(&iv, 0, sizeof(iv)); - - iv.iov_base = buf; - iv.iov_len = len; + std::vector<android::base::unique_fd> received_fds; - msg.msg_iov = &iv; - msg.msg_iovlen = 1; - msg.msg_control = cmsgbuf; - msg.msg_controllen = sizeof(cmsgbuf); - - ret = TEMP_FAILURE_RETRY(recvmsg(fd, &msg, MSG_NOSIGNAL | MSG_CMSG_CLOEXEC)); - - if (ret < 0 && errno == EPIPE) { - // Treat this as an end of stream - return 0; - } + ret = ReceiveFileDescriptorVector(fd, buffer, len, 64, &received_fds); if (ret < 0) { + if (errno == EPIPE) { + // Treat this as an end of stream + return 0; + } + jniThrowIOException(env, errno); return -1; } - if ((msg.msg_flags & (MSG_CTRUNC | MSG_OOB | MSG_ERRQUEUE)) != 0) { - // To us, any of the above flags are a fatal error + if (received_fds.size() > 0) { + jobjectArray fdArray = env->NewObjectArray(received_fds.size(), class_FileDescriptor, NULL); + + if (fdArray == NULL) { + // NewObjectArray has thrown. + return -1; + } - jniThrowException(env, "java/io/IOException", - "Unexpected error or truncation during recvmsg()"); + for (size_t i = 0; i < received_fds.size(); i++) { + jobject fdObject = jniCreateFileDescriptor(env, received_fds[i].get()); - return -1; - } + if (env->ExceptionCheck()) { + return -1; + } + + env->SetObjectArrayElement(fdArray, i, fdObject); + + if (env->ExceptionCheck()) { + return -1; + } + } - if (ret >= 0) { - socket_process_cmsg(env, thisJ, &msg); + for (auto &fd : received_fds) { + // The fds are stored in java.io.FileDescriptors now. + static_cast<void>(fd.release()); + } + + env->SetObjectField(thisJ, field_inboundFileDescriptors, fdArray); } return ret; @@ -243,7 +185,6 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd, static int socket_write_all(JNIEnv *env, jobject object, int fd, void *buf, size_t len) { - ssize_t ret; struct msghdr msg; unsigned char *buffer = (unsigned char *)buf; memset(&msg, 0, sizeof(msg)); @@ -256,14 +197,11 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd, return -1; } - struct cmsghdr *cmsg; int countFds = outboundFds == NULL ? 0 : env->GetArrayLength(outboundFds); - int fds[countFds]; - char msgbuf[CMSG_SPACE(countFds)]; + std::vector<int> fds; // Add any pending outbound file descriptors to the message if (outboundFds != NULL) { - if (env->ExceptionCheck()) { return -1; } @@ -274,47 +212,25 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd, return -1; } - fds[i] = jniGetFDFromFileDescriptor(env, fdObject); + fds.push_back(jniGetFDFromFileDescriptor(env, fdObject)); if (env->ExceptionCheck()) { return -1; } } - - // See "man cmsg" really - msg.msg_control = msgbuf; - msg.msg_controllen = sizeof msgbuf; - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN(sizeof fds); - memcpy(CMSG_DATA(cmsg), fds, sizeof fds); } - // We only write our msg_control during the first write - while (len > 0) { - struct iovec iv; - memset(&iv, 0, sizeof(iv)); - - iv.iov_base = buffer; - iv.iov_len = len; - - msg.msg_iov = &iv; - msg.msg_iovlen = 1; - - do { - ret = sendmsg(fd, &msg, MSG_NOSIGNAL); - } while (ret < 0 && errno == EINTR); + ssize_t rc = SendFileDescriptorVector(fd, buffer, len, fds); - if (ret < 0) { + while (rc != len) { + if (rc == -1) { jniThrowIOException(env, errno); return -1; } - buffer += ret; - len -= ret; + buffer += rc; + len -= rc; - // Wipes out any msg_control too - memset(&msg, 0, sizeof(msg)); + rc = send(fd, buffer, len, MSG_NOSIGNAL); } return 0; diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index bc1332adacbc..8216b616915c 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -892,6 +892,8 @@ static pid_t ForkCommon(JNIEnv* env, bool is_system_server, // Turn fdsan back on. android_fdsan_set_error_level(fdsan_error_level); + } else { + ALOGD("Forked child process %d", pid); } // We blocked SIGCHLD prior to a fork, we unblock it here. diff --git a/core/jni/runtime_native_boot-flags-test.sh b/core/jni/runtime_native_boot-flags-test.sh new file mode 100755 index 000000000000..01f37f07e5ca --- /dev/null +++ b/core/jni/runtime_native_boot-flags-test.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +# Copyright (C) 2019 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Test Android Runtime (Boot) device configuration flags (living in namespace +# `runtime_native_boot`). + +me=$(basename $0) + +# Namespace containing the tested flag. +namespace=runtime_native_boot +# Default set of checked zygote processes. +zygotes= + +# Status of whole test script. +exit_status=0 + +function say { + echo "$me: $*" +} + +function banner { + local separator=$(echo "$@" | sed s/./=/g ) + say "$separator" + say "$@" + say "$separator" +} + +function fail { + say "FAILED: $@" + exit_status=1 +} + +function reboot_and_wait_for_device { + say "Rebooting device..." + adb reboot + adb wait-for-device >/dev/null + # Wait until the device has finished booting. Give the device 60 iterations + # (~60 seconds) to try and finish booting before declaring defeat. + local niters=60 + for i in $(seq $niters); do + [[ $(adb shell getprop sys.boot_completed) -eq 1 ]] && return 0 + sleep 1 + done + fail "Device did not finish booting before timeout (~$niters seconds)" +} + +# check_device_config_flag CONTEXT FLAG VALUE +# ------------------------------------------- +# Check that the device configuration flag FLAG is set to VALUE. Use CONTEXT in +# logging. +function check_device_config_flag { + local context=$1 + local flag=$2 + local value=$3 + + say "[$context] Check that the device configuration flag is set..." + local flag_value=$(adb shell device_config get "$namespace" "$flag") + [[ "$flag_value" = "$value" ]] \ + || fail "Device configuration flag \`$flag\` set to \`$flag_value\` (expected \`$value\`)" +} + +# check_no_device_config_flag CONTEXT FLAG +# ---------------------------------------- +# Check that the device configuration flag FLAG is not set. Use CONTEXT in +# logging. +function check_no_device_config_flag { + local context=$1 + local flag=$2 + + say "[$context] Check that the device configuration flag is not set..." + local flag_value=$(adb shell device_config get "$namespace" "$flag") + [[ "$flag_value" = null ]] \ + || fail "Device configuration flag \`$flag\` set to \`$flag_value\` (expected `null`)" +} + +# get_system_property PROP +# ------------------------ +# Get system property PROP associated with a device configuration flag. +function get_system_property { + local prop=$1 + + # Note that we need to be root to read that system property. + adb root >/dev/null + local prop_value=$(adb shell getprop "$prop") + adb unroot >/dev/null + echo "$prop_value" +} + +# check_system_property CONTEXT PROP VALUE +# ---------------------------------------- +# Check that the system property PROP associated with a device configuration +# flag is set to VALUE. Use CONTEXT in logging. +function check_system_property { + local context=$1 + local prop=$2 + local value=$3 + + say "[$context] Check that the persistent system property is set..." + local prop_value=$(get_system_property "$prop") + [[ "$prop_value" = "$value" ]] \ + || fail "System property \`$prop\` set to \`$prop_value\` (expected \`$value\`)" +} + +# check_no_system_property CONTEXT PROP +# ------------------------------------- +# Check that the system property PROP associated with a device configuration +# flag is not set. Use CONTEXT in logging. +function check_no_system_property { + local context=$1 + local prop=$2 + + say "[$context] Check that the persistent system property is not set..." + local prop_value=$(get_system_property "$prop") + [[ -z "$prop_value" ]] \ + || fail "System property \`$prop\` set to \`$prop_value\` (expected unset property)" +} + +# find_zygote_runtime_option ZYGOTE RUNTIME_OPTION +# ------------------------------------------------ +# Return whether ZYGOTE is passed RUNTIME_OPTION. +function find_zygote_runtime_option { + local zygote=$1 + local runtime_option=$2 + + adb logcat -d -s "$zygote" | grep -q -e "option\[[0-9]\+\]=$runtime_option" +} + +# check_zygote_gc_runtime_option CONTEXT VALUE +# -------------------------------------------- +# Check that all zygote processes are passed device configuration flag VALUE as +# GC runtime option. Use CONTEXT in logging. +function check_zygote_gc_runtime_option { + local context=$1 + local value=$2 + + say \ + "[$context] Check that all zygote processes are passed the flag value as a GC runtime option..." + local runtime_option="-Xgc:$value" + for zygote in $zygotes; do + find_zygote_runtime_option "$zygote" "$runtime_option"\ + || fail "Found no \`$runtime_option\` among runtime options passed to \`$zygote\`" + done +} + +# check_no_zygote_gc_runtime_option CONTEXT VALUE +# ----------------------------------------------- +# Check that no zygote process is passed device configuration flag VALUE as GC +# runtime option. Use CONTEXT in logging. +function check_no_zygote_gc_runtime_option { + local context=$1 + local value=$2 + + say "[$context] Check no zygote process is passed the flag value as a GC runtime option..." + local runtime_option="-Xgc:$value" + for zygote in $zygotes; do + find_zygote_runtime_option "$zygote" "$runtime_option"\ + && fail "Found \`$runtime_option\` among runtime options passed to \`$zygote\`" + done +} + +# test_android_runtime_flag FLAG VALUE GC_RUNTIME_OPTION +# ------------------------------------------------------ +# Test device configuration FLAG with VALUE. Check that GC_RUNTIME_OPTION is +# passed as GC Runtime option by the zygote. +function test_android_runtime_flag { + local flag=$1 + local value=$2 + local gc_runtime_option=$3 + + # Persistent system property (set after a reboot) associated with the device + # configuration flag. + local prop="persist.device_config.$namespace.$flag" + + banner "Testing \`$flag\` value \`$value\`." + + say "Setting device configuration flag..." + adb shell device_config put "$namespace" "$flag" "$value" + # Give some time to the device to digest this change before rebooting. + sleep 3 + + # Check that both the device configuration flag and the associated system + # property are set, but that the zygote hasn't had the flag passed to it as a + # GC runtime option (as we haven't rebooted yet). + local context="Flag set, before reboot" + check_device_config_flag "$context" "$flag" "$value" + check_system_property "$context" "$prop" "$value" + check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option" + + # Reboot device for the flag value to take effect. + reboot_and_wait_for_device + context="Flag set, after 1st reboot" + check_device_config_flag "$context" "$flag" "$value" + check_system_property "$context" "$prop" "$value" + check_zygote_gc_runtime_option "$context" "$gc_runtime_option" + + # Reboot device a second time and check that the state has persisted. + reboot_and_wait_for_device + context="Flag set, after 2nd reboot" + check_device_config_flag "$context" "$flag" "$value" + check_system_property "$context" "$prop" "$value" + check_zygote_gc_runtime_option "$context" "$gc_runtime_option" + + say "Unsetting device configuration flag..." + adb shell device_config delete "$namespace" "$flag" >/dev/null + # Give some time to the device to digest this change before rebooting. + sleep 3 + + # Reboot and check that the device is back to its default state. + reboot_and_wait_for_device + context="Flag unset, after 3rd reboot" + check_no_device_config_flag "$context" "$flag" + check_no_system_property "$context" "$prop" + check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option" +} + +# Enumerate Zygote processes. +case $(adb shell getprop ro.zygote) in + (zygote32) zygotes="zygote";; + (zygote64) zygotes="zygote64";; + (zygote32_64|zygote64_32) zygotes="zygote zygote64";; +esac + +# Test "enable_generational_cc" flag values. +test_android_runtime_flag enable_generational_cc false nogenerational_cc +test_android_runtime_flag enable_generational_cc true generational_cc + +if [[ "$exit_status" -eq 0 ]]; then + banner "All tests passed." +else + banner "Test(s) failed." +fi +exit $exit_status diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp new file mode 100644 index 000000000000..a90948780d9e --- /dev/null +++ b/core/tests/coretests/Android.bp @@ -0,0 +1,110 @@ +android_test { + name: "FrameworksCoreTests", + + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + "DisabledTestApp/src/**/*.java", + "EnabledTestApp/src/**/*.java", + "BinderProxyCountingTestApp/src/**/*.java", + "BinderProxyCountingTestService/src/**/*.java", + "aidl/**/I*.aidl", + ], + + aidl: { + local_include_dirs: ["aidl"], + }, + + dxflags: ["--core-library"], + + aaptflags: [ + "-0 .dat", + "-0 .gld", + "-c fa", + ], + static_libs: [ + "frameworks-base-testutils", + "core-tests-support", + "android-common", + "frameworks-core-util-lib", + "mockwebserver", + "guava", + "android-support-test", + "mockito-target-minus-junit4", + "espresso-core", + "ub-uiautomator", + "platform-test-annotations", + "compatibility-device-util", + "truth-prebuilt", + "print-test-util-lib", + ], + + libs: [ + "android.test.runner", + "telephony-common", + "org.apache.http.legacy", + "android.test.base", + "android.test.mock", + "framework-atb-backward-compatibility", + ], + + platform_apis: true, + test_suites: ["device-tests"], + + certificate: "platform", + + resource_dirs: ["res"], + resource_zips: [":FrameworksCoreTests_apks_as_resources"], +} + +// Rules to copy all the test apks to the intermediate raw resource directory +java_genrule { + name: "FrameworksCoreTests_apks_as_resources", + srcs: [ + ":FrameworksCoreTests_install", + ":FrameworksCoreTests_install_bad_dex", + ":FrameworksCoreTests_install_complete_package_info", + ":FrameworksCoreTests_install_decl_perm", + ":FrameworksCoreTests_install_jni_lib_open_from_apk", + ":FrameworksCoreTests_install_loc_auto", + ":FrameworksCoreTests_install_loc_internal", + ":FrameworksCoreTests_install_loc_sdcard", + ":FrameworksCoreTests_install_loc_unspecified", + ":FrameworksCoreTests_install_multi_package", + ":FrameworksCoreTests_install_split_base", + ":FrameworksCoreTests_install_split_feature_a", + ":FrameworksCoreTests_install_use_perm_good", + ":FrameworksCoreTests_install_uses_feature", + ":FrameworksCoreTests_install_verifier_bad", + ":FrameworksCoreTests_install_verifier_good", + ":FrameworksCoreTests_keyset_permdef_sa_unone", + ":FrameworksCoreTests_keyset_permuse_sa_ua_ub", + ":FrameworksCoreTests_keyset_permuse_sb_ua_ub", + ":FrameworksCoreTests_keyset_sab_ua", + ":FrameworksCoreTests_keyset_sa_ua", + ":FrameworksCoreTests_keyset_sa_uab", + ":FrameworksCoreTests_keyset_sa_ua_ub", + ":FrameworksCoreTests_keyset_sa_ub", + ":FrameworksCoreTests_keyset_sa_unone", + ":FrameworksCoreTests_keyset_sau_ub", + ":FrameworksCoreTests_keyset_sb_ua", + ":FrameworksCoreTests_keyset_sb_ub", + ":FrameworksCoreTests_keyset_splata_api", + ":FrameworksCoreTests_keyset_splat_api", + ":FrameworksCoreTests_locales", + ":FrameworksCoreTests_version_1", + ":FrameworksCoreTests_version_1_diff", + ":FrameworksCoreTests_version_1_nosys", + ":FrameworksCoreTests_version_2", + ":FrameworksCoreTests_version_2_diff", + ":FrameworksCoreTests_version_3", + ], + out: ["FrameworkCoreTests_apks_as_resources.res.zip"], + tools: ["soong_zip"], + + cmd: "mkdir -p $(genDir)/res/raw && " + + "for i in $(in); do " + + " x=$${i##*FrameworksCoreTests_}; echo $${x}; cp $$i $(genDir)/res/raw/$${x%.apk};" + + "done && " + + "$(location soong_zip) -o $(out) -C $(genDir)/res -D $(genDir)/res", +} diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk deleted file mode 100644 index 3a9d9a3ff64e..000000000000 --- a/core/tests/coretests/Android.mk +++ /dev/null @@ -1,82 +0,0 @@ -ACTUAL_LOCAL_PATH := $(call my-dir) - -# this var will hold all the test apk module names later. -FrameworkCoreTests_all_apks := - -# We have to include the subdir makefiles first -# so that FrameworkCoreTests_all_apks will be populated correctly. -include $(call all-makefiles-under,$(ACTUAL_LOCAL_PATH)) - -LOCAL_PATH := $(ACTUAL_LOCAL_PATH) - -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) \ - $(call all-Iaidl-files-under, src) \ - $(call all-java-files-under, DisabledTestApp/src) \ - $(call all-java-files-under, EnabledTestApp/src) \ - $(call all-java-files-under, BinderProxyCountingTestApp/src) \ - $(call all-java-files-under, BinderProxyCountingTestService/src) \ - $(call all-Iaidl-files-under, aidl) - -LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl - -LOCAL_DX_FLAGS := --core-library -LOCAL_JACK_FLAGS := --multi-dex native -LOCAL_AAPT_FLAGS = -0 dat -0 gld -c fa -LOCAL_STATIC_JAVA_LIBRARIES := \ - frameworks-base-testutils \ - core-tests-support \ - android-common \ - frameworks-core-util-lib \ - mockwebserver \ - guava \ - android-support-test \ - mockito-target-minus-junit4 \ - espresso-core \ - ub-uiautomator \ - platform-test-annotations \ - compatibility-device-util \ - truth-prebuilt \ - print-test-util-lib - -LOCAL_JAVA_LIBRARIES := \ - android.test.runner \ - telephony-common \ - org.apache.http.legacy \ - android.test.base \ - android.test.mock \ - framework-atb-backward-compatibility \ - -LOCAL_PACKAGE_NAME := FrameworksCoreTests -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_CERTIFICATE := platform - -# intermediate dir to include all the test apks as raw resource -FrameworkCoreTests_intermediates := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME))/test_apks/res -LOCAL_RESOURCE_DIR := $(FrameworkCoreTests_intermediates) $(LOCAL_PATH)/res - -# Disable AAPT2 because the hacks below depend on the AAPT rules implementation -LOCAL_USE_AAPT2 := false - -include $(BUILD_PACKAGE) -# Rules to copy all the test apks to the intermediate raw resource directory -FrameworkCoreTests_all_apks_res := $(addprefix $(FrameworkCoreTests_intermediates)/raw/, \ - $(foreach a, $(FrameworkCoreTests_all_apks), $(patsubst FrameworkCoreTests_%,%,$(a)))) - -$(FrameworkCoreTests_all_apks_res): $(FrameworkCoreTests_intermediates)/raw/%: $(call intermediates-dir-for,APPS,FrameworkCoreTests_%)/package.apk - $(call copy-file-to-new-target) - -# Use R_file_stamp as dependency because we want the test apks in place before the R.java is generated. -$(R_file_stamp) : $(FrameworkCoreTests_all_apks_res) - -FrameworkCoreTests_all_apks := -FrameworkCoreTests_intermediates := -FrameworkCoreTests_all_apks_res := diff --git a/core/tests/coretests/BinderProxyCountingTestApp/Android.bp b/core/tests/coretests/BinderProxyCountingTestApp/Android.bp new file mode 100644 index 000000000000..6279a4873c67 --- /dev/null +++ b/core/tests/coretests/BinderProxyCountingTestApp/Android.bp @@ -0,0 +1,25 @@ +// 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_test_helper_app { + name: "BinderProxyCountingTestApp", + + static_libs: ["coretests-aidl"], + srcs: ["**/*.java"], + + sdk_version: "current", + certificate: "platform", + + test_suites: ["device-tests"], +} diff --git a/core/tests/coretests/BinderProxyCountingTestApp/Android.mk b/core/tests/coretests/BinderProxyCountingTestApp/Android.mk deleted file mode 100644 index 4642694d7b67..000000000000 --- a/core/tests/coretests/BinderProxyCountingTestApp/Android.mk +++ /dev/null @@ -1,29 +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_MODULE_TAGS := tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BinderProxyCountingTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/BinderProxyCountingTestService/Android.bp b/core/tests/coretests/BinderProxyCountingTestService/Android.bp new file mode 100644 index 000000000000..22718cb86d66 --- /dev/null +++ b/core/tests/coretests/BinderProxyCountingTestService/Android.bp @@ -0,0 +1,25 @@ +// 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_test_helper_app { + name: "BinderProxyCountingTestService", + + static_libs: ["coretests-aidl"], + srcs: ["**/*.java"], + + platform_apis: true, + certificate: "platform", + + test_suites: ["device-tests"], +} diff --git a/core/tests/coretests/BinderProxyCountingTestService/Android.mk b/core/tests/coretests/BinderProxyCountingTestService/Android.mk deleted file mode 100644 index f852c7afeacd..000000000000 --- a/core/tests/coretests/BinderProxyCountingTestService/Android.mk +++ /dev/null @@ -1,29 +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_MODULE_TAGS := tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BinderProxyCountingTestService -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/BstatsTestApp/Android.bp b/core/tests/coretests/BstatsTestApp/Android.bp new file mode 100644 index 000000000000..424c71a4d8d0 --- /dev/null +++ b/core/tests/coretests/BstatsTestApp/Android.bp @@ -0,0 +1,34 @@ +// 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_test_helper_app { + name: "BstatsTestApp", + + test_suites: [ + "device-tests", + ], + + static_libs: ["coretests-aidl"], + + srcs: ["**/*.java"], + + sdk_version: "current", + certificate: "platform", + dex_preopt: { + enabled: false, + }, + optimize: { + enabled: false, + }, +} diff --git a/core/tests/coretests/BstatsTestApp/Android.mk b/core/tests/coretests/BstatsTestApp/Android.mk deleted file mode 100644 index a5872a5e5be9..000000000000 --- a/core/tests/coretests/BstatsTestApp/Android.mk +++ /dev/null @@ -1,34 +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_MODULE_TAGS := tests - -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BstatsTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform -LOCAL_DEX_PREOPT := false -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) diff --git a/core/tests/coretests/DisabledTestApp/Android.bp b/core/tests/coretests/DisabledTestApp/Android.bp new file mode 100644 index 000000000000..419816e42eff --- /dev/null +++ b/core/tests/coretests/DisabledTestApp/Android.bp @@ -0,0 +1,8 @@ +android_test_helper_app { + name: "DisabledTestApp", + + srcs: ["**/*.java"], + + sdk_version: "current", + certificate: "platform", +} diff --git a/core/tests/coretests/DisabledTestApp/Android.mk b/core/tests/coretests/DisabledTestApp/Android.mk deleted file mode 100644 index e4304f7cef73..000000000000 --- a/core/tests/coretests/DisabledTestApp/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := DisabledTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/EnabledTestApp/Android.bp b/core/tests/coretests/EnabledTestApp/Android.bp new file mode 100644 index 000000000000..bc4f4bd2e4d7 --- /dev/null +++ b/core/tests/coretests/EnabledTestApp/Android.bp @@ -0,0 +1,8 @@ +android_test_helper_app { + name: "EnabledTestApp", + + srcs: ["**/*.java"], + + sdk_version: "current", + certificate: "platform", +} diff --git a/core/tests/coretests/EnabledTestApp/Android.mk b/core/tests/coretests/EnabledTestApp/Android.mk deleted file mode 100644 index cd37f0883c63..000000000000 --- a/core/tests/coretests/EnabledTestApp/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := EnabledTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/aidl/Android.bp b/core/tests/coretests/aidl/Android.bp new file mode 100644 index 000000000000..6e442db78500 --- /dev/null +++ b/core/tests/coretests/aidl/Android.bp @@ -0,0 +1,19 @@ +// 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. + +java_test { + name: "coretests-aidl", + sdk_version: "current", + srcs: ["**/*.aidl"], +} diff --git a/core/tests/coretests/aidl/Android.mk b/core/tests/coretests/aidl/Android.mk deleted file mode 100644 index 86e36b61a5ae..000000000000 --- a/core/tests/coretests/aidl/Android.mk +++ /dev/null @@ -1,22 +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_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_SRC_FILES := $(call all-subdir-Iaidl-files) -LOCAL_MODULE := coretests-aidl -include $(BUILD_STATIC_JAVA_LIBRARY)
\ No newline at end of file diff --git a/core/tests/coretests/apks/Android.bp b/core/tests/coretests/apks/Android.bp new file mode 100644 index 000000000000..20c87b2d2ce9 --- /dev/null +++ b/core/tests/coretests/apks/Android.bp @@ -0,0 +1,7 @@ +java_defaults { + name: "FrameworksCoreTests_apks_defaults", + sdk_version: "current", + + // Every package should have a native library + jni_libs: ["libframeworks_coretests_jni"], +} diff --git a/core/tests/coretests/apks/Android.mk b/core/tests/coretests/apks/Android.mk deleted file mode 100644 index 98c0c2aee38b..000000000000 --- a/core/tests/coretests/apks/Android.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -FrameworkCoreTests_BUILD_PACKAGE := $(LOCAL_PATH)/FrameworkCoreTests_apk.mk - -# build sub packages -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/core/tests/coretests/apks/FrameworkCoreTests_apk.mk b/core/tests/coretests/apks/FrameworkCoreTests_apk.mk deleted file mode 100644 index 8a7d72a5200b..000000000000 --- a/core/tests/coretests/apks/FrameworkCoreTests_apk.mk +++ /dev/null @@ -1,16 +0,0 @@ - -LOCAL_MODULE_TAGS := tests - -# Disable dexpreopt. -LOCAL_DEX_PREOPT := false - -# Make sure every package name gets the FrameworkCoreTests_ prefix. -LOCAL_PACKAGE_NAME := FrameworkCoreTests_$(LOCAL_PACKAGE_NAME) -LOCAL_SDK_VERSION := current - -# Every package should have a native library -LOCAL_JNI_SHARED_LIBRARIES := libframeworks_coretests_jni - -FrameworkCoreTests_all_apks += $(LOCAL_PACKAGE_NAME) - -include $(BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install-split-base/Android.bp b/core/tests/coretests/apks/install-split-base/Android.bp new file mode 100644 index 000000000000..ddf75b224359 --- /dev/null +++ b/core/tests/coretests/apks/install-split-base/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_split_base", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install-split-base/Android.mk b/core/tests/coretests/apks/install-split-base/Android.mk deleted file mode 100644 index 5b60e3167fc7..000000000000 --- a/core/tests/coretests/apks/install-split-base/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_split_base - -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/install-split-feature-a/Android.bp b/core/tests/coretests/apks/install-split-feature-a/Android.bp new file mode 100644 index 000000000000..9ec9893cc408 --- /dev/null +++ b/core/tests/coretests/apks/install-split-feature-a/Android.bp @@ -0,0 +1,11 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_split_feature_a", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], + + aaptflags: [ + "--custom-package com.google.android.dexapis.splitapp.feature_a", + "--package-id 0x80", + ], +} diff --git a/core/tests/coretests/apks/install-split-feature-a/Android.mk b/core/tests/coretests/apks/install-split-feature-a/Android.mk deleted file mode 100644 index 0f37d16a7688..000000000000 --- a/core/tests/coretests/apks/install-split-feature-a/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_split_feature_a - -LOCAL_USE_AAPT2 := true -LOCAL_AAPT_FLAGS += --custom-package com.google.android.dexapis.splitapp.feature_a -LOCAL_AAPT_FLAGS += --package-id 0x80 - -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/install/Android.bp b/core/tests/coretests/apks/install/Android.bp new file mode 100644 index 000000000000..e783fe2ec2dc --- /dev/null +++ b/core/tests/coretests/apks/install/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install/Android.mk b/core/tests/coretests/apks/install/Android.mk deleted file mode 100644 index b38dc20a181e..000000000000 --- a/core/tests/coretests/apks/install/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_bad_dex/Android.bp b/core/tests/coretests/apks/install_bad_dex/Android.bp new file mode 100644 index 000000000000..d156793cf22a --- /dev/null +++ b/core/tests/coretests/apks/install_bad_dex/Android.bp @@ -0,0 +1,23 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_bad_dex_", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["src/**/*.java"], +} + +// Inject bad classes.dex file. +java_genrule { + name: "FrameworksCoreTests_install_bad_dex", + tools: [ + "soong_zip", + "merge_zips", + ], + srcs: [ + ":FrameworksCoreTests_install_bad_dex_", + "classes.dex", + ], + out: ["FrameworksCoreTests_install_bad_dex.apk"], + cmd: "$(location soong_zip) -o $(genDir)/classes.dex.zip -j -f $(location classes.dex) && " + + "$(location merge_zips) -ignore-duplicates $(out) $(genDir)/classes.dex.zip " + + "$(location :FrameworksCoreTests_install_bad_dex_)", +} diff --git a/core/tests/coretests/apks/install_bad_dex/Android.mk b/core/tests/coretests/apks/install_bad_dex/Android.mk deleted file mode 100644 index 05983aa6ec7b..000000000000 --- a/core/tests/coretests/apks/install_bad_dex/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_bad_dex - -include $(FrameworkCoreTests_BUILD_PACKAGE) - -# Override target specific variable PRIVATE_DEX_FILE to inject bad classes.dex file. -$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(LOCAL_PATH)/classes.dex diff --git a/core/tests/coretests/apks/install_complete_package_info/Android.bp b/core/tests/coretests/apks/install_complete_package_info/Android.bp new file mode 100644 index 000000000000..123558bda076 --- /dev/null +++ b/core/tests/coretests/apks/install_complete_package_info/Android.bp @@ -0,0 +1,7 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_complete_package_info", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} + diff --git a/core/tests/coretests/apks/install_complete_package_info/Android.mk b/core/tests/coretests/apks/install_complete_package_info/Android.mk deleted file mode 100644 index 19bf3561a706..000000000000 --- a/core/tests/coretests/apks/install_complete_package_info/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_complete_package_info -#LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml - -include $(FrameworkCoreTests_BUILD_PACKAGE) -#include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/apks/install_decl_perm/Android.bp b/core/tests/coretests/apks/install_decl_perm/Android.bp new file mode 100644 index 000000000000..868e8b51bd49 --- /dev/null +++ b/core/tests/coretests/apks/install_decl_perm/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_decl_perm", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_decl_perm/Android.mk b/core/tests/coretests/apks/install_decl_perm/Android.mk deleted file mode 100644 index 86370c8017a5..000000000000 --- a/core/tests/coretests/apks/install_decl_perm/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_decl_perm - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_jni_lib/Android.bp b/core/tests/coretests/apks/install_jni_lib/Android.bp index c1a6bd0b3d21..f20f59958736 100644 --- a/core/tests/coretests/apks/install_jni_lib/Android.bp +++ b/core/tests/coretests/apks/install_jni_lib/Android.bp @@ -14,6 +14,7 @@ cc_test_library { name: "libframeworks_coretests_jni", + defaults: ["FrameworksCoreTests_apks_defaults"], srcs: ["com_android_frameworks_coretests_JNITest.cpp"], diff --git a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp new file mode 100644 index 000000000000..602b704a0a5d --- /dev/null +++ b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_jni_lib_open_from_apk", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk deleted file mode 100644 index 6b3b55ed39e9..000000000000 --- a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_jni_lib_open_from_apk - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_auto/Android.bp b/core/tests/coretests/apks/install_loc_auto/Android.bp new file mode 100644 index 000000000000..6393915ba283 --- /dev/null +++ b/core/tests/coretests/apks/install_loc_auto/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_loc_auto", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_auto/Android.mk b/core/tests/coretests/apks/install_loc_auto/Android.mk deleted file mode 100644 index 6435f3624a15..000000000000 --- a/core/tests/coretests/apks/install_loc_auto/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_auto - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_internal/Android.bp b/core/tests/coretests/apks/install_loc_internal/Android.bp new file mode 100644 index 000000000000..770aaa511b9d --- /dev/null +++ b/core/tests/coretests/apks/install_loc_internal/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_loc_internal", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_internal/Android.mk b/core/tests/coretests/apks/install_loc_internal/Android.mk deleted file mode 100644 index 8cc8b8e0e778..000000000000 --- a/core/tests/coretests/apks/install_loc_internal/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_internal - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.bp b/core/tests/coretests/apks/install_loc_sdcard/Android.bp new file mode 100644 index 000000000000..177940102e83 --- /dev/null +++ b/core/tests/coretests/apks/install_loc_sdcard/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_loc_sdcard", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.mk b/core/tests/coretests/apks/install_loc_sdcard/Android.mk deleted file mode 100644 index e1411c2276a5..000000000000 --- a/core/tests/coretests/apks/install_loc_sdcard/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_sdcard - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.bp b/core/tests/coretests/apks/install_loc_unspecified/Android.bp new file mode 100644 index 000000000000..21c0f82b44ff --- /dev/null +++ b/core/tests/coretests/apks/install_loc_unspecified/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_loc_unspecified", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.mk b/core/tests/coretests/apks/install_loc_unspecified/Android.mk deleted file mode 100644 index 0741d04b61d5..000000000000 --- a/core/tests/coretests/apks/install_loc_unspecified/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_unspecified - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_multi_package/Android.bp b/core/tests/coretests/apks/install_multi_package/Android.bp new file mode 100644 index 000000000000..249242e239e4 --- /dev/null +++ b/core/tests/coretests/apks/install_multi_package/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_multi_package", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_multi_package/Android.mk b/core/tests/coretests/apks/install_multi_package/Android.mk deleted file mode 100644 index 3f163def9ce0..000000000000 --- a/core/tests/coretests/apks/install_multi_package/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_multi_package - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) -#include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.bp b/core/tests/coretests/apks/install_use_perm_good/Android.bp new file mode 100644 index 000000000000..bb41ebb2fdca --- /dev/null +++ b/core/tests/coretests/apks/install_use_perm_good/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_use_perm_good", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.mk b/core/tests/coretests/apks/install_use_perm_good/Android.mk deleted file mode 100644 index e2661a13793a..000000000000 --- a/core/tests/coretests/apks/install_use_perm_good/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_use_perm_good - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_uses_feature/Android.bp b/core/tests/coretests/apks/install_uses_feature/Android.bp new file mode 100644 index 000000000000..0ec747b0f151 --- /dev/null +++ b/core/tests/coretests/apks/install_uses_feature/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_uses_feature", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_uses_feature/Android.mk b/core/tests/coretests/apks/install_uses_feature/Android.mk deleted file mode 100644 index b60d734fe635..000000000000 --- a/core/tests/coretests/apks/install_uses_feature/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_uses_feature - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.bp b/core/tests/coretests/apks/install_verifier_bad/Android.bp new file mode 100644 index 000000000000..1265739a3107 --- /dev/null +++ b/core/tests/coretests/apks/install_verifier_bad/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_verifier_bad", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.mk b/core/tests/coretests/apks/install_verifier_bad/Android.mk deleted file mode 100644 index 745b4d32ccc4..000000000000 --- a/core/tests/coretests/apks/install_verifier_bad/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_verifier_bad - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_verifier_good/Android.bp b/core/tests/coretests/apks/install_verifier_good/Android.bp new file mode 100644 index 000000000000..4911ffbd2020 --- /dev/null +++ b/core/tests/coretests/apks/install_verifier_good/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_install_verifier_good", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_verifier_good/Android.mk b/core/tests/coretests/apks/install_verifier_good/Android.mk deleted file mode 100644 index 150fd8dd8701..000000000000 --- a/core/tests/coretests/apks/install_verifier_good/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_verifier_good - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/keyset/Android.bp b/core/tests/coretests/apks/keyset/Android.bp new file mode 100644 index 000000000000..e252b081341a --- /dev/null +++ b/core/tests/coretests/apks/keyset/Android.bp @@ -0,0 +1,120 @@ +//apks signed by keyset_A +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sa_unone", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "uNone/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sa_ua", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sa_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sa_uab", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "uAB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sa_ua_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "uAuB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_permdef_sa_unone", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "permDef/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_permuse_sa_ua_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_B +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sb_ua", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_B_cert", + manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sb_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_B_cert", + manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { + name: "FrameworksCoreTests_keyset_permuse_sb_ua_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_B_cert", + manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_A and keyset_B +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sab_ua", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], + manifest: "uA/AndroidManifest.xml", +} + +//apks signed by keyset_A and unit_test +android_test_helper_app { + name: "FrameworksCoreTests_keyset_sau_ub", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: ":FrameworksCoreTests_keyset_A_cert", + additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], + manifest: "uB/AndroidManifest.xml", +} + +//apks signed by platform only +android_test_helper_app { + name: "FrameworksCoreTests_keyset_splat_api", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: "platform", + manifest: "api_test/AndroidManifest.xml", +} + +//apks signed by platform and keyset_A +android_test_helper_app { + name: "FrameworksCoreTests_keyset_splata_api", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + certificate: "platform", + additional_certificates: [":FrameworksCoreTests_keyset_A_cert"], + manifest: "api_test/AndroidManifest.xml", +} diff --git a/core/tests/coretests/apks/keyset/Android.mk b/core/tests/coretests/apks/keyset/Android.mk deleted file mode 100644 index 306dc90118f7..000000000000 --- a/core/tests/coretests/apks/keyset/Android.mk +++ /dev/null @@ -1,108 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -#apks signed by keyset_A -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_unone -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uNone/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_uab -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uAB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uAuB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permdef_sa_unone -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := permDef/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permuse_sa_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := permUse/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_B -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sb_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sb_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permuse_sb_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := permUse/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_A and keyset_B -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sab_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_A and unit_test -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sau_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by platform only -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_splat_api -LOCAL_CERTIFICATE := platform -LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by platform and keyset_A -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_splata_api -LOCAL_CERTIFICATE := platform -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/locales/Android.bp b/core/tests/coretests/apks/locales/Android.bp new file mode 100644 index 000000000000..4a730ef53404 --- /dev/null +++ b/core/tests/coretests/apks/locales/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { + name: "FrameworksCoreTests_locales", + defaults: ["FrameworksCoreTests_apks_defaults"], + + srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/locales/Android.mk b/core/tests/coretests/apks/locales/Android.mk deleted file mode 100644 index 9cb13dd4cd0e..000000000000 --- a/core/tests/coretests/apks/locales/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := locales - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/version/Android.bp b/core/tests/coretests/apks/version/Android.bp new file mode 100644 index 000000000000..371ccfc301cb --- /dev/null +++ b/core/tests/coretests/apks/version/Android.bp @@ -0,0 +1,54 @@ +android_test_helper_app { + name: "FrameworksCoreTests_version_1", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 1", + "--version-name 1.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { + name: "FrameworksCoreTests_version_2", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 2", + "--version-name 2.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { + name: "FrameworksCoreTests_version_3", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 3", + "--version-name 3.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { + name: "FrameworksCoreTests_version_1_diff", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 1", + "--version-name 1.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { + name: "FrameworksCoreTests_version_2_diff", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 2", + "--version-name 2.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} diff --git a/core/tests/coretests/apks/version/Android.mk b/core/tests/coretests/apks/version/Android.mk deleted file mode 100644 index 3635a581dee5..000000000000 --- a/core/tests/coretests/apks/version/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1 -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_2 -LOCAL_AAPT_FLAGS := --version-code 2 --version-name 2.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_3 -LOCAL_AAPT_FLAGS := --version-code 3 --version-name 3.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1_diff -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test_diff -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_2_diff -LOCAL_AAPT_FLAGS := --version-code 2 --version-name 2.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test_diff -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/version_nosys/Android.bp b/core/tests/coretests/apks/version_nosys/Android.bp new file mode 100644 index 000000000000..575667822393 --- /dev/null +++ b/core/tests/coretests/apks/version_nosys/Android.bp @@ -0,0 +1,10 @@ +android_test_helper_app { + name: "FrameworksCoreTests_version_1_nosys", + defaults: ["FrameworksCoreTests_apks_defaults"], + srcs: ["**/*.java"], + aaptflags: [ + "--version-code 1", + "--version-name 1.0", + ], + certificate: ":FrameworksCoreTests_unit_test_cert", +} diff --git a/core/tests/coretests/apks/version_nosys/Android.mk b/core/tests/coretests/apks/version_nosys/Android.mk deleted file mode 100644 index bbc8e12afe8d..000000000000 --- a/core/tests/coretests/apks/version_nosys/Android.mk +++ /dev/null @@ -1,9 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1_nosys -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - diff --git a/core/tests/coretests/certs/Android.bp b/core/tests/coretests/certs/Android.bp new file mode 100644 index 000000000000..bd5c8293f6f6 --- /dev/null +++ b/core/tests/coretests/certs/Android.bp @@ -0,0 +1,14 @@ +android_app_certificate { + name: "FrameworksCoreTests_keyset_A_cert", + certificate: "keyset_A", +} + +android_app_certificate { + name: "FrameworksCoreTests_keyset_B_cert", + certificate: "keyset_B", +} + +android_app_certificate { + name: "FrameworksCoreTests_unit_test_cert", + certificate: "unit_test", +} diff --git a/core/tests/utillib/Android.bp b/core/tests/utillib/Android.bp new file mode 100644 index 000000000000..1f742c208ba2 --- /dev/null +++ b/core/tests/utillib/Android.bp @@ -0,0 +1,22 @@ +// Copyright (C) 2010 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +java_library { + name: "frameworks-core-util-lib", + + srcs: ["**/*.java"], + + static_libs: ["junit"], + libs: ["android.test.base"], +} diff --git a/core/tests/utillib/Android.mk b/core/tests/utillib/Android.mk deleted file mode 100644 index be1ab1f73d9f..000000000000 --- a/core/tests/utillib/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2010 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT 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 := $(call all-subdir-java-files) - -LOCAL_MODULE := frameworks-core-util-lib -LOCAL_STATIC_JAVA_LIBRARIES := junit -LOCAL_JAVA_LIBRARIES := android.test.base - -include $(BUILD_STATIC_JAVA_LIBRARY) - -# Build the test APKs using their own makefiles -include $(call all-makefiles-under,$(LOCAL_PATH)) - diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index d6131cf2e5d4..507f767ae3e6 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -814,7 +814,7 @@ public final class Bitmap implements Parcelable { * @return A bitmap that represents the specified subset of source * @throws IllegalArgumentException if the x, y, width, height values are * outside of the dimensions of the source bitmap, or width is <= 0, - * or height is <= 0 + * or height is <= 0, or if the source bitmap has already been recycled */ public static Bitmap createBitmap(@NonNull Bitmap source, int x, int y, int width, int height, @Nullable Matrix m, boolean filter) { @@ -827,6 +827,9 @@ public final class Bitmap implements Parcelable { if (y + height > source.getHeight()) { throw new IllegalArgumentException("y + height must be <= bitmap.height()"); } + if (source.isRecycled()) { + throw new IllegalArgumentException("cannot use a recycled source in createBitmap"); + } // check if we can just return our argument unchanged if (!source.isMutable() && x == 0 && y == 0 && width == source.getWidth() && diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java b/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java index 6ea1e3d49dd4..225dc0f4bfdc 100644 --- a/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java +++ b/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java @@ -30,7 +30,9 @@ import com.android.server.connectivity.nano.WifiData; import com.google.protobuf.nano.MessageNano; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * Class to record the stats of detection level information for data stall. @@ -96,6 +98,22 @@ public final class DataStallDetectionStats { return sb.toString(); } + @Override + public boolean equals(@Nullable final Object o) { + if (!(o instanceof DataStallDetectionStats)) return false; + final DataStallDetectionStats other = (DataStallDetectionStats) o; + return (mNetworkType == other.mNetworkType) + && (mEvaluationType == other.mEvaluationType) + && Arrays.equals(mWifiInfo, other.mWifiInfo) + && Arrays.equals(mCellularInfo, other.mCellularInfo) + && Arrays.equals(mDns, other.mDns); + } + + @Override + public int hashCode() { + return Objects.hash(mNetworkType, mEvaluationType, mWifiInfo, mCellularInfo, mDns); + } + /** * Utility to create an instance of {@Link DataStallDetectionStats} * @@ -163,16 +181,17 @@ public final class DataStallDetectionStats { } private static int getWifiBand(@Nullable final WifiInfo info) { - if (info != null) { - int freq = info.getFrequency(); - // Refer to ScanResult.is5GHz() and ScanResult.is24GHz(). - if (freq > 4900 && freq < 5900) { - return DataStallEventProto.AP_BAND_5GHZ; - } else if (freq > 2400 && freq < 2500) { - return DataStallEventProto.AP_BAND_2GHZ; - } + if (info == null) return DataStallEventProto.AP_BAND_UNKNOWN; + + int freq = info.getFrequency(); + // Refer to ScanResult.is5GHz() and ScanResult.is24GHz(). + if (freq > 4900 && freq < 5900) { + return DataStallEventProto.AP_BAND_5GHZ; + } else if (freq > 2400 && freq < 2500) { + return DataStallEventProto.AP_BAND_2GHZ; + } else { + return DataStallEventProto.AP_BAND_UNKNOWN; } - return DataStallEventProto.AP_BAND_UNKNOWN; } /** diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java index 3c129ce81b65..e82a5d7b4881 100644 --- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java @@ -729,7 +729,8 @@ public class NetworkMonitor extends StateMachine { return stats.build(); } - private void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { + @VisibleForTesting + protected void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { final int size = mDnsStallDetector.mResultIndices.size(); for (int i = 1; i <= DEFAULT_DNS_LOG_SIZE && i <= size; i++) { final int index = mDnsStallDetector.mResultIndices.indexOf(size - i); diff --git a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java index beb975d745c2..ddb7030d314a 100644 --- a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java @@ -30,7 +30,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.anyObject; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; @@ -40,6 +39,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.annotation.NonNull; import android.content.Context; import android.net.ConnectivityManager; import android.net.INetworkMonitorCallbacks; @@ -49,9 +49,11 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.captiveportal.CaptivePortalProbeResult; +import android.net.metrics.DataStallDetectionStats; import android.net.metrics.DataStallStatsUtils; import android.net.metrics.IpConnectivityLog; import android.net.util.SharedLog; +import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.ConditionVariable; @@ -60,6 +62,7 @@ import android.os.SystemClock; import android.provider.Settings; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import android.telephony.CellSignalStrength; import android.telephony.TelephonyManager; import android.util.ArrayMap; @@ -101,6 +104,7 @@ public class NetworkMonitorTest { private @Mock INetworkMonitorCallbacks mCallbacks; private @Spy Network mNetwork = new Network(TEST_NETID); private @Mock DataStallStatsUtils mDataStallStatsUtils; + private @Mock WifiInfo mWifiInfo; private static final int TEST_NETID = 4242; @@ -108,10 +112,12 @@ public class NetworkMonitorTest { private static final String TEST_HTTPS_URL = "https://www.google.com/gen_204"; private static final String TEST_FALLBACK_URL = "http://fallback.google.com/gen_204"; private static final String TEST_OTHER_FALLBACK_URL = "http://otherfallback.google.com/gen_204"; + private static final String TEST_MCCMNC = "123456"; private static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; private static final int RETURN_CODE_DNS_SUCCESS = 0; private static final int RETURN_CODE_DNS_TIMEOUT = 255; + private static final int DEFAULT_DNS_TIMEOUT_THRESHOLD = 5; private static final int HANDLER_TIMEOUT_MS = 1000; @@ -202,6 +208,11 @@ public class NetworkMonitorTest { protected void setLastProbeTime(long time) { mProbeTime = time; } + + @Override + protected void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { + generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); + } } private WrappedNetworkMonitor makeMeteredWrappedNetworkMonitor() { @@ -387,7 +398,7 @@ public class NetworkMonitorTest { public void testIsDataStall_EvaluationDnsOnNotMeteredNetwork() { WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor(); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); - makeDnsTimeoutEvent(wrappedMonitor, 5); + makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD); assertTrue(wrappedMonitor.isDataStall()); } @@ -398,7 +409,7 @@ public class NetworkMonitorTest { assertFalse(wrappedMonitor.isDataStall()); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); - makeDnsTimeoutEvent(wrappedMonitor, 5); + makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD); assertTrue(wrappedMonitor.isDataStall()); } @@ -432,7 +443,7 @@ public class NetworkMonitorTest { // Test dns events happened in valid dns time threshold. WrappedNetworkMonitor wrappedMonitor = makeMeteredWrappedNetworkMonitor(); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); - makeDnsTimeoutEvent(wrappedMonitor, 5); + makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD); assertFalse(wrappedMonitor.isDataStall()); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); assertTrue(wrappedMonitor.isDataStall()); @@ -441,7 +452,7 @@ public class NetworkMonitorTest { setValidDataStallDnsTimeThreshold(0); wrappedMonitor = makeMeteredWrappedNetworkMonitor(); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); - makeDnsTimeoutEvent(wrappedMonitor, 5); + makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD); assertFalse(wrappedMonitor.isDataStall()); wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); assertFalse(wrappedMonitor.isDataStall()); @@ -514,7 +525,7 @@ public class NetworkMonitorTest { wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); makeDnsTimeoutEvent(wrappedMonitor, 5); assertTrue(wrappedMonitor.isDataStall()); - verify(mDataStallStatsUtils, times(1)).write(eq(anyObject()), eq(anyObject())); + verify(mDataStallStatsUtils, times(1)).write(any(), any()); } @Test @@ -523,8 +534,44 @@ public class NetworkMonitorTest { wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); makeDnsTimeoutEvent(wrappedMonitor, 3); assertFalse(wrappedMonitor.isDataStall()); - verify(mDataStallStatsUtils, times(0)).write(eq(anyObject()), eq(anyObject())); + verify(mDataStallStatsUtils, never()).write(any(), any()); } + + @Test + public void testCollectDataStallMetrics() { + WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor(); + + when(mTelephony.getDataNetworkType()).thenReturn(TelephonyManager.NETWORK_TYPE_LTE); + when(mTelephony.getNetworkOperator()).thenReturn(TEST_MCCMNC); + when(mTelephony.getSimOperator()).thenReturn(TEST_MCCMNC); + + DataStallDetectionStats.Builder stats = + new DataStallDetectionStats.Builder() + .setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS) + .setNetworkType(NetworkCapabilities.TRANSPORT_CELLULAR) + .setCellData(TelephonyManager.NETWORK_TYPE_LTE /* radioType */, + true /* roaming */, + TEST_MCCMNC /* networkMccmnc */, + TEST_MCCMNC /* simMccmnc */, + CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN /* signalStrength */); + generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); + + assertEquals(wrappedMonitor.buildDataStallDetectionStats( + NetworkCapabilities.TRANSPORT_CELLULAR), stats.build()); + + when(mWifi.getConnectionInfo()).thenReturn(mWifiInfo); + + stats = new DataStallDetectionStats.Builder() + .setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS) + .setNetworkType(NetworkCapabilities.TRANSPORT_WIFI) + .setWiFiData(mWifiInfo); + generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); + + assertEquals( + wrappedMonitor.buildDataStallDetectionStats(NetworkCapabilities.TRANSPORT_WIFI), + stats.build()); + } + private void makeDnsTimeoutEvent(WrappedNetworkMonitor wrappedMonitor, int count) { for (int i = 0; i < count; i++) { wrappedMonitor.getDnsStallDetector().accumulateConsecutiveDnsTimeoutCount( @@ -614,5 +661,11 @@ public class NetworkMonitorTest { private void setStatus(HttpURLConnection connection, int status) throws IOException { doReturn(status).when(connection).getResponseCode(); } + + private void generateTimeoutDnsEvent(DataStallDetectionStats.Builder stats, int num) { + for (int i = 0; i < num; i++) { + stats.addDnsEvent(RETURN_CODE_DNS_TIMEOUT, 123456789 /* timeMs */); + } + } } diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 3b5c9f53d9a1..b4d45d475917 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -177,8 +177,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { private ServiceState[] mServiceState; - private int[] mNetworkType; - private int[] mVoiceActivationState; private int[] mDataActivationState; @@ -213,6 +211,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { private CallAttributes mCallAttributes = new CallAttributes(new PreciseCallState(), TelephonyManager.NETWORK_TYPE_UNKNOWN, new CallQuality()); + // network type of the call associated with the mCallAttributes and mCallQuality + private int mCallNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; + private int[] mSrvccState; private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -374,7 +375,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mDataConnectionNetworkType = new int[numPhones]; mCallIncomingNumber = new String[numPhones]; mServiceState = new ServiceState[numPhones]; - mNetworkType = new int[numPhones]; mVoiceActivationState = new int[numPhones]; mDataActivationState = new int[numPhones]; mUserMobileDataState = new boolean[numPhones]; @@ -395,7 +395,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mDataActivationState[i] = TelephonyManager.SIM_ACTIVATION_STATE_UNKNOWN; mCallIncomingNumber[i] = ""; mServiceState[i] = new ServiceState(); - mNetworkType[i] = mServiceState[i].getVoiceNetworkType(); mSignalStrength[i] = new SignalStrength(); mUserMobileDataState[i] = false; mMessageWaiting[i] = false; @@ -997,21 +996,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { if (validatePhoneId(phoneId)) { mServiceState[phoneId] = state; - boolean notifyCallAttributes = true; - if (mNetworkType[phoneId] != mServiceState[phoneId].getVoiceNetworkType()) { - mNetworkType[phoneId] = state.getVoiceNetworkType(); - mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId], - mCallQuality); - } else { - // No change to network type, so no need to notify call attributes - notifyCallAttributes = false; - } - - if (mCallQuality == null) { - // No call quality reported yet, so no need to notify call attributes - notifyCallAttributes = false; - } - for (Record r : mRecords) { if (VDBG) { log("notifyServiceStateForSubscriber: r=" + r + " subId=" + subId @@ -1039,14 +1023,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mRemoveList.add(r.binder); } } - if (notifyCallAttributes && r.matchPhoneStateListenerEvent( - PhoneStateListener.LISTEN_CALL_ATTRIBUTES_CHANGED)) { - try { - r.callback.onCallAttributesChanged(mCallAttributes); - } catch (RemoteException ex) { - mRemoveList.add(r.binder); - } - } } } else { log("notifyServiceStateForSubscriber: INVALID phoneId=" + phoneId); @@ -1573,7 +1549,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { log("notifyPreciseCallState: mCallQuality is null, skipping call attributes"); notifyCallAttributes = false; } else { - mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId], + mCallAttributes = new CallAttributes(mPreciseCallState, mCallNetworkType, mCallQuality); } @@ -1840,16 +1816,16 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } @Override - public void notifyCallQualityChanged(CallQuality callQuality, int phoneId) { + public void notifyCallQualityChanged(CallQuality callQuality, int phoneId, + int callNetworkType) { if (!checkNotifyPermission("notifyCallQualityChanged()")) { return; } // merge CallQuality with PreciseCallState and network type mCallQuality = callQuality; - mCallAttributes = new CallAttributes(mPreciseCallState, - mNetworkType[phoneId], - callQuality); + mCallNetworkType = callNetworkType; + mCallAttributes = new CallAttributes(mPreciseCallState, callNetworkType, callQuality); synchronized (mRecords) { TelephonyManager tm = (TelephonyManager) mContext.getSystemService( @@ -1886,7 +1862,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { pw.println("mCallState=" + mCallState[i]); pw.println("mCallIncomingNumber=" + mCallIncomingNumber[i]); pw.println("mServiceState=" + mServiceState[i]); - pw.println("mNetworkType=" + mNetworkType[i]); pw.println("mVoiceActivationState= " + mVoiceActivationState[i]); pw.println("mDataActivationState= " + mDataActivationState[i]); pw.println("mUserMobileDataState= " + mUserMobileDataState[i]); @@ -1900,6 +1875,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { pw.println("mImsCallDisconnectCause=" + mImsReasonInfo.get(i).toString()); pw.decreaseIndent(); } + pw.println("mCallNetworkType=" + mCallNetworkType); pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState); pw.println("mPreciseCallState=" + mPreciseCallState); pw.println("mCallDisconnectCause=" + mCallDisconnectCause); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0eec8e9cb717..e18f3740a969 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2664,7 +2664,7 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessRecord proc; int procState; int statType; - int pid; + int pid = -1; long lastPssTime; synchronized (ActivityManagerService.this) { if (mPendingPssProcesses.size() <= 0) { diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java index 7d07a730f78b..aaf6c714b9c9 100644 --- a/telephony/java/android/telephony/CellSignalStrength.java +++ b/telephony/java/android/telephony/CellSignalStrength.java @@ -119,7 +119,7 @@ public abstract class CellSignalStrength { /** @hide */ protected static final int getAsuFromRssiDbm(int dbm) { if (dbm == CellInfo.UNAVAILABLE) return 99; - return (dbm / 2) + 113; + return (dbm + 113) / 2; } // Range for RSCP in ASU (0-96, 255) as defined in TS 27.007 8.69 diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 6704473dfe3e..2c87e62e2b32 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -8640,24 +8640,26 @@ public class TelephonyManager { /** - * Returns a well-formed IETF BCP 47 language tag representing the locale from the SIM, e.g, - * en-US. Returns {@code null} if no locale could be derived from subscriptions. + * Returns a locale based on the country and language from the SIM. Returns {@code null} if + * no locale could be derived from subscriptions. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE} * * @see Locale#toLanguageTag() - * @see Locale#forLanguageTag(String) * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) - @Nullable public String getSimLocale() { + @Nullable public Locale getSimLocale() { try { final ITelephony telephony = getITelephony(); if (telephony != null) { - return telephony.getSimLocaleForSubscriber(getSubId()); + String languageTag = telephony.getSimLocaleForSubscriber(getSubId()); + if (!TextUtils.isEmpty(languageTag)) { + return Locale.forLanguageTag(languageTag); + } } } catch (RemoteException ex) { } diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java index 837ef54a2f24..d11a0de24fb5 100644 --- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java +++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java @@ -99,7 +99,7 @@ public final class ImsStreamMediaProfile implements Parcelable { public int mRttMode; // RTT Audio Speech Indicator /** @hide */ - public boolean mHasRttAudioSpeech = false; + public boolean mIsReceivingRttAudio = false; /** @hide */ public ImsStreamMediaProfile(Parcel in) { @@ -201,7 +201,7 @@ public final class ImsStreamMediaProfile implements Parcelable { ", videoQuality=" + mVideoQuality + ", videoDirection=" + mVideoDirection + ", rttMode=" + mRttMode + - ", hasRttAudioSpeech=" + mHasRttAudioSpeech + " }"; + ", hasRttAudioSpeech=" + mIsReceivingRttAudio + " }"; } @Override @@ -216,7 +216,7 @@ public final class ImsStreamMediaProfile implements Parcelable { out.writeInt(mVideoQuality); out.writeInt(mVideoDirection); out.writeInt(mRttMode); - out.writeBoolean(mHasRttAudioSpeech); + out.writeBoolean(mIsReceivingRttAudio); } private void readFromParcel(Parcel in) { @@ -225,7 +225,7 @@ public final class ImsStreamMediaProfile implements Parcelable { mVideoQuality = in.readInt(); mVideoDirection = in.readInt(); mRttMode = in.readInt(); - mHasRttAudioSpeech = in.readBoolean(); + mIsReceivingRttAudio = in.readBoolean(); } public static final Creator<ImsStreamMediaProfile> CREATOR = @@ -256,8 +256,12 @@ public final class ImsStreamMediaProfile implements Parcelable { mRttMode = rttMode; } - public void setRttAudioSpeech(boolean audioOn) { - mHasRttAudioSpeech = audioOn; + /** + * Sets whether the remote party is transmitting audio over the RTT call. + * @param audioOn true if audio is being received, false otherwise. + */ + public void setReceivingRttAudio(boolean audioOn) { + mIsReceivingRttAudio = audioOn; } public int getAudioQuality() { @@ -280,7 +284,10 @@ public final class ImsStreamMediaProfile implements Parcelable { return mRttMode; } - public boolean getRttAudioSpeech() { - return mHasRttAudioSpeech; + /** + * @return true if remote party is transmitting audio, false otherwise. + */ + public boolean isReceivingRttAudio() { + return mIsReceivingRttAudio; } } diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl index e9eba324acb0..5719124fd747 100644 --- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl @@ -84,6 +84,6 @@ interface ITelephonyRegistry { void notifyPreferredDataSubIdChanged(int preferredSubId); void notifyRadioPowerStateChanged(in int state); void notifyEmergencyNumberList(); - void notifyCallQualityChanged(in CallQuality callQuality, int phoneId); + void notifyCallQualityChanged(in CallQuality callQuality, int phoneId, int callNetworkType); void notifyImsDisconnectCause(int subId, in ImsReasonInfo imsReasonInfo); } diff --git a/test-base/Android.bp b/test-base/Android.bp index 157609cec09c..8aa0aaf363dd 100644 --- a/test-base/Android.bp +++ b/test-base/Android.bp @@ -44,7 +44,7 @@ java_sdk_library { // ========================================== // This is only intended for inclusion in the android.test.runner-minus-junit, // robolectric_android-all-stub and repackaged.android.test.* libraries. -// Must not be used elewhere. +// Must not be used elsewhere. java_library_static { name: "android.test.base_static", installable: false, @@ -61,19 +61,6 @@ java_library_static { sdk_version: "current", } -// Build the legacy-test library -// ============================= -// This contains the junit.framework and android.test classes that were in -// Android API level 25 excluding those from android.test.runner. -// Also contains the com.android.internal.util.Predicate[s] classes. -java_library { - name: "legacy-test", - installable: true, - - sdk_version: "current", - static_libs: ["android.test.base_static"], -} - // Build the repackaged.android.test.base library // ============================================== // This contains repackaged versions of the classes from @@ -93,8 +80,8 @@ java_library_static { // =============================================== // This contains the android.test classes from android.test.base plus // the com.android.internal.util.Predicate[s] classes. This is only -// intended for inclusion in the android.test.legacy and -// legacy-android-test static libraries and must not be used elsewhere. +// intended for inclusion in android.test.legacy and must not be used +// elsewhere. java_library_static { name: "android.test.base-minus-junit", diff --git a/test-legacy/Android.bp b/test-legacy/Android.bp deleted file mode 100644 index a69f422b3bdb..000000000000 --- a/test-legacy/Android.bp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// Build the legacy-android-test library -// ===================================== -// This contains the android.test classes that were in Android API level 25, -// including those from android.test.runner. -// Also contains the com.android.internal.util.Predicate[s] classes. -java_library_static { - name: "legacy-android-test", - - static_libs: [ - "android.test.base-minus-junit", - "android.test.runner-minus-junit", - "android.test.mock_static", - ], - - no_framework_libs: true, - libs: [ - "framework", - "junit", - ], -} diff --git a/test-legacy/Android.mk b/test-legacy/Android.mk index da47de0a3d35..af26c5b80717 100644 --- a/test-legacy/Android.mk +++ b/test-legacy/Android.mk @@ -24,35 +24,16 @@ ifeq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK))) # Built against the SDK so that it can be statically included in APKs # without breaking link type checks. # -# This builds directly from the source rather than simply statically -# including the android.test.base-minus-junit and -# android.test.runner-minus-junit libraries because the latter library -# cannot itself be built against the SDK. That is because it uses on -# an internal method (setTestContext) on the AndroidTestCase class. -# That class is provided by both the android.test.base-minus-junit and -# the current SDK and as the latter is first on the classpath its -# version is used. Unfortunately, it does not provide the internal -# method and so compilation fails. -# -# Building from source avoids that because the compiler will use the -# source version of AndroidTestCase instead of the one from the current -# SDK. -# -# The use of the internal method does not prevent this from being -# statically included because the class that provides the method is -# also included in this library. include $(CLEAR_VARS) LOCAL_MODULE := android.test.legacy -LOCAL_SRC_FILES := \ - $(call all-java-files-under, ../test-base/src/android) \ - $(call all-java-files-under, ../test-base/src/com) \ - $(call all-java-files-under, ../test-runner/src/android) \ - LOCAL_SDK_VERSION := current LOCAL_JAVA_LIBRARIES := junit android.test.mock.stubs +LOCAL_STATIC_JAVA_LIBRARIES := \ + android.test.base-minus-junit \ + android.test.runner-minus-junit \ include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/test-mock/Android.bp b/test-mock/Android.bp index 43b765d8b783..e1d6e01d6d06 100644 --- a/test-mock/Android.bp +++ b/test-mock/Android.bp @@ -30,19 +30,3 @@ java_sdk_library { srcs_lib_whitelist_pkgs: ["android"], compile_dex: true, } - -// Build the android.test.mock_static library -// ========================================== -// This is only intended for inclusion in the legacy-android-test. -// Must not be used elewhere. -java_library_static { - name: "android.test.mock_static", - - java_version: "1.8", - srcs: ["src/**/*.java"], - - no_framework_libs: true, - libs: [ - "framework", - ], -} diff --git a/test-runner/Android.bp b/test-runner/Android.bp index db5053eeb903..35212020be7b 100644 --- a/test-runner/Android.bp +++ b/test-runner/Android.bp @@ -45,7 +45,7 @@ java_sdk_library { // Build the android.test.runner-minus-junit library // ================================================= -// This is only intended for inclusion in the legacy-android-test static +// This is only intended for inclusion in the android.test.legacy static // library and must not be used elsewhere. java_library { name: "android.test.runner-minus-junit", diff --git a/tests/utils/SleepUtils/AlarmService/Android.mk b/tests/utils/SleepUtils/AlarmService/Android.mk deleted file mode 100644 index 9022f03b7cf2..000000000000 --- a/tests/utils/SleepUtils/AlarmService/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (C) 2013 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_SRC_FILES += \ - src/com/android/testing/alarmservice/Alarm.aidl -LOCAL_PACKAGE_NAME := SleepUtilsAlarmService -LOCAL_SDK_VERSION := 7 -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml b/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml deleted file mode 100644 index 1b6de39c91da..000000000000 --- a/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 The Android Open Source Project Licensed under the - Apache License, Version 2.0 (the "License"); you may not use this file except - in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed - under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES - OR CONDITIONS OF ANY KIND, either express or implied. See the License for - the specific language governing permissions and limitations under the License. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.testing.alarmservice" > - - <uses-sdk android:minSdkVersion="7" /> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - - <application android:label="Sleep Utils Alarm Service"> - <service android:name=".AlarmService" - android:label="Sleep Utils Alarm Service" - android:exported="true" - android:enabled="true"> - <intent-filter> - <action android:name="com.android.testing.ALARM_SERVICE" /> - </intent-filter> - </service> - <receiver android:name=".WakeUpCall"> - <intent-filter> - <action android:name="com.android.testing.alarmservice.WAKEUP" /> - </intent-filter> - </receiver> - </application> -</manifest> diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl deleted file mode 100644 index 62a8c4866f07..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -interface Alarm { - int prepare(); - int setAlarmAndWait(long timeoutMills); - int done(); -}
\ No newline at end of file diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java deleted file mode 100644 index 122d55deb3e5..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.os.RemoteException; -import android.os.SystemClock; -import android.util.Log; - -import com.android.testing.alarmservice.Alarm.Stub; - -public class AlarmImpl extends Stub { - - private static final String LOG_TAG = AlarmImpl.class.getSimpleName(); - - private Context mContext; - - public AlarmImpl(Context context) { - super(); - mContext = context; - } - - @Override - public int prepare() throws RemoteException { - WakeUpController.getController().getWakeLock().acquire(); - Log.d(LOG_TAG, "AlarmService prepared, wake lock acquired"); - return 0; - } - - @Override - public int setAlarmAndWait(long timeoutMills) throws RemoteException { - // calculate when device should be waken up - long atTime = SystemClock.elapsedRealtime() + timeoutMills; - AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); - Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL); - PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, wakupIntent, 0); - // set alarm, which will be delivered in form of the wakeupIntent - am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); - Log.d(LOG_TAG, String.format("Alarm set: %d, giving up wake lock", atTime)); - Object lock = WakeUpController.getController().getWakeSync(); - // release wakelock and wait for the lock to be poked from the broadcast receiver - WakeUpController.getController().getWakeLock().release(); - // does not really matter if device enters suspend before we start waiting on lock - synchronized (lock) { - try { - lock.wait(); - } catch (InterruptedException e) { - } - } - Log.d(LOG_TAG, String.format("Alarm triggered, done waiting")); - return 0; - } - - @Override - public int done() throws RemoteException { - WakeUpController.getController().getWakeLock().release(); - return 0; - } - -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java deleted file mode 100644 index 576a1cfcfbaf..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; - -public class AlarmService extends Service { - - private AlarmImpl mAlarmImpl = null; - static Context sContext; - - @Override - public void onCreate() { - super.onCreate(); - sContext = this; - } - - @Override - public IBinder onBind(Intent intent) { - return getAlarmImpl(); - } - - private AlarmImpl getAlarmImpl() { - if (mAlarmImpl == null) { - mAlarmImpl = new AlarmImpl(this); - } - return mAlarmImpl; - } - - @Override - public void onDestroy() { - sContext = null; - super.onDestroy(); - } -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java deleted file mode 100644 index f4bb4dba4cda..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -/** - * The receiver for the alarm we set - * - */ -public class WakeUpCall extends BroadcastReceiver { - - public static final String WAKEUP_CALL = "com.android.testing.alarmservice.WAKEUP"; - - @Override - public void onReceive(Context context, Intent intent) { - // we acquire wakelock without release because user is supposed to manually release it - WakeUpController.getController().getWakeLock().acquire(); - Object lock = WakeUpController.getController().getWakeSync(); - synchronized (lock) { - // poke the lock so the service side can be woken from waiting on the lock - lock.notifyAll(); - } - } - -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java deleted file mode 100644 index 478371f61f36..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.content.Context; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.util.Log; - -/** - * A singleton used for controlling and sharing of states/wakelocks - * - */ -public class WakeUpController { - - private static final String LOG_TAG = WakeUpController.class.getName(); - private static WakeUpController mController = null; - private WakeLock mWakeLock = null; - private Object mWakeSync = new Object(); - - private WakeUpController() { - Log.i(LOG_TAG, "Created instance: 0x" + Integer.toHexString(this.hashCode())); - } - - public static synchronized WakeUpController getController() { - if (mController == null) { - mController = new WakeUpController(); - } - return mController; - } - - public WakeLock getWakeLock() { - if (mWakeLock == null) { - PowerManager pm = - (PowerManager) AlarmService.sContext.getSystemService(Context.POWER_SERVICE); - mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "testing-alarmservice"); - Log.i(LOG_TAG, "Create wakelock: 0x" + Integer.toHexString(mWakeLock.hashCode())); - } - return mWakeLock; - } - - public Object getWakeSync() { - return mWakeSync; - } -} diff --git a/tests/utils/SleepUtils/Android.mk b/tests/utils/SleepUtils/Android.mk deleted file mode 100644 index 0e65e2255c5b..000000000000 --- a/tests/utils/SleepUtils/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/tests/utils/SleepUtils/README b/tests/utils/SleepUtils/README deleted file mode 100644 index bfe07da4a389..000000000000 --- a/tests/utils/SleepUtils/README +++ /dev/null @@ -1,23 +0,0 @@ -This folder contains utils to properly perform timed suspend and wakeup. - -AlarmService - a service that client can bind to and perform: -1) holding wakelock (singleton to this service) -2) setting alarm for a specified period and releasing the wakelock; service - call will block until alarm has been triggered and the wakelock is held -3) releasing the wakelock - -SleepHelper - a self instrumentation meant as a convenient way to trigger -the service functions from command line. Corresponding to service function -above, supported operations are: -1) holding wakelock -am instrument -w -e command prepare \ - com.android.testing.sleephelper/.SetAlarm - -2) setting alarm and wait til triggered -am instrument -w -e command set_wait \ - -e param <time in ms> com.android.testing.sleephelper/.SetAlarm -Note: for the function to work properly, "-w" parameter is required - -3) releasing wakelock -am instrument -w -e command done \ - com.android.testing.sleephelper/.SetAlarm diff --git a/tests/utils/SleepUtils/SleepHelper/Android.mk b/tests/utils/SleepUtils/SleepHelper/Android.mk deleted file mode 100644 index f8267fd530ed..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (C) 2013 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_SRC_FILES += \ - ../AlarmService/src/com/android/testing/alarmservice/Alarm.aidl -LOCAL_SDK_VERSION := 7 -LOCAL_PACKAGE_NAME := SleepUtilsSleepHelper - -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml b/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml deleted file mode 100644 index 0f1d49185169..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 The Android Open Source Project Licensed under the - Apache License, Version 2.0 (the "License"); you may not use this file except - in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed - under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES - OR CONDITIONS OF ANY KIND, either express or implied. See the License for - the specific language governing permissions and limitations under the License. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.testing.sleephelper"> - - <uses-sdk android:minSdkVersion="7" /> - <instrumentation android:label="Sleep Helper" - android:name="com.android.testing.sleephelper.SetAlarm" - android:targetPackage="com.android.testing.sleephelper" /> - - <application android:label="Sleep Utils Sleep Helper"> - <uses-library android:name="android.test.runner" /> - </application> -</manifest> diff --git a/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java b/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java deleted file mode 100644 index b558741da908..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.sleephelper; - -import android.app.Activity; -import android.app.Instrumentation; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.os.Bundle; -import android.os.Debug; -import android.os.IBinder; -import android.os.RemoteException; -import android.util.Log; - -import com.android.testing.alarmservice.Alarm; - -public class SetAlarm extends Instrumentation { - - private static final String COMMAND = "command"; - private static final String PARAM = "param"; - private static final String CMD_PREPARE = "prepare"; - private static final String CMD_SET = "set_wait"; - private static final String CMD_DONE = "done"; - private static final String SERVICE_ACTION = "com.android.testing.ALARM_SERVICE"; - private static final String SERVICE_PKG = "com.android.testing.alarmservice"; - private static final String LOG_TAG = SetAlarm.class.getSimpleName(); - - private Alarm mAlarmService = null; - private Bundle mArgs = null; - private String mCommand = null; - private Intent mServceIntent = new Intent(SERVICE_ACTION).setPackage(SERVICE_PKG); - - private ServiceConnection mConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - Log.d(LOG_TAG, "Service disconnected."); - mAlarmService = null; - errorFinish("service disconnected"); - } - - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - Log.d(LOG_TAG, "Service connected."); - mAlarmService = Alarm.Stub.asInterface(service); - handleCommands(); - } - }; - - - private void handleCommands() { - if (CMD_PREPARE.equals(mCommand)) { - callPrepare(); - } else if (CMD_SET.equals(mCommand)) { - String paramString = mArgs.getString(PARAM); - if (paramString == null) { - errorFinish("argument expected for alarm time"); - } - long timeout = -1; - try { - timeout = Long.parseLong(paramString); - } catch (NumberFormatException nfe) { - errorFinish("a number argument is expected"); - } - callSetAndWait(timeout); - } else if (CMD_DONE.equals(mCommand)) { - callDone(); - } else { - errorFinish("Unrecognized command: " + mCommand); - } - finish(Activity.RESULT_OK, new Bundle()); - } - - @Override - public void onCreate(Bundle arguments) { - super.onCreate(arguments); - mCommand = arguments.getString(COMMAND); - if ("true".equals(arguments.getString("debug"))) { - Debug.waitForDebugger(); - } - if (mCommand == null) { - errorFinish("No command specified"); - } - mArgs = arguments; - connectToAlarmService(); - } - - private void errorFinish(String msg) { - Bundle ret = new Bundle(); - ret.putString("error", msg); - finish(Activity.RESULT_CANCELED, ret); - } - - private void connectToAlarmService() { - // start the service with an intent, this ensures the service keeps running after unbind - ComponentName cn = getContext().startService(mServceIntent); - if (cn == null) { - errorFinish("failed to start service"); - } - if (!getContext().bindService(mServceIntent, mConn, Context.BIND_AUTO_CREATE)) { - errorFinish("failed to bind service"); - } - } - - private void callPrepare() { - try { - mAlarmService.prepare(); - } catch (RemoteException e) { - errorFinish("RemoteExeption in prepare()"); - } finally { - getContext().unbindService(mConn); - } - } - - private void callDone() { - try { - mAlarmService.done(); - } catch (RemoteException e) { - errorFinish("RemoteExeption in prepare()"); - } finally { - getContext().unbindService(mConn); - } - // explicitly stop the service (started in prepare()) so that the service is now free - // to be reclaimed - getContext().stopService(mServceIntent); - } - - private void callSetAndWait(long timeoutMills) { - try { - mAlarmService.setAlarmAndWait(timeoutMills); - } catch (RemoteException e) { - errorFinish("RemoteExeption in setAlarmAndWait()"); - } finally { - getContext().unbindService(mConn); - } - } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/Android.mk b/tests/utils/SleepUtils/WakeLoopService/Android.mk deleted file mode 100644 index a8a944b215d2..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/Android.mk +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (C) 2014 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_PACKAGE_NAME := WakeupLoopService -LOCAL_SDK_VERSION := 7 -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml b/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml deleted file mode 100644 index a7028c4f671e..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2014 The Android Open Source Project Licensed under the - Apache License, Version 2.0 (the "License"); you may not use this file except - in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed - under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES - OR CONDITIONS OF ANY KIND, either express or implied. See the License for - the specific language governing permissions and limitations under the License. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="android.test.wakeuploop" > - - <uses-sdk android:minSdkVersion="7" /> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - - <application android:label="Auto Wakeup Loop"> - <service android:name=".WakeLoopService" - android:label="Wakup Loop Service" - android:exported="true" - android:enabled="true"> - <intent-filter> - <action android:name="android.test.wakeuploop.WAKEUP_SERVICE" /> - </intent-filter> - </service> - <receiver android:name=".WakeUpCall"> - <intent-filter> - <action android:name="android.test.wakeuploop.WAKEUP" /> - </intent-filter> - </receiver> - </application> -</manifest> diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java deleted file mode 100644 index c8b075b4a90f..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.util.Log; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class FileUtil { - - private static FileUtil sInst = null; - private static DateFormat sDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - private FileUtil() {}; - - public static FileUtil get() { - if (sInst == null) { - sInst = new FileUtil(); - } - return sInst; - } - - public void writeDateToFile(File file) { - try { - FileOutputStream fos = new FileOutputStream(file); - fos.write(sDateFormat.format(new Date()).getBytes()); - fos.write('\n'); - fos.flush(); - fos.close(); - } catch (IOException ioe) { - Log.e("FileUtil", "exception writing date to file", ioe); - } - } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java deleted file mode 100644 index 4f557b8786f4..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Environment; -import android.os.Handler; -import android.os.IBinder; -import android.os.Message; -import android.os.Messenger; -import android.os.SystemClock; -import android.util.Log; - -import java.io.File; - -public class WakeLoopService extends Service { - - private static final String LOG_TAG = WakeLoopService.class.getSimpleName(); - static final String WAKEUP_INTERNAL = "WAKEUP_INTERVAL"; - static final String MAX_LOOP = "MAX_LOOP"; - static final String STOP_CALLBACK = "STOP_CALLBACK"; - static final String THIS_LOOP = "THIS_LOOP"; - static final int MSG_STOP_SERVICE = 0xd1ed1e; - - private final Handler mHandler = new Handler() { - public void handleMessage(Message msg) { - if (msg.what == MSG_STOP_SERVICE) { - stopSelf(); - } else { - super.handleMessage(msg); - } - }; - }; - - @Override - public IBinder onBind(Intent intent) { - // no binding, just start via intent - return null; - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - // get wakeup interval from intent - long wakeupInterval = intent.getLongExtra(WAKEUP_INTERNAL, 0); - long maxLoop = intent.getLongExtra(MAX_LOOP, 0); - - if (wakeupInterval == 0) { - // stop and error - Log.e(LOG_TAG, "No wakeup interval specified, not starting the service"); - stopSelf(); - return START_NOT_STICKY; - } - FileUtil.get().writeDateToFile(new File(Environment.getExternalStorageDirectory(), - "wakeup-loop-start.txt")); - Log.d(LOG_TAG, String.format("WakeLoop: STARTED interval = %d, total loop = %d", - wakeupInterval, maxLoop)); - // calculate when device should be waken up - long atTime = SystemClock.elapsedRealtime() + wakeupInterval; - AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE); - Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL) - .putExtra(WAKEUP_INTERNAL, wakeupInterval) - .putExtra(MAX_LOOP, maxLoop) - .putExtra(THIS_LOOP, 0L) - .putExtra(STOP_CALLBACK, new Messenger(mHandler)); - PendingIntent pi = PendingIntent.getBroadcast(this, 0, wakupIntent, - PendingIntent.FLAG_UPDATE_CURRENT); - // set alarm, which will be delivered in form of the wakeupIntent - am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); - return START_NOT_STICKY; - } - - @Override - public void onDestroy() { - Log.d(LOG_TAG, "WakeLoop: STOPPED"); - // cancel alarms first - Intent intent = new Intent(WakeUpCall.WAKEUP_CALL) - .putExtra(WakeUpCall.CANCEL, "true"); - sendBroadcast(intent); - } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java deleted file mode 100644 index 8347bbf0c1c7..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Environment; -import android.os.Message; -import android.os.Messenger; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.os.RemoteException; -import android.os.SystemClock; -import android.util.Log; - -import java.io.File; - -/** - * The receiver for the alarm we set - * - */ -public class WakeUpCall extends BroadcastReceiver { - private static final String LOG_TAG = WakeUpCall.class.getSimpleName(); - static final String WAKEUP_CALL = "android.test.wakeuploop.WAKEUP"; - static final String CANCEL = "CANCEL"; - - @Override - public void onReceive(Context context, Intent intent) { - AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - boolean cancel = intent.hasExtra(CANCEL); - if (!cancel) { - long maxLoop = intent.getLongExtra(WakeLoopService.MAX_LOOP, 0); - long wakeupInterval = intent.getLongExtra(WakeLoopService.WAKEUP_INTERNAL, 0); - long thisLoop = intent.getLongExtra(WakeLoopService.THIS_LOOP, -1); - Log.d(LOG_TAG, String.format("incoming: interval = %d, max loop = %d, this loop = %d", - wakeupInterval, maxLoop, thisLoop)); - if (thisLoop == -1) { - Log.e(LOG_TAG, "no valid loop count received, trying to stop service"); - stopService(intent); - return; - } - if (wakeupInterval == 0) { - Log.e(LOG_TAG, "no valid wakeup interval received, trying to stop service"); - stopService(intent); - return; - } - thisLoop++; - Log.d(LOG_TAG, String.format("WakeLoop - iteration %d of %d", thisLoop, maxLoop)); - if (thisLoop == maxLoop) { - // when maxLoop is 0, we loop forever, so not checking that case - // here - Log.d(LOG_TAG, "reached max loop count, stopping service"); - stopService(intent); - return; - } - screenOn(context); - FileUtil.get().writeDateToFile( - new File(Environment.getExternalStorageDirectory(), "wakeup-loop.txt")); - // calculate when device should be waken up - long atTime = SystemClock.elapsedRealtime() + wakeupInterval; - intent.putExtra(WakeLoopService.THIS_LOOP, thisLoop); - PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); - // set alarm, which will be delivered in form of the wakeupIntent - am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); - } else { - // cancel alarms - Log.d(LOG_TAG, "cancelling future alarms on request"); - am.cancel(PendingIntent.getBroadcast(context, 0, intent, 0)); - } - } - - private void stopService(Intent i) { - Messenger msgr = i.getParcelableExtra(WakeLoopService.STOP_CALLBACK); - if (msgr == null) { - Log.e(LOG_TAG, "no stop service callback found, cannot stop"); - } else { - Message msg = new Message(); - msg.what = WakeLoopService.MSG_STOP_SERVICE; - try { - msgr.send(msg); - } catch (RemoteException e) { - Log.e(LOG_TAG, "ignored remoted exception while attempting to stop service", e); - } - } - } - - private void screenOn(Context context) { - PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); - @SuppressWarnings("deprecation") - WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | - PowerManager.ACQUIRE_CAUSES_WAKEUP, LOG_TAG); - wl.acquire(500); - } -} |