summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-12 15:39:44 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-12 15:39:44 +0000
commit437064793d94ef4e0682ff07ce1ade16c4911c7a (patch)
treede15e1777b26aa676e2554366d5661e84e273e29
parentd3e2e80629a5790a653cb2b24a13d592b597a88c (diff)
parent08a8b0b215bdc5fdeaba215000cb8766238ce99f (diff)
downloaddevelopment-android12-mainline-neuralnetworks-release.tar.gz
Snap for 7910331 from 08a8b0b215bdc5fdeaba215000cb8766238ce99f to mainline-neuralnetworks-releaseandroid-mainline-12.0.0_r92android-mainline-12.0.0_r78android-mainline-12.0.0_r50android12-mainline-neuralnetworks-release
Change-Id: I69104ba52f429990d07f4eecfcfa061936c005b5
-rw-r--r--apps/SdkSetup/AndroidManifest.xml2
-rw-r--r--apps/SdkSetup/src/com/android/sdksetup/DefaultActivity.java19
-rw-r--r--build/Android.mk53
-rw-r--r--samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml9
-rw-r--r--samples/ApiDemos/res/values/attrs.xml4
-rw-r--r--samples/ApiDemos/res/values/styles.xml2
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java59
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java64
-rw-r--r--samples/samples_source.prop_template2
-rw-r--r--sdk/build_tools_source.prop_template2
-rw-r--r--sdk/doc_source.prop_template2
-rw-r--r--sdk/platform_source.prop_template2
-rw-r--r--sdk/source_source.prop_template2
-rw-r--r--sys-img/images_arm64-v8a_source.prop_template2
-rw-r--r--sys-img/images_armeabi-v7a_source.prop_template2
-rw-r--r--sys-img/images_armeabi_source.prop_template2
-rw-r--r--sys-img/images_mips64_source.prop_template2
-rw-r--r--sys-img/images_mips_source.prop_template2
-rw-r--r--sys-img/images_x86_64_source.prop_template2
-rw-r--r--sys-img/images_x86_source.prop_template2
20 files changed, 168 insertions, 68 deletions
diff --git a/apps/SdkSetup/AndroidManifest.xml b/apps/SdkSetup/AndroidManifest.xml
index 66cca2256..31eafcec5 100644
--- a/apps/SdkSetup/AndroidManifest.xml
+++ b/apps/SdkSetup/AndroidManifest.xml
@@ -28,7 +28,7 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<application>
<activity android:name="DefaultActivity"
- android:excludeFromRecents="true">
+ android:excludeFromRecents="true"
android:exported="true">
<intent-filter android:priority="3">
<action android:name="android.intent.action.MAIN" />
diff --git a/apps/SdkSetup/src/com/android/sdksetup/DefaultActivity.java b/apps/SdkSetup/src/com/android/sdksetup/DefaultActivity.java
index 4d6bf6b7d..6dd69f9b0 100644
--- a/apps/SdkSetup/src/com/android/sdksetup/DefaultActivity.java
+++ b/apps/SdkSetup/src/com/android/sdksetup/DefaultActivity.java
@@ -48,6 +48,16 @@ public class DefaultActivity extends Activity {
// Edit Settings only for Emulator
if (Build.IS_EMULATOR) {
+ // Add network with SSID "AndroidWifi"
+ WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"AndroidWifi\"";
+ config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
+ WifiManager mWifiManager = getApplicationContext().getSystemService(WifiManager.class);
+ int netId = mWifiManager.addNetwork(config);
+ if (netId == ADD_NETWORK_FAIL || mWifiManager.enableNetwork(netId, true)) {
+ Log.e(TAG, "Unable to add Wi-Fi network AndroidWifi.");
+ }
+
// Set physical keyboard layout based on the system property set by emulator host.
String layoutName = SystemProperties.get("vendor.qemu.keyboard_layout");
String displaySettingsName = SystemProperties.get("ro.boot.qemu.display.settings.xml");
@@ -87,15 +97,6 @@ public class DefaultActivity extends Activity {
}
}
- // Add network with SSID "AndroidWifi"
- WifiConfiguration config = new WifiConfiguration();
- config.SSID = "\"AndroidWifi\"";
- config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
- WifiManager mWifiManager = getApplicationContext().getSystemService(WifiManager.class);
- int netId = mWifiManager.addNetwork(config);
- if (netId == ADD_NETWORK_FAIL || mWifiManager.enableNetwork(netId, true)) {
- Log.e(TAG, "Unable to add Wi-Fi network AndroidWifi.");
- }
// remove this activity from the package manager.
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, DefaultActivity.class);
diff --git a/build/Android.mk b/build/Android.mk
index 441363847..5653adf23 100644
--- a/build/Android.mk
+++ b/build/Android.mk
@@ -20,40 +20,35 @@ ALL_SDK_FILES += $(sdk_props) $(sample_props) $(sys_img_props)
# Rule to convert a source.prop template into the desired source.property
# This needs to vary based on the CPU ABI for the system-image files.
# Rewritten variables:
-# - ${PLATFORM_VERSION} e.g. "1.0"
-# - ${PLATFORM_SDK_VERSION} e.g. "3", aka the API level
-# - ${PLATFORM_VERSION_CODENAME} e.g. "REL" (transformed into "") or "Cupcake"
-# - ${TARGET_ARCH} e.g. "arm", "x86", "mips" and their 64-bit variants.
-# - ${TARGET_CPU_ABI} e.g. "armeabi", "x86", "mips" and their 64-bit variants.
+# - ${PLATFORM_VERSION} e.g. "1.0"
+# - ${PLATFORM_SDK_VERSION} e.g. "3", aka the API level
+# - ${PLATFORM_EXTENSION_SDK_VERSION} e.g. "7" -- the extension sdk level
+# - ${PLATFORM_IS_BASE_SDK} bool. -- whether the current extension sdk is the base extension for this api level
+# - ${PLATFORM_VERSION_CODENAME} e.g. "REL" (transformed into "") or "Cupcake"
+# - ${TARGET_ARCH} e.g. "arm", "x86", "mips" and their 64-bit variants.
+# - ${TARGET_CPU_ABI} e.g. "armeabi", "x86", "mips" and their 64-bit variants.
+define process_prop_template
+@echo Generate $@
+$(hide) mkdir -p $(dir $@)
+$(hide) sed \
+ -e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \
+ -e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \
+ -e 's/$${PLATFORM_SDK_EXTENSION_VERSION}/$(PLATFORM_SDK_EXTENSION_VERSION)/' \
+ -e 's/$${PLATFORM_IS_BASE_SDK}/$(if $(filter $(PLATFORM_SDK_EXTENSION_VERSION),$(PLATFORM_BASE_SDK_EXTENSION_VERSION)),true,false)/' \
+ -e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \
+ -e 's/$${TARGET_ARCH}/$(TARGET_ARCH)/' \
+ -e 's/$${TARGET_CPU_ABI}/$(TARGET_CPU_ABI)/' \
+ $< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@
+endef
+
$(sys_img_props) : $(HOST_OUT)/development/sys-img-$(TARGET_CPU_ABI)/%_source.properties : $(TOPDIR)development/sys-img/%_source.prop_template
- @echo Generate $@
- $(hide) mkdir -p $(dir $@)
- $(hide) sed \
- -e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \
- -e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \
- -e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \
- -e 's/$${TARGET_ARCH}/$(TARGET_ARCH)/' \
- -e 's/$${TARGET_CPU_ABI}/$(TARGET_CPU_ABI)/' \
- $< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@
+ $(process_prop_template)
$(sdk_props) : $(HOST_OUT)/development/sdk/%_source.properties : $(TOPDIR)development/sdk/%_source.prop_template
- @echo Generate $@
- $(hide) mkdir -p $(dir $@)
- $(hide) sed \
- -e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \
- -e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \
- -e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \
- $< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@
+ $(process_prop_template)
$(sample_props) : $(HOST_OUT)/development/samples/%_source.properties : $(TOPDIR)development/samples/%_source.prop_template
- @echo Generate $@
- $(hide) mkdir -p $(dir $@)
- $(hide) sed\
- -e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \
- -e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \
- -e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \
- $< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@
-
+ $(process_prop_template)
# ===== SDK jar file of stubs =====
# A.k.a the "current" version of the public SDK (android.jar inside the SDK package).
diff --git a/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml b/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
index 09912b5cc..57f891e8e 100644
--- a/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
+++ b/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
@@ -15,18 +15,21 @@
-->
<!-- Demonstrates Picture-In-Picture with auto enter enabled. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- layout params would be changed programmatically -->
- <ImageView android:id="@+id/image"
+ <com.example.android.apis.view.FixedAspectRatioImageView
+ android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
- android:src="@drawable/sample_1" />
+ android:src="@drawable/sample_1"
+ app:aspectRatio="16/9" />
<Switch android:id="@+id/source_rect_hint_toggle"
android:layout_width="wrap_content"
diff --git a/samples/ApiDemos/res/values/attrs.xml b/samples/ApiDemos/res/values/attrs.xml
index 1751ae26a..f06ebf1c0 100644
--- a/samples/ApiDemos/res/values/attrs.xml
+++ b/samples/ApiDemos/res/values/attrs.xml
@@ -53,4 +53,8 @@
<attr name="android:label" />
</declare-styleable>
<!-- END_INCLUDE(fragment_arguments) -->
+
+ <declare-styleable name="FixedAspectRatioImageView">
+ <attr name="aspectRatio" format="string" />
+ </declare-styleable>
</resources>
diff --git a/samples/ApiDemos/res/values/styles.xml b/samples/ApiDemos/res/values/styles.xml
index 2da03f041..6c301cea3 100644
--- a/samples/ApiDemos/res/values/styles.xml
+++ b/samples/ApiDemos/res/values/styles.xml
@@ -133,6 +133,8 @@
<style name="Theme.NoActionBar" parent="android:Theme.Material.Light">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
+ <!-- toggle this flag to test letterbox behavior when auto-enter-pip from landscape -->
+ <!--item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item-->
</style>
</resources>
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java b/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
index 05f455828..57ce6bbe7 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
@@ -23,6 +23,7 @@ import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Rational;
+import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.CompoundButton;
@@ -43,7 +44,6 @@ public class PictureInPictureAutoEnter extends Activity {
private View mImageView;
private View mButtonView;
private Switch mSwitchView;
- private int mLastOrientation = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -76,43 +76,52 @@ public class PictureInPictureAutoEnter extends Activity {
@Override
public void onConfigurationChanged(Configuration newConfiguration) {
super.onConfigurationChanged(newConfiguration);
- if (!isInPictureInPictureMode()) {
- updateLayout(newConfiguration);
- }
+ updateLayout(newConfiguration);
}
private void updateLayout(Configuration configuration) {
- if (configuration.orientation == mLastOrientation) return;
- mLastOrientation = configuration.orientation;
- final boolean isLandscape = (mLastOrientation == Configuration.ORIENTATION_LANDSCAPE);
- mButtonView.setVisibility(isLandscape ? View.GONE : View.VISIBLE);
- mSwitchView.setVisibility(isLandscape ? View.GONE: View.VISIBLE);
+ final boolean isLandscape =
+ (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE);
+ final boolean isPictureInPicture = isInPictureInPictureMode();
+ mButtonView.setVisibility((isPictureInPicture || isLandscape) ? View.GONE : View.VISIBLE);
+ mSwitchView.setVisibility((isPictureInPicture || isLandscape) ? View.GONE: View.VISIBLE);
final LinearLayout.LayoutParams layoutParams;
- // Toggle the fullscreen mode as well.
- // TODO(b/188001699) switch to use insets controller once the bug is fixed.
- final View decorView = getWindow().getDecorView();
- final int systemUiNavigationBarFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
- if (isLandscape) {
+ if (isPictureInPicture) {
layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
- | systemUiNavigationBarFlags);
+ layoutParams.gravity = Gravity.NO_GRAVITY;
} else {
- layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT,
- LinearLayout.LayoutParams.WRAP_CONTENT);
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
- & ~systemUiNavigationBarFlags);
+ // Toggle the fullscreen mode as well.
+ // TODO(b/188001699) switch to use insets controller once the bug is fixed.
+ final View decorView = getWindow().getDecorView();
+ final int systemUiNavigationBarFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ if (isLandscape) {
+ layoutParams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.WRAP_CONTENT,
+ LinearLayout.LayoutParams.MATCH_PARENT);
+ layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
+ | systemUiNavigationBarFlags);
+ } else {
+ layoutParams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ layoutParams.gravity = Gravity.NO_GRAVITY;
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
+ & ~systemUiNavigationBarFlags);
+ }
}
+ mImageView.addOnLayoutChangeListener(mOnLayoutChangeListener);
mImageView.setLayoutParams(layoutParams);
}
private void updatePictureInPictureParams() {
+ mImageView.removeOnLayoutChangeListener(mOnLayoutChangeListener);
// do not bother PictureInPictureParams update when it's already in pip mode.
if (isInPictureInPictureMode()) return;
final Rect imageViewRect = new Rect();
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java b/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java
new file mode 100644
index 000000000..4c147ec97
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2021 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.example.android.apis.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.util.Rational;
+import android.widget.ImageView;
+
+import com.example.android.apis.R;
+
+/**
+ * Extended {@link ImageView} that keeps fixed aspect ratio (specified in layout file) when
+ * one of the dimension is in exact while the other one in wrap_content size mode.
+ */
+public class FixedAspectRatioImageView extends ImageView {
+ private final Rational mAspectRatio;
+
+ public FixedAspectRatioImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ final TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
+ R.styleable.FixedAspectRatioImageView, 0, 0);
+ try {
+ mAspectRatio = Rational.parseRational(
+ a.getString(R.styleable.FixedAspectRatioImageView_aspectRatio));
+ } finally {
+ a.recycle();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ final int width, height;
+ if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY
+ && MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ height = MeasureSpec.getSize(heightMeasureSpec);
+ } else if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY) {
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ height = (int) (width / mAspectRatio.floatValue());
+ } else {
+ height = MeasureSpec.getSize(heightMeasureSpec);
+ width = (int) (height * mAspectRatio.floatValue());
+ }
+ android.util.Log.d("DebugMe", "onMeasure w=" + width + " h=" + height);
+ setMeasuredDimension(width, height);
+ }
+} \ No newline at end of file
diff --git a/samples/samples_source.prop_template b/samples/samples_source.prop_template
index 523d6bda8..1b08968c7 100644
--- a/samples/samples_source.prop_template
+++ b/samples/samples_source.prop_template
@@ -2,3 +2,5 @@ Pkg.UserSrc=false
Pkg.Revision=2
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
diff --git a/sdk/build_tools_source.prop_template b/sdk/build_tools_source.prop_template
index 83bf78d20..36323fdfa 100644
--- a/sdk/build_tools_source.prop_template
+++ b/sdk/build_tools_source.prop_template
@@ -1,3 +1,3 @@
Pkg.UserSrc=false
-Pkg.Revision=${PLATFORM_SDK_VERSION}.0.0
+Pkg.Revision=${PLATFORM_SDK_VERSION}.0.1
#Pkg.Revision=31.0.0 rc5
diff --git a/sdk/doc_source.prop_template b/sdk/doc_source.prop_template
index d3cdfd5ee..61a9923be 100644
--- a/sdk/doc_source.prop_template
+++ b/sdk/doc_source.prop_template
@@ -2,3 +2,5 @@ Pkg.UserSrc=false
Pkg.Revision=1
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
diff --git a/sdk/platform_source.prop_template b/sdk/platform_source.prop_template
index 35a00af81..fa996c7e3 100644
--- a/sdk/platform_source.prop_template
+++ b/sdk/platform_source.prop_template
@@ -5,6 +5,8 @@ Platform.CodeName=
Pkg.Revision=1
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
Layoutlib.Api=15
Layoutlib.Revision=1
Platform.MinToolsRev=22
diff --git a/sdk/source_source.prop_template b/sdk/source_source.prop_template
index d3cdfd5ee..61a9923be 100644
--- a/sdk/source_source.prop_template
+++ b/sdk/source_source.prop_template
@@ -2,3 +2,5 @@ Pkg.UserSrc=false
Pkg.Revision=1
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
diff --git a/sys-img/images_arm64-v8a_source.prop_template b/sys-img/images_arm64-v8a_source.prop_template
index e553746a5..decf56567 100644
--- a/sys-img/images_arm64-v8a_source.prop_template
+++ b/sys-img/images_arm64-v8a_source.prop_template
@@ -4,6 +4,8 @@ Pkg.Revision=2
Pkg.Dependencies=emulator#29.1.11
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=arm64-v8a
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_armeabi-v7a_source.prop_template b/sys-img/images_armeabi-v7a_source.prop_template
index 2851d28fb..87e606757 100644
--- a/sys-img/images_armeabi-v7a_source.prop_template
+++ b/sys-img/images_armeabi-v7a_source.prop_template
@@ -4,6 +4,8 @@ Pkg.Revision=2
Pkg.Dependencies=emulator#29.1.11
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=armeabi-v7a
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_armeabi_source.prop_template b/sys-img/images_armeabi_source.prop_template
index fb4e8088b..bbedcc0e5 100644
--- a/sys-img/images_armeabi_source.prop_template
+++ b/sys-img/images_armeabi_source.prop_template
@@ -4,6 +4,8 @@ Pkg.Revision=2
Pkg.Dependencies=emulator#29.1.11
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=armeabi
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_mips64_source.prop_template b/sys-img/images_mips64_source.prop_template
index 9778f9763..89a29ed5c 100644
--- a/sys-img/images_mips64_source.prop_template
+++ b/sys-img/images_mips64_source.prop_template
@@ -3,6 +3,8 @@ Pkg.UserSrc=false
Pkg.Revision=1
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=mips64
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_mips_source.prop_template b/sys-img/images_mips_source.prop_template
index 7c3ede315..617949ca0 100644
--- a/sys-img/images_mips_source.prop_template
+++ b/sys-img/images_mips_source.prop_template
@@ -3,6 +3,8 @@ Pkg.UserSrc=false
Pkg.Revision=1
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=mips
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_x86_64_source.prop_template b/sys-img/images_x86_64_source.prop_template
index fe8ba6981..8329473bf 100644
--- a/sys-img/images_x86_64_source.prop_template
+++ b/sys-img/images_x86_64_source.prop_template
@@ -4,6 +4,8 @@ Pkg.Revision=2
Pkg.Dependencies=emulator#29.1.11
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=x86_64
SystemImage.GpuSupport=true
SystemImage.TagId=default
diff --git a/sys-img/images_x86_source.prop_template b/sys-img/images_x86_source.prop_template
index 76daa9f48..af6b0e2d0 100644
--- a/sys-img/images_x86_source.prop_template
+++ b/sys-img/images_x86_source.prop_template
@@ -4,6 +4,8 @@ Pkg.Revision=2
Pkg.Dependencies=emulator#29.1.11
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
SystemImage.Abi=x86
SystemImage.GpuSupport=true
SystemImage.TagId=default