Merge "Test: Adding Test Cases to AidGroupTest" into main
diff --git a/OWNERS b/OWNERS
index d0a634e..058ea36 100644
--- a/OWNERS
+++ b/OWNERS
@@ -34,6 +34,8 @@
per-file *ravenwood* = file:ravenwood/OWNERS
per-file *Ravenwood* = file:ravenwood/OWNERS
+per-file PREUPLOAD.cfg = file:/PREUPLOAD_OWNERS
+
per-file INPUT_OWNERS = file:/INPUT_OWNERS
per-file ZYGOTE_OWNERS = file:/ZYGOTE_OWNERS
per-file SQLITE_OWNERS = file:/SQLITE_OWNERS
@@ -48,3 +50,4 @@
per-file ADPF_OWNERS = file:/ADPF_OWNERS
per-file GAME_MANAGER_OWNERS = file:/GAME_MANAGER_OWNERS
per-file SDK_OWNERS = file:/SDK_OWNERS
+per-file PREUPLOAD_OWNERS = file:/PREUPLOAD_OWNERS
diff --git a/PREUPLOAD_OWNERS b/PREUPLOAD_OWNERS
new file mode 100644
index 0000000..ece4d3e
--- /dev/null
+++ b/PREUPLOAD_OWNERS
@@ -0,0 +1,2 @@
+roosa@google.com
+gsennton@google.com
diff --git a/apct-tests/perftests/core/src/android/libcore/ZipFilePerfTest.java b/apct-tests/perftests/core/src/android/libcore/ZipFilePerfTest.java
index ed669be..c775280 100644
--- a/apct-tests/perftests/core/src/android/libcore/ZipFilePerfTest.java
+++ b/apct-tests/perftests/core/src/android/libcore/ZipFilePerfTest.java
@@ -63,14 +63,12 @@
@Test
@Parameters(method = "getData")
- public void timeZipFileOpen(int numEntries) throws Exception {
+ public void timeZipFileOpenClose(int numEntries) throws Exception {
setUp(numEntries);
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
while (state.keepRunning()) {
ZipFile zf = new ZipFile(mFile);
- state.pauseTiming();
zf.close();
- state.resumeTiming();
}
}
diff --git a/core/api/current.txt b/core/api/current.txt
index 5792105..16852ae 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -13034,6 +13034,7 @@
method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int);
method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle);
method @NonNull public abstract CharSequence getUserBadgedLabel(@NonNull CharSequence, @NonNull android.os.UserHandle);
+ method @FlaggedApi("android.content.pm.cloud_compilation_pm") @NonNull public static android.content.pm.SigningInfo getVerifiedSigningInfo(@NonNull String, int) throws android.content.pm.SigningInfoException;
method @NonNull @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions(@NonNull String, int);
method @Nullable public abstract android.content.res.XmlResourceParser getXml(@NonNull String, @XmlRes int, @Nullable android.content.pm.ApplicationInfo);
method public boolean hasSigningCertificate(@NonNull String, @NonNull byte[], int);
@@ -13672,8 +13673,17 @@
method public android.content.pm.Signature[] getSigningCertificateHistory();
method public boolean hasMultipleSigners();
method public boolean hasPastSigningCertificates();
+ method @FlaggedApi("android.content.pm.cloud_compilation_pm") public boolean signersMatchExactly(@NonNull android.content.pm.SigningInfo);
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SigningInfo> CREATOR;
+ field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_JAR = 1; // 0x1
+ field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V2 = 2; // 0x2
+ field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V3 = 3; // 0x3
+ field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V4 = 4; // 0x4
+ }
+
+ @FlaggedApi("android.content.pm.cloud_compilation_pm") public class SigningInfoException extends java.lang.Exception {
+ method @FlaggedApi("android.content.pm.cloud_compilation_pm") public int getCode();
}
public final class VersionedPackage implements android.os.Parcelable {
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt
index 5790a73..b2331cb 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -129,7 +129,6 @@
public abstract class PackageManager {
method @NonNull public String getSdkSandboxPackageName();
- method @FlaggedApi("android.content.pm.cloud_compilation_pm") @NonNull public static android.content.pm.SigningInfo getVerifiedSigningInfo(@NonNull String, int) throws android.content.pm.SigningInfoException;
method @RequiresPermission(android.Manifest.permission.MAKE_UID_VISIBLE) public void makeUidVisible(int, int);
field public static final String EXTRA_VERIFICATION_ROOT_HASH = "android.content.pm.extra.VERIFICATION_ROOT_HASH";
field public static final int MATCH_STATIC_SHARED_AND_SDK_LIBRARIES = 67108864; // 0x4000000
@@ -140,18 +139,6 @@
method @NonNull public String getPackageName();
}
- public final class SigningInfo implements android.os.Parcelable {
- method @FlaggedApi("android.content.pm.cloud_compilation_pm") public boolean signersMatchExactly(@NonNull android.content.pm.SigningInfo);
- field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_JAR = 1; // 0x1
- field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V2 = 2; // 0x2
- field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V3 = 3; // 0x3
- field @FlaggedApi("android.content.pm.cloud_compilation_pm") public static final int VERSION_SIGNING_BLOCK_V4 = 4; // 0x4
- }
-
- @FlaggedApi("android.content.pm.cloud_compilation_pm") public class SigningInfoException extends java.lang.Exception {
- method @FlaggedApi("android.content.pm.cloud_compilation_pm") public int getCode();
- }
-
}
package android.hardware.usb {
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 759d191..07775f7 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -11863,11 +11863,8 @@
* file.
*
* @throws SigningInfoException if the verification fails
- *
- * @hide
*/
@FlaggedApi(android.content.pm.Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static @NonNull SigningInfo getVerifiedSigningInfo(@NonNull String path,
@AppSigningSchemeVersion int minAppSigningSchemeVersion) throws SigningInfoException {
ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
diff --git a/core/java/android/content/pm/SigningInfo.java b/core/java/android/content/pm/SigningInfo.java
index e4fbd1f..21bbb0a 100644
--- a/core/java/android/content/pm/SigningInfo.java
+++ b/core/java/android/content/pm/SigningInfo.java
@@ -22,7 +22,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
import android.content.pm.SigningDetails.SignatureSchemeVersion;
import android.os.Parcel;
import android.os.Parcelable;
@@ -40,41 +39,29 @@
/**
* JAR signing (v1 scheme).
* See https://source.android.com/docs/security/features/apksigning#v1.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static final int VERSION_JAR = SignatureSchemeVersion.JAR;
/**
* APK signature scheme v2.
* See https://source.android.com/docs/security/features/apksigning/v2.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static final int VERSION_SIGNING_BLOCK_V2 = SignatureSchemeVersion.SIGNING_BLOCK_V2;
/**
* APK signature scheme v3.
* See https://source.android.com/docs/security/features/apksigning/v3.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static final int VERSION_SIGNING_BLOCK_V3 = SignatureSchemeVersion.SIGNING_BLOCK_V3;
/**
* APK signature scheme v4.
* See https://source.android.com/docs/security/features/apksigning/v4.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static final int VERSION_SIGNING_BLOCK_V4 = SignatureSchemeVersion.SIGNING_BLOCK_V4;
/** @hide */
@@ -255,11 +242,8 @@
/**
* Returns true if the signing certificates in this and other match exactly.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
- @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public boolean signersMatchExactly(@NonNull SigningInfo other) {
return mSigningDetails.signaturesMatchExactly(other.mSigningDetails);
}
diff --git a/core/java/android/content/pm/SigningInfoException.java b/core/java/android/content/pm/SigningInfoException.java
index a81e07e..2fd1bfb 100644
--- a/core/java/android/content/pm/SigningInfoException.java
+++ b/core/java/android/content/pm/SigningInfoException.java
@@ -19,17 +19,13 @@
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
/**
* Indicates an error when verifying the
* <a href="https://source.android.com/docs/security/features/apksigning">app signing</a>
* information.
- *
- * @hide
*/
@FlaggedApi(Flags.FLAG_CLOUD_COMPILATION_PM)
-@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public class SigningInfoException extends Exception {
private final int mCode;
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java
index ddf2b61..0125905 100644
--- a/core/java/android/os/Looper.java
+++ b/core/java/android/os/Looper.java
@@ -332,16 +332,55 @@
return -1;
}
+ private static int getThreadGroup() {
+ int threadGroup = Process.THREAD_GROUP_DEFAULT;
+
+ if (!Process.isIsolated()) {
+ threadGroup = Process.getProcessGroup(Process.myTid());
+ }
+ return threadGroup;
+ }
+
+ private static String threadGroupToString(int threadGroup) {
+ switch (threadGroup) {
+ case Process.THREAD_GROUP_BACKGROUND:
+ return "BACKGROUND";
+ case Process.THREAD_GROUP_FOREGROUND:
+ return "FOREGROUND";
+ case Process.THREAD_GROUP_SYSTEM:
+ return "SYSTEM";
+ case Process.THREAD_GROUP_AUDIO_APP:
+ return "AUDIO_APP";
+ case Process.THREAD_GROUP_AUDIO_SYS:
+ return "AUDIO_SYS";
+ case Process.THREAD_GROUP_TOP_APP:
+ return "TOP_APP";
+ case Process.THREAD_GROUP_RT_APP:
+ return "RT_APP";
+ case Process.THREAD_GROUP_RESTRICTED:
+ return "RESTRICTED";
+ default:
+ return "UNKNOWN";
+ }
+ }
+
private static boolean showSlowLog(long threshold, long measureStart, long measureEnd,
String what, Message msg) {
final long actualTime = measureEnd - measureStart;
if (actualTime < threshold) {
return false;
}
+
+ String name = Process.myProcessName();
+ String threadGroup = threadGroupToString(getThreadGroup());
+ boolean isMain = myLooper() == getMainLooper();
+
// For slow delivery, the current message isn't really important, but log it anyway.
Slog.w(TAG, "Slow " + what + " took " + actualTime + "ms "
- + Thread.currentThread().getName() + " h="
- + msg.target.getClass().getName() + " c=" + msg.callback + " m=" + msg.what);
+ + Thread.currentThread().getName() + " app=" + name
+ + " main=" + isMain + " group=" + threadGroup
+ + " h=" + msg.target.getClass().getName() + " c=" + msg.callback
+ + " m=" + msg.what);
return true;
}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 851953a..80a8dbe 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -560,10 +560,9 @@
* Foreground thread group - All threads in
* this group are scheduled with a normal share of the CPU.
* Value is same as constant SP_FOREGROUND of enum SchedPolicy.
- * Not used at this level.
* @hide
**/
- private static final int THREAD_GROUP_FOREGROUND = 1;
+ public static final int THREAD_GROUP_FOREGROUND = 1;
/**
* System thread group.
@@ -1316,19 +1315,6 @@
}
/**
- * Adjust the swappiness level for a process.
- *
- * @param pid The process identifier to set.
- * @param is_increased Whether swappiness should be increased or default.
- *
- * @return Returns true if the underlying system supports this
- * feature, else false.
- *
- * {@hide}
- */
- public static final native boolean setSwappiness(int pid, boolean is_increased);
-
- /**
* Change this process's argv[0] parameter. This can be useful to show
* more descriptive information in things like the 'ps' command.
*
diff --git a/core/java/com/android/internal/app/NfcResolverActivity.java b/core/java/com/android/internal/app/NfcResolverActivity.java
index 78427fe..f15dbd6 100644
--- a/core/java/com/android/internal/app/NfcResolverActivity.java
+++ b/core/java/com/android/internal/app/NfcResolverActivity.java
@@ -34,13 +34,13 @@
@Override
@SuppressWarnings("MissingSuperCall") // Called indirectly via `super_onCreate()`.
protected void onCreate(Bundle savedInstanceState) {
- if (!enableNfcMainline()) {
+ Intent intent = getIntent();
+ if (!enableNfcMainline() || intent.getExtras() == null) {
super_onCreate(savedInstanceState);
finish();
return;
}
- Intent intent = getIntent();
Intent target = intent.getParcelableExtra(Intent.EXTRA_INTENT, Intent.class);
ArrayList<ResolveInfo> rList =
intent.getParcelableArrayListExtra(
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 4369cb0..22d5ab8 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -584,32 +584,6 @@
return pri;
}
-jboolean android_os_Process_setSwappiness(JNIEnv *env, jobject clazz,
- jint pid, jboolean is_increased)
-{
- char text[64];
-
- if (is_increased) {
- strcpy(text, "/sys/fs/cgroup/memory/sw/tasks");
- } else {
- strcpy(text, "/sys/fs/cgroup/memory/tasks");
- }
-
- struct stat st;
- if (stat(text, &st) || !S_ISREG(st.st_mode)) {
- return false;
- }
-
- int fd = open(text, O_WRONLY | O_CLOEXEC);
- if (fd >= 0) {
- sprintf(text, "%" PRId32, pid);
- write(fd, text, strlen(text));
- close(fd);
- }
-
- return true;
-}
-
void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name)
{
if (name == NULL) {
@@ -1392,7 +1366,6 @@
{"getProcessGroup", "(I)I", (void*)android_os_Process_getProcessGroup},
{"createProcessGroup", "(II)I", (void*)android_os_Process_createProcessGroup},
{"getExclusiveCores", "()[I", (void*)android_os_Process_getExclusiveCores},
- {"setSwappiness", "(IZ)Z", (void*)android_os_Process_setSwappiness},
{"setArgV0Native", "(Ljava/lang/String;)V", (void*)android_os_Process_setArgV0},
{"setUid", "(I)I", (void*)android_os_Process_setUid},
{"setGid", "(I)I", (void*)android_os_Process_setGid},
diff --git a/core/jni/com_android_internal_content_FileSystemUtils.cpp b/core/jni/com_android_internal_content_FileSystemUtils.cpp
index 76ead2a..48c92c8 100644
--- a/core/jni/com_android_internal_content_FileSystemUtils.cpp
+++ b/core/jni/com_android_internal_content_FileSystemUtils.cpp
@@ -21,8 +21,6 @@
#include <android-base/file.h>
#include <android-base/hex.h>
#include <android-base/unique_fd.h>
-#include <bionic/macros.h>
-#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <linux/fs.h>
@@ -48,8 +46,8 @@
return false;
}
- start = align_up(start, blockSize);
- end = align_down(end, blockSize);
+ start = __builtin_align_up(start, blockSize);
+ end = __builtin_align_down(end, blockSize);
uint64_t alignedLength;
if (__builtin_sub_overflow(end, start, &alignedLength)) {
@@ -67,7 +65,7 @@
int result =
fallocate(fd.get(), FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, start, alignedLength);
if (result < 0) {
- ALOGE("fallocate failed to punch hole, error:%d", errno);
+ ALOGE("fallocate failed to punch hole: %m");
return false;
}
@@ -78,7 +76,7 @@
const std::vector<Elf64_Phdr> &programHeaders) {
struct stat64 beforePunch;
if (int result = lstat64(filePath, &beforePunch); result != 0) {
- ALOGE("lstat64 failed for filePath %s, error:%d", filePath, errno);
+ ALOGE("lstat64 failed for filePath %s: %m", filePath);
return false;
}
@@ -190,7 +188,7 @@
IF_ALOGD() {
struct stat64 afterPunch;
if (int result = lstat64(filePath, &afterPunch); result != 0) {
- ALOGD("lstat64 failed for filePath %s, error:%d", filePath, errno);
+ ALOGD("lstat64 failed for filePath %s: %m", filePath);
return false;
}
ALOGD("Size after punching holes st_blocks: %" PRIu64 ", st_blksize: %" PRIu64
@@ -269,7 +267,7 @@
struct stat64 beforePunch;
if (int result = lstat64(filePath, &beforePunch); result != 0) {
- ALOGE("lstat64 failed for filePath %s, error:%d", filePath, errno);
+ ALOGE("lstat64 failed for filePath %s: %m", filePath);
return false;
}
@@ -348,7 +346,7 @@
IF_ALOGD() {
struct stat64 afterPunch;
if (int result = lstat64(filePath, &afterPunch); result != 0) {
- ALOGD("lstat64 failed for filePath %s, error:%d", filePath, errno);
+ ALOGD("lstat64 failed for filePath %s: %m", filePath);
return false;
}
ALOGD("punchHolesInApk:: Size after punching holes st_blocks: %" PRIu64
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index fc184fe..8419ce7 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -1149,9 +1149,9 @@
static jobject getJavaResources(
JNIEnv *env,
- const std::vector<MediaCodec::InstanceResourceInfo>& resources) {
+ const std::vector<InstanceResourceInfo>& resources) {
jobject resourcesObj = env->NewObject(gArrayListInfo.clazz, gArrayListInfo.ctorId);
- for (const MediaCodec::InstanceResourceInfo& res : resources) {
+ for (const InstanceResourceInfo& res : resources) {
ScopedLocalRef<jobject> object{env, env->NewObject(
gInstanceResourceInfo.clazz, gInstanceResourceInfo.ctorId)};
ScopedLocalRef<jstring> nameStr{env, env->NewStringUTF(res.mName.c_str())};
@@ -1169,7 +1169,7 @@
}
status_t JMediaCodec::getRequiredResources(JNIEnv *env, jobject *resourcesObj) {
- std::vector<MediaCodec::InstanceResourceInfo> resources;
+ std::vector<InstanceResourceInfo> resources;
status_t status = mCodec->getRequiredResources(resources);
if (status != OK) {
return status;
@@ -3615,9 +3615,9 @@
static jobject getJavaResources(
JNIEnv *env,
- const std::vector<MediaCodec::GlobalResourceInfo>& resources) {
+ const std::vector<GlobalResourceInfo>& resources) {
jobject resourcesObj = env->NewObject(gArrayListInfo.clazz, gArrayListInfo.ctorId);
- for (const MediaCodec::GlobalResourceInfo& res : resources) {
+ for (const GlobalResourceInfo& res : resources) {
ScopedLocalRef<jobject> object{env, env->NewObject(
gGlobalResourceInfo.clazz, gGlobalResourceInfo.ctorId)};
ScopedLocalRef<jstring> nameStr{env, env->NewStringUTF(res.mName.c_str())};
@@ -3633,7 +3633,7 @@
static jobject android_media_MediaCodec_getGloballyAvailableResources(
JNIEnv *env, jobject thiz) {
(void)thiz;
- std::vector<MediaCodec::GlobalResourceInfo> resources;
+ std::vector<GlobalResourceInfo> resources;
status_t status = MediaCodec::getGloballyAvailableResources(resources);
if (status != OK) {
if (status == ERROR_UNSUPPORTED) {
diff --git a/nfc/Android.bp b/nfc/Android.bp
index abe0ab7..b82dec8 100644
--- a/nfc/Android.bp
+++ b/nfc/Android.bp
@@ -71,6 +71,7 @@
"//cts/hostsidetests/multidevices/nfc:__subpackages__",
"//cts/tests/tests/nfc",
"//packages/apps/Nfc:__subpackages__",
+ "//packages/modules/Nfc:__subpackages__",
],
jarjar_rules: ":nfc-jarjar-rules",
lint: {
diff --git a/nfc/OWNERS b/nfc/OWNERS
index 35e9713..f46dccd 100644
--- a/nfc/OWNERS
+++ b/nfc/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS
+include platform/packages/apps/Nfc:/OWNERS
\ No newline at end of file
diff --git a/nfc/java/android/nfc/cardemulation/OWNERS b/nfc/java/android/nfc/cardemulation/OWNERS
deleted file mode 100644
index 35e9713..0000000
--- a/nfc/java/android/nfc/cardemulation/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS
diff --git a/nfc/java/android/nfc/dta/OWNERS b/nfc/java/android/nfc/dta/OWNERS
deleted file mode 100644
index 35e9713..0000000
--- a/nfc/java/android/nfc/dta/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS
diff --git a/nfc/java/android/nfc/tech/OWNERS b/nfc/java/android/nfc/tech/OWNERS
deleted file mode 100644
index 35e9713..0000000
--- a/nfc/java/android/nfc/tech/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS
diff --git a/packages/Shell/OWNERS b/packages/Shell/OWNERS
index c3ecff4..dd939bb 100644
--- a/packages/Shell/OWNERS
+++ b/packages/Shell/OWNERS
@@ -12,3 +12,7 @@
omakoto@google.com
michaelwr@google.com
ronish@google.com
+
+# Wear Bugreport Owners
+ranamouawi@google.com
+yashasvig@google.com
diff --git a/packages/SystemUI/res-product/values/strings.xml b/packages/SystemUI/res-product/values/strings.xml
index 42733a2..0c29bb4 100644
--- a/packages/SystemUI/res-product/values/strings.xml
+++ b/packages/SystemUI/res-product/values/strings.xml
@@ -179,6 +179,8 @@
<!-- Text informing the user that their media is now playing on this tablet device. [CHAR LIMIT=50] -->
<string name="media_transfer_playing_this_device" product="tablet">Playing on this tablet</string>
-
+ <!-- Message shown during shutdown when Find My Device with Dead Battery Finder is active [CHAR LIMIT=300] -->
+ <string name="finder_active" product="default">You can locate this phone with Find My Device even when powered off</string>
+ <string name="finder_active" product="tablet">You can locate this tablet with Find My Device even when powered off</string>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index d51831b..261ffa0 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -2382,8 +2382,6 @@
<!-- Tuner string -->
<!-- Tuner string -->
- <!-- Message shown during shutdown when Find My Device with Dead Battery Finder is active [CHAR LIMIT=300] -->
- <string name="finder_active">You can locate this phone with Find My Device even when powered off</string>
<!-- Shutdown Progress Dialog. This is shown if the user chooses to power off the phone. [CHAR LIMIT=60] -->
<string name="shutdown_progress">Shutting down\u2026</string>
diff --git a/packages/Vcn/flags/Android.bp b/packages/Vcn/flags/Android.bp
index 3943c6f..8d09fdb 100644
--- a/packages/Vcn/flags/Android.bp
+++ b/packages/Vcn/flags/Android.bp
@@ -29,10 +29,24 @@
],
}
+// TODO: b/374174952 Remove this library when VCN modularization is done
java_aconfig_library {
name: "android.net.vcn.flags-aconfig-java-export",
aconfig_declarations: "android.net.vcn.flags-aconfig",
mode: "exported",
min_sdk_version: "35",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
+ apex_available: [
+ "//apex_available:platform",
+ ],
+}
+
+java_aconfig_library {
+ name: "android.net.vcn.flags-aconfig-java",
+ aconfig_declarations: "android.net.vcn.flags-aconfig",
+ min_sdk_version: "35",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+ apex_available: [
+ "com.android.tethering",
+ ],
}
diff --git a/packages/Vcn/framework-b/Android.bp b/packages/Vcn/framework-b/Android.bp
index c312116..edb22c0 100644
--- a/packages/Vcn/framework-b/Android.bp
+++ b/packages/Vcn/framework-b/Android.bp
@@ -32,9 +32,9 @@
}
java_defaults {
- name: "framework-connectivity-b-defaults",
+ name: "framework-connectivity-b-defaults-base",
sdk_version: "module_current",
- min_sdk_version: "35", // TODO: Make it Android 25Q2 when this is included in mainline
+
defaults: ["framework-module-defaults"], // This is a boot jar
srcs: [
@@ -44,14 +44,10 @@
libs: [
"android.net.ipsec.ike.stubs.module_lib",
- "app-compat-annotations",
"framework-wifi.stubs.module_lib",
"unsupportedappusage",
],
- static_libs: [
- //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
- "android.net.vcn.flags-aconfig-java-export",
- ],
+
aidl: {
include_dirs: [
// For connectivity-framework classes such as Network.aidl, NetworkCapabilities.aidl
@@ -60,16 +56,83 @@
},
}
+soong_config_module_type {
+ name: "framework_connectivity_b_defaults_soong_config",
+ module_type: "java_defaults",
+ config_namespace: "ANDROID",
+ bool_variables: [
+ "is_vcn_in_mainline",
+ ],
+ properties: [
+ "min_sdk_version",
+ "static_libs",
+ "apex_available",
+ ],
+}
+
+framework_connectivity_b_defaults_soong_config {
+ name: "framework-connectivity-b-defaults",
+ defaults: [
+ "framework-connectivity-b-defaults-base",
+ ],
+ soong_config_variables: {
+ is_vcn_in_mainline: {
+ //TODO: b/380155299 Make it Baklava when aidl tool can understand it
+ min_sdk_version: "current",
+ static_libs: ["android.net.vcn.flags-aconfig-java"],
+ apex_available: ["com.android.tethering"],
+
+ conditions_default: {
+ min_sdk_version: "35",
+ static_libs: ["android.net.vcn.flags-aconfig-java-export"],
+ apex_available: ["//apex_available:platform"],
+ },
+ },
+ },
+}
+
+soong_config_module_type {
+ name: "framework_connectivity_b_java_sdk_library_defaults_soong_config",
+ module_type: "java_defaults",
+ config_namespace: "ANDROID",
+ bool_variables: [
+ "is_vcn_in_mainline",
+ ],
+ properties: [
+ "aconfig_declarations",
+ "jarjar_rules",
+ ],
+}
+
+framework_connectivity_b_java_sdk_library_defaults_soong_config {
+ name: "framework-connectivity-b-java-sdk-library-defaults",
+ soong_config_variables: {
+ is_vcn_in_mainline: {
+ aconfig_declarations: ["android.net.vcn.flags-aconfig-java"],
+
+ // TODO: b/375213246 Use the connectivity jarjar rule generator to create the
+ // jarjar rules. In the end state, use "framework-connectivity-jarjar-rules"
+ // after VCN code is moved to the Connectivity folder
+ jarjar_rules: "framework-vcn-jarjar-rules.txt",
+
+ conditions_default: {
+ aconfig_declarations: ["android.net.vcn.flags-aconfig-java-export"],
+
+ // Use "android.net.connectivity" as prefix would trigger
+ // "Hidden API flags are inconsistent" build error
+ jarjar_rules: "framework-vcn-jarjar-rules-platform.txt",
+ },
+ },
+ },
+}
+
java_sdk_library {
name: "framework-connectivity-b",
defaults: [
"framework-connectivity-b-defaults",
+ "framework-connectivity-b-java-sdk-library-defaults",
],
- //TODO: b/375213246 Use "framework-connectivity-jarjar-rules" when VCN is
- // in mainline
- jarjar_rules: "framework-vcn-jarjar-rules.txt",
-
permitted_packages: [
"android.net",
"android.net.vcn",
@@ -92,11 +155,6 @@
"framework-connectivity-pre-jarjar",
],
- aconfig_declarations: [
- //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
- "android.net.vcn.flags-aconfig-java-export",
- ],
-
impl_library_visibility: [
// Using for test only
"//cts/tests/netlegacy22.api",
@@ -120,17 +178,13 @@
"//packages/modules/Wifi/service/tests/wifitests",
],
- apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
- "//apex_available:platform",
-
- "com.android.tethering",
- ],
+ visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_library {
name: "framework-connectivity-b-pre-jarjar",
defaults: ["framework-connectivity-b-defaults"],
+ installable: false,
libs: [
"framework-connectivity-pre-jarjar",
],
diff --git a/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt b/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt
new file mode 100644
index 0000000..757043b
--- /dev/null
+++ b/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt
@@ -0,0 +1,2 @@
+rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
+rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1
\ No newline at end of file
diff --git a/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt b/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
index 757043b..7e27b24 100644
--- a/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
+++ b/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
@@ -1,2 +1,2 @@
-rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
-rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1
\ No newline at end of file
+rule android.net.vcn.persistablebundleutils.** android.net.connectivity.android.net.vcn.persistablebundleutils.@1
+rule android.net.vcn.util.** android.net.connectivity.android.net.vcn.util.@1
\ No newline at end of file
diff --git a/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java b/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
index 1f0fa92..de22ca6 100644
--- a/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
+++ b/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
@@ -23,8 +23,6 @@
import android.annotation.SystemApi;
import android.app.SystemServiceRegistry;
import android.compat.Compatibility;
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.EnabledSince;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.vcn.IVcnManagementService;
@@ -40,17 +38,15 @@
@FlaggedApi(FLAG_MAINLINE_VCN_MODULE_API)
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public final class ConnectivityFrameworkInitializerBaklava {
- /**
- * Starting with {@link VANILLA_ICE_CREAM}, Telephony feature flags (e.g. {@link
- * PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}) are being checked before returning managers
- * that depend on them. If the feature is missing, {@link Context#getSystemService} will return
- * null.
- *
- * <p>This change is specific to VcnManager.
- */
- @ChangeId
- @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
- private static final long ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN = 330902016;
+
+ // This is a copy of TelephonyFrameworkInitializer.ENABLE_CHECKING_TELEPHONY_FEATURES. This
+ // ChangeId will replace ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN to gate VcnManager
+ // feature flag enforcement.
+ // This replacement is safe because both ChangeIds have been enabled since Android V and serve
+ // the same purpose: enforcing telephony feature flag checks before using telephony-based
+ // features. This also simplifies VCN modularization by avoiding the need to handle different
+ // states, such as: SDK < B vs. SDK >= B; VCN in platform vs. VCN in the apex.
+ private static final long ENABLE_CHECKING_TELEPHONY_FEATURES = 330583731;
/**
* The corresponding vendor API for Android V
@@ -71,7 +67,7 @@
private static String getVcnFeatureDependency() {
// Check SDK version of the client app. Apps targeting pre-V SDK might
// have not checked for existence of these features.
- if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN)) {
+ if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES)) {
return null;
}
diff --git a/packages/Vcn/service-b/Android.bp b/packages/Vcn/service-b/Android.bp
index c1a1ee7..1370b06 100644
--- a/packages/Vcn/service-b/Android.bp
+++ b/packages/Vcn/service-b/Android.bp
@@ -32,11 +32,9 @@
visibility: ["//frameworks/base/services/core"],
}
-// Do not static include this lib in VCN because these files exist in
-// both service-connectivity.jar and framework.jar
-// TODO: b/374174952 After VCN moves to Connectivity/ and the modularization is done
-// this lib can be removed and "service-connectivity-b-pre-jarjar" can include
-// "service-connectivity-pre-jarjar"
+// TODO: b/374174952 This library is only used in "service-connectivity-b-platform"
+// After VCN moves to Connectivity/ and the modularization is done, this lib and
+// "service-connectivity-b-platform" can both be removed
java_library {
name: "connectivity-utils-service-vcn-internal",
sdk_version: "module_current",
@@ -48,30 +46,30 @@
"framework-annotations-lib",
"unsupportedappusage",
],
- visibility: [
- "//visibility:private",
- ],
- apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
- "//apex_available:platform",
+ visibility: ["//visibility:private"],
+}
- "com.android.tethering",
+filegroup {
+ name: "service-vcn-sources",
+ srcs: ["src/**/*.java"],
+ path: "src",
+ visibility: [
+ "//packages/modules/Connectivity/service-b",
],
}
-java_library {
- name: "service-connectivity-b-pre-jarjar",
- sdk_version: "system_server_current",
- min_sdk_version: "35", // TODO: Make it Android 25Q2 when this is included in mainline
+// This java_defaults will be used for "service-connectivity-b-platform" and
+// "service-connectivity-b-pre-jarjar"
+java_defaults {
+ name: "service-connectivity-b-pre-jarjar-defaults",
defaults: ["framework-system-server-module-defaults"], // This is a system server jar
srcs: [
- "src/**/*.java",
+ ":service-vcn-sources",
],
libs: [
"android.net.ipsec.ike.stubs.module_lib",
- "connectivity-utils-service-vcn-internal",
"framework-annotations-lib",
"framework-connectivity-pre-jarjar",
"framework-connectivity-t-pre-jarjar",
@@ -89,13 +87,30 @@
"modules-utils-handlerexecutor",
],
+ defaults_visibility: [
+ "//packages/modules/Connectivity/service-b",
+ ],
+}
+
+// This library is only used to be included into services.jar when the build system
+// flag RELEASE_MOVE_VCN_TO_MAINLINE is disabled. When the flag is enabled, a module
+// version of this library will be included in Tethering module
+java_library {
+ name: "service-connectivity-b-platform",
+ defaults: ["service-connectivity-b-pre-jarjar-defaults"],
+ static_libs: ["connectivity-utils-service-vcn-internal"],
+
+ sdk_version: "system_server_current",
+ min_sdk_version: "35",
+
+ // TODO (b/374174952 ): This file is for jarjaring files in
+ // "connectivity-utils-service-vcn-internal".
+ jarjar_rules: "service-vcn-platform-jarjar-rules.txt",
+
visibility: [
"//frameworks/base/services",
],
apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
"//apex_available:platform",
-
- "com.android.tethering",
],
}
diff --git a/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt b/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt
new file mode 100644
index 0000000..3630727
--- /dev/null
+++ b/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt
@@ -0,0 +1,5 @@
+rule android.util.IndentingPrintWriter android.net.vcn.module.repackaged.android.util.IndentingPrintWriter
+rule android.util.LocalLog android.net.vcn.module.repackaged.android.util.LocalLog
+rule com.android.internal.util.IndentingPrintWriter android.net.vcn.module.repackaged.com.android.internal.util.IndentingPrintWriter
+rule com.android.internal.util.MessageUtils android.net.vcn.module.repackaged.com.android.internal.util.MessageUtils
+rule com.android.internal.util.WakeupMessage android.net.vcn.module.repackaged.com.android.internal.util.WakeupMessage
\ No newline at end of file
diff --git a/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java b/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
index 02c8ce4..81c7edf 100644
--- a/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
+++ b/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
@@ -16,7 +16,9 @@
package com.android.server;
+import android.annotation.TargetApi;
import android.content.Context;
+import android.os.Build;
import android.util.Log;
import com.android.tools.r8.keepanno.annotations.KeepItemKind;
@@ -30,6 +32,8 @@
// Without this annotation, this class will be treated as unused class and be removed during build
// time.
@UsedByReflection(kind = KeepItemKind.CLASS_AND_METHODS)
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public final class ConnectivityServiceInitializerB extends SystemService {
private static final String TAG = ConnectivityServiceInitializerB.class.getSimpleName();
private final VcnManagementService mVcnManagementService;
diff --git a/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java b/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
index 26db6a9..c9a99d7 100644
--- a/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
+++ b/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
@@ -37,6 +37,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -164,6 +165,8 @@
* @hide
*/
// TODO(b/180451994): ensure all incoming + outgoing calls have a cleared calling identity
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnManagementService extends IVcnManagementService.Stub {
@NonNull private static final String TAG = VcnManagementService.class.getSimpleName();
@NonNull private static final String CONTEXT_ATTRIBUTION_TAG = "VCN";
@@ -297,8 +300,10 @@
});
}
- // Package-visibility for SystemServer to create instances.
- static VcnManagementService create(@NonNull Context context) {
+ /** Called by ConnectivityServiceInitializerB to create instances. */
+ // VcnManagementService will be jarjared but ConnectivityServiceInitializerB will not. Thus this
+ // method needs to be public for ConnectivityServiceInitializerB to access
+ public static VcnManagementService create(@NonNull Context context) {
return new VcnManagementService(context, new Dependencies());
}
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java b/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
index b448f75..b04e25d 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
@@ -22,12 +22,14 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.vcn.VcnManager;
import android.net.vcn.util.PersistableBundleUtils.PersistableBundleWrapper;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.os.PersistableBundle;
@@ -77,6 +79,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class TelephonySubscriptionTracker extends BroadcastReceiver {
@NonNull private static final String TAG = TelephonySubscriptionTracker.class.getSimpleName();
private static final boolean LOG_DBG = false; // STOPSHIP if true
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java b/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
index 2524d0e..369ef6a 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
@@ -29,6 +29,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.NetworkCapabilities;
@@ -39,6 +40,7 @@
import android.net.vcn.VcnGatewayConnectionConfig;
import android.net.vcn.VcnManager.VcnErrorCode;
import android.net.vcn.util.LogUtils;
+import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.ParcelUuid;
@@ -75,6 +77,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class Vcn extends Handler {
private static final String TAG = Vcn.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java b/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
index e50fc3a..300b80f 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
@@ -37,6 +37,8 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityDiagnosticsManager;
import android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback;
@@ -82,6 +84,7 @@
import android.net.vcn.util.MtuUtils;
import android.net.vcn.util.OneWayBoolean;
import android.net.wifi.WifiInfo;
+import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.ParcelUuid;
@@ -171,6 +174,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnGatewayConnection extends StateMachine {
private static final String TAG = VcnGatewayConnection.class.getSimpleName();
@@ -2942,6 +2947,10 @@
*
* <p>Synchronize this action to minimize locking around WakeLock use.
*/
+ // WakelockTimeout suppressed because the time the wake lock is needed for is unknown. The
+ // wakelock is only acquired when a Message is sent to this state machine and will be
+ // released when the message is processed or the state machin quits
+ @SuppressLint("WakelockTimeout")
public synchronized void acquire() {
mImpl.acquire();
}
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java b/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
index 4552f50..99c848f 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
@@ -25,6 +25,7 @@
import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull;
+import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
@@ -32,6 +33,7 @@
import android.net.NetworkRequest;
import android.net.NetworkScore;
import android.net.vcn.VcnGatewayConnectionConfig;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.util.ArraySet;
@@ -54,6 +56,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnNetworkProvider extends NetworkProvider {
private static final String TAG = VcnNetworkProvider.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
index 72de613..6467af4 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
@@ -23,6 +23,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -31,6 +32,7 @@
import android.net.IpSecTransformState;
import android.net.Network;
import android.net.vcn.VcnManager;
+import android.os.Build;
import android.os.Handler;
import android.os.OutcomeReceiver;
import android.os.PowerManager;
@@ -59,6 +61,8 @@
*
* <p>This class is flag gated by "network_metric_monitor" and "ipsec_tramsform_state"
*/
+// TODO(b/374174952) Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class IpSecPacketLossDetector extends NetworkMetricMonitor {
private static final String TAG = IpSecPacketLossDetector.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
index 86cee55..1485344 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
@@ -22,9 +22,11 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.IpSecTransform;
import android.net.IpSecTransformState;
import android.net.Network;
+import android.os.Build;
import android.os.OutcomeReceiver;
import android.util.CloseGuard;
import android.util.Slog;
@@ -42,6 +44,8 @@
*
* <p>This class is flag gated by "network_metric_monitor"
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public abstract class NetworkMetricMonitor implements AutoCloseable {
private static final String TAG = NetworkMetricMonitor.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
index 79c4116..705141f 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
@@ -29,12 +29,14 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.NetworkCapabilities;
import android.net.TelephonyNetworkSpecifier;
import android.net.vcn.VcnCellUnderlyingNetworkTemplate;
import android.net.vcn.VcnManager;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
import android.net.vcn.VcnWifiUnderlyingNetworkTemplate;
+import android.os.Build;
import android.os.ParcelUuid;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -50,6 +52,8 @@
import java.util.Set;
/** @hide */
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
class NetworkPriorityClassifier {
@NonNull private static final String TAG = NetworkPriorityClassifier.class.getSimpleName();
/**
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
index 29a0762..bc552e7 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
@@ -28,6 +28,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.IpSecTransform;
@@ -40,6 +41,7 @@
import android.net.vcn.VcnGatewayConnectionConfig;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
import android.net.vcn.util.LogUtils;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.telephony.TelephonyCallback;
@@ -73,6 +75,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class UnderlyingNetworkController {
@NonNull private static final String TAG = UnderlyingNetworkController.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
index 30f4ed1..776931b 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
@@ -22,12 +22,14 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.IpSecTransform;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.vcn.VcnManager;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.util.IndentingPrintWriter;
@@ -50,6 +52,8 @@
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class UnderlyingNetworkEvaluator {
private static final String TAG = UnderlyingNetworkEvaluator.class.getSimpleName();
diff --git a/services/Android.bp b/services/Android.bp
index d99ed3d..ebd10cc 100644
--- a/services/Android.bp
+++ b/services/Android.bp
@@ -242,9 +242,11 @@
"services.wifi",
"service-blobstore",
"service-jobscheduler",
- "service-connectivity-b-pre-jarjar", // Move it to mainline module
"android.hidl.base-V1.0-java",
- ],
+ ] + select(release_flag("RELEASE_MOVE_VCN_TO_MAINLINE"), {
+ true: [],
+ default: ["service-connectivity-b-platform"],
+ }),
libs: [
"android.hidl.manager-V1.0-java",
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 349f3ee..9a55603 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -147,6 +147,9 @@
// Java/AIDL sources to be moved out to CrashRecovery module
":services-crashrecovery-sources",
+
+ // Indicate whether VCN is in platform or mainline
+ ":vcn-location-sources",
],
libs: [
diff --git a/services/core/java/com/android/server/wm/ContentRecorder.java b/services/core/java/com/android/server/wm/ContentRecorder.java
index d70a880..e86cb7d 100644
--- a/services/core/java/com/android/server/wm/ContentRecorder.java
+++ b/services/core/java/com/android/server/wm/ContentRecorder.java
@@ -453,15 +453,17 @@
case RECORD_CONTENT_TASK:
// Given the WindowToken of the region to record, retrieve the associated
// SurfaceControl.
- if (tokenToRecord == null) {
+ final WindowContainer wc = tokenToRecord != null
+ ? WindowContainer.fromBinder(tokenToRecord) : null;
+ if (wc == null) {
handleStartRecordingFailed();
ProtoLog.v(WM_DEBUG_CONTENT_RECORDING,
- "Content Recording: Unable to start recording due to null token for "
- + "display %d",
+ "Content Recording: Unable to start recording due to null token or " +
+ "null window container for " + "display %d",
mDisplayContent.getDisplayId());
return null;
}
- Task taskToRecord = WindowContainer.fromBinder(tokenToRecord).asTask();
+ final Task taskToRecord = wc.asTask();
if (taskToRecord == null) {
handleStartRecordingFailed();
ProtoLog.v(WM_DEBUG_CONTENT_RECORDING,
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 545f9c9..9cee81f 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -11,7 +11,6 @@
name: "libservices.core",
defaults: ["libservices.core-libs"],
- cpp_std: "c++2a",
cflags: [
"-Wall",
"-Werror",
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 32f88f7..51166b1 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -277,6 +277,7 @@
import com.android.server.usage.UsageStatsService;
import com.android.server.usb.UsbService;
import com.android.server.utils.TimingsTraceAndSlog;
+import com.android.server.vcn.VcnLocation;
import com.android.server.vibrator.VibratorManagerService;
import com.android.server.voiceinteraction.VoiceInteractionManagerService;
import com.android.server.vr.VrManagerService;
@@ -2150,10 +2151,13 @@
t.traceBegin("StartVcnManagementService");
try {
- // TODO: b/375213246 When VCN is in mainline module, load it from the apex path.
- // Whether VCN will be in apex or in the platform will be gated by a build system
- // flag.
- mSystemServiceManager.startService(CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS);
+ if (VcnLocation.IS_VCN_IN_MAINLINE) {
+ mSystemServiceManager.startServiceFromJar(
+ CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS,
+ CONNECTIVITY_SERVICE_APEX_PATH);
+ } else {
+ mSystemServiceManager.startService(CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS);
+ }
} catch (Throwable e) {
reportWtf("starting VCN Management Service", e);
}