Merge changes from topic "presubmit-am-81e167068ffc405c90f33ce75ae74645" into tm-dev

* changes:
  [automerged blank] Import translations. DO NOT MERGE ANYWHERE 2p: 4e0aa1e620
  Import translations. DO NOT MERGE ANYWHERE
diff --git a/apishim/29/com/android/networkstack/apishim/api29/VpnManagerShimImpl.java b/apishim/29/com/android/networkstack/apishim/api29/VpnManagerShimImpl.java
new file mode 100644
index 0000000..fc7d052
--- /dev/null
+++ b/apishim/29/com/android/networkstack/apishim/api29/VpnManagerShimImpl.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 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.networkstack.apishim.api29;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
+import com.android.networkstack.apishim.common.VpnManagerShim;
+
+/**
+ * Implementation of {@link VpnManagerShim} for API 29.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+public class VpnManagerShimImpl implements VpnManagerShim {
+    protected VpnManagerShimImpl(Context context) {}
+
+    /**
+     * Get a new instance of {@link VpnManagerShim}.
+     */
+    public static VpnManagerShim newInstance(Context context) throws UnsupportedApiLevelException {
+        return new VpnManagerShimImpl(context);
+    }
+
+    /**
+     * See android.net.VpnManager#startProvisionedVpnProfileSession
+     */
+    @Override
+    public String startProvisionedVpnProfileSession() throws UnsupportedApiLevelException {
+        // Not supported for API 29.
+        throw new UnsupportedApiLevelException("Not supported in API 29.");
+    }
+}
diff --git a/apishim/30/com/android/networkstack/apishim/api30/VpnManagerShimImpl.java b/apishim/30/com/android/networkstack/apishim/api30/VpnManagerShimImpl.java
new file mode 100644
index 0000000..f52b5a8
--- /dev/null
+++ b/apishim/30/com/android/networkstack/apishim/api30/VpnManagerShimImpl.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2022 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.networkstack.apishim.api30;
+
+import static com.android.modules.utils.build.SdkLevel.isAtLeastR;
+
+import android.content.Context;
+import android.net.VpnManager;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
+import com.android.networkstack.apishim.common.VpnManagerShim;
+
+/**
+ * Implementation of {@link VpnManagerShim} for API 30.
+ */
+@RequiresApi(Build.VERSION_CODES.R)
+public class VpnManagerShimImpl extends com.android.networkstack.apishim.api29.VpnManagerShimImpl {
+    protected final VpnManager mVm;
+    protected VpnManagerShimImpl(Context context) {
+        super(context);
+        mVm = context.getSystemService(VpnManager.class);
+    }
+
+    /**
+     * Get a new instance of {@link VpnManagerShimImpl}.
+     */
+    @RequiresApi(Build.VERSION_CODES.Q)
+    public static VpnManagerShim newInstance(Context context) throws UnsupportedApiLevelException {
+        if (!isAtLeastR()) {
+            return com.android.networkstack.apishim.api29.VpnManagerShimImpl.newInstance(context);
+        }
+        return new VpnManagerShimImpl(context);
+    }
+
+    /**
+     * See android.net.VpnManager#startProvisionedVpnProfileSession
+     */
+    @Override
+    public String startProvisionedVpnProfileSession() throws UnsupportedApiLevelException {
+        // Not supported for API 30.
+        throw new UnsupportedApiLevelException("Not supported in API 30.");
+    }
+}
diff --git a/apishim/31/com/android/networkstack/apishim/api31/VpnManagerShimImpl.java b/apishim/31/com/android/networkstack/apishim/api31/VpnManagerShimImpl.java
new file mode 100644
index 0000000..91aedd7
--- /dev/null
+++ b/apishim/31/com/android/networkstack/apishim/api31/VpnManagerShimImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 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.networkstack.apishim.api31;
+
+import static com.android.modules.utils.build.SdkLevel.isAtLeastS;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
+import com.android.networkstack.apishim.common.VpnManagerShim;
+
+/**
+ * Implementation of {@link VpnManagerShim} for API 31.
+ */
+@RequiresApi(Build.VERSION_CODES.S)
+public class VpnManagerShimImpl extends com.android.networkstack.apishim.api30.VpnManagerShimImpl {
+    protected VpnManagerShimImpl(Context context) {
+        super(context);
+    }
+
+    /**
+     * Get a new instance of {@link com.android.networkstack.apishim.api30.VpnManagerShimImpl}.
+     */
+    @RequiresApi(Build.VERSION_CODES.Q)
+    public static VpnManagerShim newInstance(Context context) throws UnsupportedApiLevelException {
+        if (!isAtLeastS()) {
+            return com.android.networkstack.apishim.api30.VpnManagerShimImpl.newInstance(context);
+        }
+        return new VpnManagerShimImpl(context);
+    }
+
+    /**
+     * See android.net.VpnManager#startProvisionedVpnProfileSession
+     */
+    @Override
+    public String startProvisionedVpnProfileSession() throws UnsupportedApiLevelException {
+        // Not supported for API 31.
+        throw new UnsupportedApiLevelException("Not supported in API 31.");
+    }
+}
diff --git a/apishim/33/com/android/networkstack/apishim/VpnManagerShimImpl.java b/apishim/33/com/android/networkstack/apishim/VpnManagerShimImpl.java
new file mode 100644
index 0000000..c1a879e
--- /dev/null
+++ b/apishim/33/com/android/networkstack/apishim/VpnManagerShimImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 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.networkstack.apishim;
+
+import static com.android.modules.utils.build.SdkLevel.isAtLeastT;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
+import com.android.networkstack.apishim.common.VpnManagerShim;
+
+/**
+ * Compatibility implementation of {@link VpnManagerShim}.
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+public class VpnManagerShimImpl extends com.android.networkstack.apishim.api31.VpnManagerShimImpl {
+
+    protected VpnManagerShimImpl(Context context) {
+        super(context);
+    }
+
+    /**
+     * Get a new instance of {@link VpnManagerShimImpl}.
+     */
+    @RequiresApi(Build.VERSION_CODES.Q)
+    public static VpnManagerShim newInstance(Context context) throws UnsupportedApiLevelException {
+        if (!isAtLeastT()) {
+            return com.android.networkstack.apishim.api31.VpnManagerShimImpl.newInstance(context);
+        }
+        return new VpnManagerShimImpl(context);
+    }
+
+    /**
+     * See android.net.VpnManager#startProvisionedVpnProfileSession
+     */
+    @Override
+    public String startProvisionedVpnProfileSession() {
+        return mVm.startProvisionedVpnProfileSession();
+    }
+}
diff --git a/apishim/common/com/android/networkstack/apishim/common/VpnManagerShim.java b/apishim/common/com/android/networkstack/apishim/common/VpnManagerShim.java
new file mode 100644
index 0000000..7ef0270
--- /dev/null
+++ b/apishim/common/com/android/networkstack/apishim/common/VpnManagerShim.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2022 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.networkstack.apishim.common;
+
+/**
+ * Interface used to access API methods in {@link android.net.VpnManager}, with
+ * appropriate fallbacks if the methods are not yet part of the released API.
+ */
+public interface VpnManagerShim {
+    /** See android.net.VpnManager#startProvisionedVpnProfileSession */
+    String startProvisionedVpnProfileSession() throws UnsupportedApiLevelException;
+}